2018-01-01から1年間の記事一覧

Gradleプラグインを作ってみた #groovy #gradle

概要 これまでMavenを中心に使ってきたんだけど、今のチームではGradleを採用している。 Gradle始めて使ってみてるので、試しにプラグインを作ってみた。 どんなプラグイン? github.com ざっくりいうとただ指定したディレクトリ配下にあるSQLファイルを実行…

JJUG CCC 2018 Fall で登壇してきました #jjug_ccc #ccc_e4

JJUG CCC 2018 Fall にて「複雑なドメインに泥臭く立ち向かう」というタイトルで登壇してきました。 JJUG CCC での登壇は1年ぶりです。 セッション概要 www.java-users.jp 当日の資料 speakerdeck.com 前回登壇したときのブログ su-kun1899.hatenablog.com …

Gopher道場卒業式でLTしてきました

mercari.connpass.com 11月から4回に渡ってメルペイさんの主催するGopher道場に参加して、12/3に卒業式でLTしてきた。 業務でやらない言語を実践的に学ぶ機会はなかなかないので、大変貴重でありがたかった。 課題に手が回りきらなかったのが悔やまれるが、…

CircleCIをローカルで動かす #CircleCI

概要 circleciのCLIをインストールするとローカルで動かせるようになります。 公式 を見ながらやってみた インストール Macだとbrewで入れられる。 $ brew update $ brew install circleci brewで入れるとUpdateコマンドは使えないらしい。 $ circleci updat…

テスト用のDBをdockerで立てるGradleタスクを作る #Gradle

概要 テストでDBを別立てするような場合に、CI上ではCI環境側で提供するデータベースを利用するが、ローカル開発時のテストDBの用意がめんどくさい。 なので、コンテナDBをテスト時に立ち上げるタスクを作ってみる。 build.gradle task setupTestDatabase(ty…

What's New in Kotlin 1.3をさらっと眺めてみた #kotlin

What's New in Kotlin 1.3 - Kotlin Programming Language ↑をサラッと読んだ contract構文ができた? スマートキャストが便利になったみたいだけどよく分からん。。 whenの条件で変数代入ができるようになった @JvmStatic と @JvmField がinterfaceのcompan…

データアクセスのUnitTestについて考える

問題 DBに登録したり、ファイルに書いたり、保存するような処理のテストについて考える。 インターフェースを抽象化すると、下記のような感じになる。 public interface ItemRepository { // itemを保存する void save(Item item); } この場合、saveのユニッ…

「決断力」を読んだ

決断力 (角川oneテーマ21)作者: 羽生善治出版社/メーカー: 角川書店発売日: 2005/07/01メディア: 新書購入: 44人 クリック: 297回この商品を含むブログ (562件) を見る 読んだきっかけ 将棋を指さない僕でも名前は知っている羽生さん。 読んだきっかけは↓のt…

MacにVagrantでAnsibleのお試し環境を用意する #vagrant #Ansible

VirtualBoxとVagrantを最新化 $ brew cask install virtualbox $ brew cask install vagrant VagrantでUbuntuの環境を作成 Ubuntu18.04のBoxを使う。 Vagrant box ubuntu/bionic64 - Vagrant Cloud Boxの追加 $ vagrant box add ubuntu/bionic64 追加の確認 …

pyenvを使って異なるバージョンのpythonを併用する #python

pythonの最新バージョンで動かないツールがあって、やむなく古いpythonを使うためにpyenvを入れてみた。 インストール Macなのでbrewで入れる。 $ brew install pyenv ~/.bash_profile で環境変数等を設定する。 #pyenv export PYENV_ROOT="$HOME/.pyenv" ex…

メソッドを持ったKotlinのEnumをGroovy(Spock)から参照する #groovy #spock #kotlin

概要 KotlinはJava同様Enumに振る舞い(メソッド)を持たせることができる Groovyから振る舞いを持ったEnum要素を直接参照するとエラーになる Direct field access operator(@)経由で参照すればOK EnumのValueOfでも参照できる 振る舞いを持たないEnumはうま…

MyBatisのMapKeyはValueがクラスじゃないといけないらしい #mybatis

MyBatisでリストで取得するのは簡単 @SelectProvider(type = HogeSqlBuilder::class, method = "selectList") override fun findAll(): List<Hoge> MapKey を使うとSelect結果をいい感じにMapにしてくれるMyBatis。 この場合、Hoge.id がKey、Valueが Hoge のMapに</hoge>…

KotlinでMyBatisのSqlProviderを使う #kotlin #mybatis

概要 MyBatisのSQLはXMLに書いたりアノテーションに文字列で渡す方法があるが、SqlProviderを使う方法を試してみた。 これが一番好きかもしれない。 ちなみにSpringBoot(mybatis-spring-boot-starter)を利用している。 SqlProviderの使い方 クエリの種類に…

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メディア: 単行本(ソフトカバー) 一応Webエンジニアとして働いているが、実務ではあまり直接的に扱うことの少ないHTTPに関連する話を幅広く、歴史を交え…

データベースの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 以上でサポー…