💡

GoのTDDを加速するテストウォッチャーCLI「gotcha」を作った話

に公開

Goでテストを書いているとき、保存するたびに go test を叩くのがだんだん面倒になってきた。特にTDDスタイルで開発していると、

  • コードを書いて保存
  • go test を実行
  • テストが落ちるのを確認
  • 実装を修正して保存
  • 再び go test

というサイクルを高速に回したくなる。

そこで、自動でファイルの変更を検知して go test を走らせるCLIツール「gotcha」を作った。


gotchaとは?

gotcha.go ファイルの変更を検知して自動的に go test を実行してくれるツール。TDDや素早いフィードバックを求めるGo開発者向けに作った。

https://github.com/mickamy/gotcha


特徴

  • 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.yamldebounce などのwatch設定を拡張
  • CI統合のドキュメント追加
  • テスト失敗だけを抜き出して見せるオプション

最後に

「保存したら即テスト」が欲しいGo開発者には gotcha をぜひ試してみてほしい。TDDのサイクルがほんの少しだけ気持ちよく回せるようになれば嬉しい。

Discussion