Groovy(Spock)からKotlinのCompanion Objectを呼び出す #groovy #spock #kotlin

概要 最近はJavaではなくKotlinを書いていますが、Spockが好きすぎるのでテストはGroovyで書いたりします。 KotlinのCompanion Objectをテストするときに、Groovy側から呼び出す方法です。 Companion Object Kotlinではクラスに静的なメソッドを定義する時は…

Nuxtで画面に横断的にMiddlewareを適用する #nuxtjs #vuejs

概要 Nuxtにはミドルウェアという機構がある。 ミドルウェアを使うと、ページがレンダリングされる前に、実行されるカスタム関数を定義できる。 複数のページでミドルウェアを実行するには3つ方法がある。 nuxt.config.js でrouterに読み込ませる layoutでミ…

SpringBootで独自例外を作ってControllerAdviceでハンドリングする

概要 独自RuntimeExceptionを作る 独自例外はControllerAdviceで横断的にハンドリングする テストを書く 前提 Kotlin RestControllerを想定 ゆえにRestControllerAdviceを使う テストはSpock 独自例外の作成 RuntimeExceptionを作成 コンストラクタ引数はnul…

Mavenで実行するテストをIDEAでデバッグする #Maven #IntelliJ

概要 IntteliJ IDEAで、Mavenプロジェクトのtestフェーズをデバッグ実行した場合に、ブレークポイントで止まってくれない(ステップ実行ができない)現象に遭遇した。 Mavenはデフォルトだとテストが別の(forkした)プロセスで実行されるため、IDEAがテストの…

AWS CodeDeployを使う時のEC2のセットアップ #AWS

AWS

概要 CodeDeployを使ってEC2にデプロイするときに準備すること。 既にEC2インスタンス自体は存在することを想定。 AWS CodeDeployエージェントのインストール docs.aws.amazon.com rubyとwgetを先に入れておく必要があるようだ # ステータス sudo service co…

AWS CodeDeployのApplicationStopは旧リビジョンのスクリプトが使われる #AWS

AWS

概要 CodeDeployのApplicationStopは旧リビジョンのスクリプトが使われる。 どういう問題が起きるか? 一度デプロイに成功した後、二度目以降で発生するようなバグがApplicationStopのスクリプトで発生すると、再試行してもエラーになり続ける。 (新しい修…

AWS CodeDeployでSpringBootのデプロイが終わらない #AWS

概要 AWS CodeDeployを使ってSpringBootをEC2にデプロイするようにした。 bashのスクリプトを使って、javaコマンドのバックグラウンド実行(&)で起動したところデプロイが終わらなかった。 もう少し正確にいうと、スクリプトは期待通りに動作し、Bootアプリ…

Web制作者のためのUXデザインをはじめる本を読んだ

Web制作者のためのUXデザインをはじめる本 ユーザビリティ評価からカスタマージャーニーマップまで作者: 玉飼真一,村上竜介,佐藤哲,太田文明,常盤晋作,株式会社アイ・エム・ジェイ出版社/メーカー: 翔泳社発売日: 2016/11/15メディア: 単行本(ソフトカバー…

AWS CodeBuild でMaven Wrapperが使えない #AWS初心者

AWS

概要 AWS CodeBuildで提供されているJavaビルド環境( aws/codebuild/java:openjdk-8 )ではMaven Wrapperがエラーなってしまう。 Mavenはイメージに含まれているのでそれをそのまま使うか、別イメージを利用する必要がありそう。 詳細 CIツールとしてCodeBu…

MacでNginxを使ってみる #nginx

脱Apacheおじさんの道は遠い。 インストール brewで入れられる $ brew install nginx バージョンを確認してみる。 $ nginx -V nginx version: nginx/1.13.12 起動 nginxで起動できる $ nginx curlで確認してみる。デフォルトだと8080で起動するようだ。 $ cu…

「現場で役立つシステム設計の原則」を呼んだ

現場で役立つシステム設計の原則 〜変更を楽で安全にするオブジェクト指向の実践技法作者: 増田亨出版社/メーカー: 技術評論社発売日: 2017/07/05メディア: Kindle版この商品を含むブログ (3件) を見る 具体性に飛んだ、非常に実践的な本。 全体的に難しい表…

Interfaceでプロパティを定義する #Kotlin

Getterの実装を強制したいような時 valで定義して、オーバライドしてやればよい interface Foo { val hoge: String } class Bar(override val hoge: String) : Foo

kotlin-testで例外のテスト #Kotlin

概要 KotlinのUnitTestはSpekで書いており、Assertion Frameworkはkotlin-testを使ってる。 kotlin-testで例外発生のテストをAssertする。 例外の発生をテストする assertFailsを使えばOK assertFails { someMethod(invalidArg) } 発生した例外の型をテスト…

PostgreSQLを使ったユニットテストをするときに、外部キーを一時的に無効化する

概要 RDBを使ったユニットテストをするときに、前提条件となるテストデータを用意することがある。 しかし外部キーの制約上、テストしたいことと直接関係ないデータの作成が必要になる状況が発生する。 例えば、テーブルが「親-子-孫」という階層になってい…

「Real World HTTP」を読んだ

Real World HTTP ―歴史とコードに学ぶインターネットとウェブ技術作者: 渋川よしき出版社/メーカー: オライリージャパン発売日: 2017/06/14メディア: 単行本(ソフトカバー)この商品を含むブログ (2件) を見る 一応Webエンジニアとして働いているが、実務で…

データベースのPRIMARY KEYを自動採番せずにアプリケーション側で生成する

データベースの自動採番 データベースにはPRIMARY KEY(要はID)を自動採番で生成してくれる機能を提供していることが多い。 MySQLのAuto Increment PostgreSQLのSerial OracleのSequence etc サロゲートキーのような、特に意味のないデータのIDを発行するとき…

MyBatisのuseGeneratedKeysがPostgreSQL10でエラー #MyBatis

MyBatisにはRDBが自動採番したIDを取得する機能があるのだが、下記の組み合わせでエラーになってしまった。 MyBatis:3.4.6 PostgreSQL:10.3 ### Error updating database. Cause: org.postgresql.util.PSQLException: 自動生成キーの戻りは 8.2 以上でサポー…

PostgreSQLのDocker公式イメージを使って開発用DBを構築する #PostgreSQL

前提 Docker for Mac使用 クライアントにpostgresqlを導入済み ホスト側からpsql等で接続するため コンテナの起動 イメージは postgres:10 コンテナ名は dev-postgres パスワードは postgres ポートは 15432 (コンテナの5432番にフォワードする) $ docker ru…

Nuxt.jsでWebSocketを使ってみる #nuxtjs #vuejs

Nuxt.jsでWebSocketを使ってみる。 バックエンドはexpress-templateを使ってExpressで用意する。(Nuxt.jsはWebSocketのクライアントとして使う) su-kun1899.hatenablog.com サーバ側 nuxt-expressテンプレートを使っていることを前提とする。 ExpressでWeb…

jestでVuexのmapMutationsがエラーになる #vuejs #nuxtjs #jest

jestでVuexのmapMutationが Unexpected token on mapMutations なエラーになってしまう。 ...mapMutations の ... がbabelによってエラーになってしまっているようだ。 ... はスプレッド演算子(object rest spread operator)というらしい。 解決方法 スプ…

jestでNuxt.jsの依存コンポーネントのパスがエラー #nuxtjs #vuejs #jest

Nuxt.jsはsrcディレクトリやrootディレクトリにエイリアスがついており、importなどではそれを使用する。 こんな感じで。 import child from '@/components/Child' しかしjestでテストを書こうとした場合に、パスが解決出来なくてエラーになってしまう。 Can…

期間の範囲を示すパラメータ名について考えてみた #programming

概要 APIのパラメータとして期間の範囲を表す命名について、職場でいい議論がなされたので自分なりにまとめておく。 期間の範囲というのは「開始日時」「終了日時」のようなものを想定。 start-end 扱いやすそうなのはこれ。 日時の場合は、終了側が排他的で…

nuxt-communityのexpress-templateを試してみる #nuxtjs #vuejs

概要 vue-cliから作れるNuxt.jsのテンプレートに、express-templateというのがある。 Nuxt.jsと同時にExpressを起動させて、バックエンドとして動かすことが可能。 Nuxt.js内でバックエンドのMockを作って動かせるので、フロントエンドとバックエンドの開発…

Nuxt.jsのプロジェクトにCircleCIを適用する #nuxtjs #circleci

概要 Nuxt.jsのプロジェクトをCircleCIで動かしてみる config.ymlの作成 Nodeプロジェクト用ののテンプレートを利用してconfig.ymlを作成する プロジェクトルートから .circleci/config.yml を作る。 $ mkdir .circleci $ touch .circleci/config.yml config…

Nuxt.jsでVuexを使ってみる #nuxtjs #vuejs

複数コンポーネントで状態管理をするのに便利らしいVuexを使ってみた。 Vuexストアに状態管理を任せて、各コンポーネントはストア経由で状態変更することで、状態変更を一元管理できるっぽい。 ja.nuxtjs.org ストアの作成 store/sample.js を作成する。 sto…

Requestパラメータを画面に表示する #nuxtjs #vuejs

概要 http://localhost:3000/sample?hoge=abc123 のようにRequestされた場合に、 abc123 を画面に表示してみる asyncDataを使う pageコンポーネントの場合、asyncDataというメソッドを使うと、Context経由でリクエストの情報を取得できる。 asyncDataはレン…

Nuxt.jsプロジェクトでjestにpower-assertを導入 #nuxtjs #powerassert

Nuxt.jsのテストをjestで書くというのを先日やってみたが、Assertionにpower-assertを使うようにする。 su-kun1899.hatenablog.com power-assertの導入 babel連携が必要になるので、 power-assertに加えてbabel-preset-power-assertをインストールする。 git…

nuxt generateで生成した静的ファイルをhttp-serverでホスティングする #nuxtjs

Nuxt.jsには静的ファイルの生成がサポートされており、成果物を静的ファイルとしてホスティングできるようになる。 開発中など、この静的ファイルをNuxt.jsに依存させないで確認したいときに、http-serverを使うと便利。 静的ファイルの生成 vue-cliから作成…

jestでNuxt.jsのテストを書く #jest #nuxtjs #vuejs

概要 Nuxt.jsで、jestというテスティングフレームワークを使って、コンポーネントのテストを書いてみました。 facebook.github.io 準備 ※vue-cli でNuxt.jsのプロジェクトは作成済とします。 jest-vue-preprocessorをインストールします。 たぶんVueとjestを…

VSCodeでVue.jsのフォーマットがうまくいかない #vscode #vuejs #nuxtjs

概要 とりあえずNuxt.jsはVSCodeで書いてみてるんだけど、フォーマットをかけるとエラーになってしまう。 前提 Veturというプラグインを入れています。 github.com 結論 Prettierプラグインを入れる。 github.com VSCodeの設定に下記を追加する。 "prettier.…