Goは標準でカバレッジ解析するためのツールが用意されています!
テストを書いてカバレッジ確認する時にいつもお世話になっております。
# プロファイルを取得
$ go test -coverprofile=coverage.out ./...
# HTMLを出力
$ go tool cover -html=coverage.out
# 関数ごとのカバレッジ率を出力
$ go tool cover -func=coverage.out
github.com/name/repos/path/to/file.go:24: Func1 100.0%
github.com/name/repos/path/to/file.go:70: Func2 75.0%
...
...
total: (statements) 83.8%
標準搭載のツールで十分なんのですが、個人的に
- ファイル選択がプルダウン → ファイル増えると探しにくい
- 関数ごとにカバレッジ率出せる → ファイル増えると探しにくい
- HTML出力時に関数ごとのカバレッジ率も一緒に見たい
- 黒背景が嫌だ・・・
みたいな気持ちがあったので、試しに自作してみました。
やったこと
-
標準ツールさんのコードを読む&写経してみる
-
ast
パッケージとかは触ったことがなかったので楽しかった -
go tool cover
コマンド完全に理解した
-
- せっかくツール化したのでGitHub ActionsでCI/CD
-
golangci-lint
で静的解析 -
go test
を回す- 作成したツールのサンプルにも使える
- GitHub Pagesにツールで出力したHTMLを公開
-
できたもの
リポジトリ → gover-html
(ネーミングはかなり適当)
成果物はGitHub Pagesに公開するようにしたので サンプルはこちら
比較用に標準ツール版も出力しているので 標準ツール版はこちら
画面イメージ
- 左側にディレクトリツリーを固定で表示するようしてみた
- 右側は
go tool cover -func
で確認していた関数ごとのカバレッジ率を表示 - 行数がなかったので行数を表示
通過した・していないは標準ツールと同様に緑・赤で色分けする
今後やりたいこと
- ツリーのディレクトリを折り畳めるようにしたい
- やはりファイルが増えると縦長になってスクロールするの面倒くさい
- 標準ツールにある解析モードの
set
にしか対応していない-
count
,atomic
への対応を考える
-
- テストを書ききれてないので書く
- css/js力が低いので頑張る😇
まとめ
そもそもディレクトリツリー形式で見やすくなったのかはさておき
自分が使いにくいなーと感じた点を多少改善することができた・・・ような気がしました。
ツール作るのは楽しい!
go tool cover
完全に理解した😎