LoginSignup
4
1

More than 3 years have passed since last update.

Goのカバレッジ解析結果をHTML出力するツールを自作してみた

Posted at

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で確認していた関数ごとのカバレッジ率を表示
  • 行数がなかったので行数を表示

スクリーンショット 2020-07-21 22.45.12.png

通過した・していないは標準ツールと同様に緑・赤で色分けする

スクリーンショット 2020-07-21 22.46.41.png

今後やりたいこと

  • ツリーのディレクトリを折り畳めるようにしたい
    • やはりファイルが増えると縦長になってスクロールするの面倒くさい
  • 標準ツールにある解析モードのsetにしか対応していない
    • count, atomicへの対応を考える
  • テストを書ききれてないので書く
  • css/js力が低いので頑張る😇

まとめ

そもそもディレクトリツリー形式で見やすくなったのかはさておき
自分が使いにくいなーと感じた点を多少改善することができた・・・ような気がしました。

ツール作るのは楽しい!
go tool cover完全に理解した😎

4
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
1