リポジトリを解析してコード量の変遷を可視化してくれるツール、git-of-theseusの紹介
モチベーション
こちらの書籍の第3章で紹介されていたツールが気になって使ってみたのでその紹介です。
git-of-theseus
gitの履歴を解析して視覚的にグラフを表示してくれるツールです。
python製
インストール
python製なのでpipで入ります。
pip install git-of-theseus
analyze
先ずは解析にかけます。
$ git-of-theseus-analyze <path to repo>
任意のリポジトリに移動して以下の形でもOK
$ git-of-theseus-analyze ./
自動的にmaster
ブランチを解析しにいくので(master
が無いとエラーになる)任意のブランチを解析したい時はオプションで指定します。
$ git-of-theseus-analyze ./ --branch main
成功するとカレントディレクトリに以下四つのjsonが出力されます。
- authors.json
- cohorts.json
- exts.json
- survival.json
この解析結果を元にプロットしていきます。
プロットコマンドは以下の2つです。
- git-of-theseus-stack-plot
- git-of-theseus-survival-plot
筆者のdotfiles
に対して一つずつ実行して確認してみます。
stuck-plot
$ git-of-theseus-stack-plot authors.json
コミットしたauthorごとに行数を集計したものになります。
authorを間違えてコミットを積んでしまったのがそのままになっていますね。
$ git-of-theseus-stack-plot .\cohorts.json
リポジトリの行数の変遷を集計したもの。一番利用シーンが多そう。
$ git-of-theseus-stack-plot .\exts.json
ファイルタイプごとに集計したもの
$ git-of-theseus-stack-plot .\survival.json
これは出力できない
survival-plot
$ git-of-theseus-survival-plot .\cohorts.json
これはmatplotlibのバージョンに問題があって動かなかった。
$ git-of-theseus-survival-plot .\survival.json
これは単一のリポジトリで見ても嬉しさがあんまない気がする。
詳しくはreadmeをご覧ください。
$ git-of-theseus-survival-plot .\survival.json --exp-fit
オプションを付けると指数フィットもでる。
まとめ
git-of-theseusの紹介でした。実際の利用シーンとしては、最初に上げた書籍で使われていたケースと同じく、長期的にレガシープロダクトを改善するような現場で定期的にgit-of-theseus-stack-plot .\cohorts.json
を実行して現状認識に使うという形になると思います。
Discussion