プロジェクトのコード規模が大きくなってくると、一回のテストの実行にかかる時間が数十秒を超えてくるようなことがある。変更があったファイルあるいはパッケージのみをテストするような進め方にすると効率が上がるが、後になってから「実は他のところが影響を受けてテストが通らなくなっていた」というようなことが起きるようになり、これはこれで効率が悪い。
加えて、テスト結果も欲を言えば「問題が発生した時のみ」通知してほしい。テストが終了するたびに結果を目視してOKかどうかを確認する、という作業も、1日に何十回と繰り返していればそこそこ目が疲れる。
そこで、開発作業中にファイルの変更があるたびにバックグラウンドで全パッケージの自動テストを走らせ、Failしたらノーティフィケーションで通知する、というようなことを試した。
- コードを変更して保存したら、IDE上でそのパッケージのみテストを走らせる(これの結果は数秒以内に返ってくる)。
- テストを通過しているようだったら、そのまま実装を続行する。
- 一方で、バックグラウンドで全パッケージのテストを走らせておく(これの結果は大きいプロジェクトだと数十秒ぐらいかかる)
- もしそこでテストに失敗したらノーティフィケーションを使って失敗を通知する。
- 失敗が通知されたら、原因を調べる。通知がこないようだったら、実装作業に専念していれば良い。
Rubyのスクリプトを書いて同じようなことをやっている方がいたので、これを若干書き換えながら使っていたのだが、マシンごと/プロジェクトごとに設定をするのが面倒だったので、ツールを作ることにした。
導入の面倒さを省く目的で作ったので、導入方法はシンプルです。
brew tap yokoe/yagisan
brew install yagisan
brewでインストールをしたら、テストを走らせたいプロジェクトのディレクトリで yagisan コマンドを実行するだけです。
$ cd /path/to/project
$ yagisan
コマンドを実行したディレクトリの配下で.go拡張子のファイルが保存されると、バックグラウンドで go test ./… が実行されます。テストに失敗すると、失敗した旨を伝えるノーティフィケーションが表示されます。成功した場合は通知しません。
ものすごくシンプルな仕組み・実装ですが、ソースコードも公開しているので見たい方がいればどうぞ。