`go test` に色を付けるツールを作った #golang
n 番煎じではあるが,つくった.
go get github.com/izumin5210/cgt
でインストールして,テストの結果をgo test -v ./... | cgt
みたいな感じでパイプで渡すと色がつく.
なぜつくったか
当然ながら,既存のツールはいくつかある:
いずれも go test -v ./...
の代わりに richgo test ./...
などとして利用する,そもそもの呼び出すバイナリを差し替えるタイプのツール.
一方で,ちょっと大きめの Go プロジェクトでは make
をタスクランナーとして使うことがあり,テストの実行も make test
となっていることが多々ある.
そのため,テストの実行コマンドごと違うものにする既存ツールでは Makefile
を変更する必要がでてくる.自分がテストの出力に色つけたいだけなのに,チーム全体に gotest
や richgo
を入れさせるのもなんか違う?と考えた.
どう実現したか
テストの実行方法に依存せず,入出力だけ意識できればいい.なので,パイプで受け取って色塗って出力するだけのツールを作るに至った.
実装はほぼ gotest そのままで,インプットだけ標準入力にしてある.richgo の出力はきれいなんだけど,インタフェースを変えたくなかったので出力形式自体は変えていない.
( go test
の出力に対してなにかをする他ツールととの相性を考えて.あまり聞いたことはないけど…)
余談: 色を塗る
普段 CLI を作るとき,出力に色をつけるのに github.com/fatih/color を使っていた.しかし, color は archive されてしまったため代替を探していた.
github.com/ttacon/chalk と github.com/logrusorgru/aurora を試し,後者を採用した.どちらも使用感とかにそこまで差があるわけじゃなかったので,フィーリングによる選択.
(正直 color が手に馴染んでいたのもあり一番使いやすいと思ってるので,ちょっと残念….fork しても良かったかもしれない.)
閑話休題.
使用感とか
go test
の出力は見やすいとは言えないので,色がつくのはやっぱり便利.
一方で,思ったより使いやすくなくてびっくりした. | cgt
って打つのが意外としんどい.qwerty 配列だと c も g も t も左手なのが良くないのかもしれない.zsh の global alias で GT
を当ててみたけど,それでも打ちづらい.なにか良い global alias を思いつけば便利になりそうな予感はある.
まあどう頑張っても「 gotest ./...
ってやったら色がつく」より使いやすいとはならないはず.難しい.