`go test` に色を付けるツールを作った #golang

Masayuki Izumi
blog.izum.in
Published in
3 min readNov 4, 2018

--

n 番煎じではあるが,つくった.

go get github.com/izumin5210/cgt でインストールして,テストの結果をgo test -v ./... | cgt みたいな感じでパイプで渡すと色がつく.

なぜつくったか

当然ながら,既存のツールはいくつかある:

いずれも go test -v ./... の代わりに richgo test ./... などとして利用する,そもそもの呼び出すバイナリを差し替えるタイプのツール.

一方で,ちょっと大きめの Go プロジェクトでは make をタスクランナーとして使うことがあり,テストの実行も make test となっていることが多々ある.

そのため,テストの実行コマンドごと違うものにする既存ツールでは Makefile を変更する必要がでてくる.自分がテストの出力に色つけたいだけなのに,チーム全体に gotestrichgo を入れさせるのもなんか違う?と考えた.

どう実現したか

テストの実行方法に依存せず,入出力だけ意識できればいい.なので,パイプで受け取って色塗って出力するだけのツールを作るに至った.

実装はほぼ gotest そのままで,インプットだけ標準入力にしてある.richgo の出力はきれいなんだけど,インタフェースを変えたくなかったので出力形式自体は変えていない.

go test の出力に対してなにかをする他ツールととの相性を考えて.あまり聞いたことはないけど…)

余談: 色を塗る

普段 CLI を作るとき,出力に色をつけるのに github.com/fatih/color を使っていた.しかし, color は archive されてしまったため代替を探していた.

github.com/ttacon/chalkgithub.com/logrusorgru/aurora を試し,後者を採用した.どちらも使用感とかにそこまで差があるわけじゃなかったので,フィーリングによる選択.

(正直 color が手に馴染んでいたのもあり一番使いやすいと思ってるので,ちょっと残念….fork しても良かったかもしれない.)

閑話休題.

使用感とか

go test の出力は見やすいとは言えないので,色がつくのはやっぱり便利.

一方で,思ったより使いやすくなくてびっくりした. | cgt って打つのが意外としんどい.qwerty 配列だと c も g も t も左手なのが良くないのかもしれない.zsh の global alias で GT を当ててみたけど,それでも打ちづらい.なにか良い global alias を思いつけば便利になりそうな予感はある.

まあどう頑張っても「 gotest ./... ってやったら色がつく」より使いやすいとはならないはず.難しい.

--

--