💡
GoのTDDを加速するテストウォッチャーCLI「gotcha」を作った話
Goでテストを書いているとき、保存するたびに go test
を叩くのがだんだん面倒になってきた。特にTDDスタイルで開発していると、
- コードを書いて保存
-
go test
を実行 - テストが落ちるのを確認
- 実装を修正して保存
- 再び
go test
というサイクルを高速に回したくなる。
そこで、自動でファイルの変更を検知して go test
を走らせるCLIツール「gotcha」を作った。
gotchaとは?
gotcha
は .go
ファイルの変更を検知して自動的に go test
を実行してくれるツール。TDDや素早いフィードバックを求めるGo開発者向けに作った。
特徴
-
gotcha watch
で.go
ファイルの変更を監視し、テストを自動実行 -
gotcha run
で単発実行も可能 -
.gotcha.yaml
に対象・除外パスやテスト引数を定義可能 - 色付きでわかりやすいテスト結果
- インストールしてすぐ使える
インストール
go install github.com/mickamy/gotcha@latest
使い方
まず初期化:
gotcha init
すると以下のような .gotcha.yaml
が生成される:
include:
- "./..."
exclude:
- "vendor/"
- "mocks/"
args:
- "-v"
次に監視モードで実行:
gotcha watch
.go
ファイルを保存するたびに go test
が実行され、結果がすぐに表示される。
もちろん、手動で一回だけテストを実行したい場合は:
gotcha run
なぜ自作したのか?
既存のツールとしては以下のようなものがある:
-
ginkgo:
ginkgo watch
あり、ただしBDDスタイル前提 - richgo: 色付き出力だけでウォッチ機能はなし
- gotestsum: 出力整形に強いが監視機能は無し
- entr: 汎用的だがGoに特化していない
どれも一長一短で「TDD特化の小さなGoツール」としてはちょうど良いものがなかった。
なので、
- Goに特化
- 監視機能付き
- YAMLで設定可能
- シングルバイナリで軽量
というツールを自作した。
今後やりたいこと
- 変更されたファイルだけに属するパッケージのみテストする
--fast
オプション -
.gotcha.yaml
にdebounce
などのwatch設定を拡張 - CI統合のドキュメント追加
- テスト失敗だけを抜き出して見せるオプション
最後に
「保存したら即テスト」が欲しいGo開発者には gotcha
をぜひ試してみてほしい。TDDのサイクルがほんの少しだけ気持ちよく回せるようになれば嬉しい。
Discussion