🚢

リポジトリを解析してコード量の変遷を可視化してくれるツール、git-of-theseusの紹介

2021/09/17に公開

モチベーション

こちらの書籍の第3章で紹介されていたツールが気になって使ってみたのでその紹介です。
https://www.lambdanote.com/collections/engineers-in-voyage

git-of-theseus

gitの履歴を解析して視覚的にグラフを表示してくれるツールです。
python製
https://github.com/erikbern/git-of-theseus

インストール

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を間違えてコミットを積んでしまったのがそのままになっていますね。

Image from Gyazo

$ git-of-theseus-stack-plot .\cohorts.json

リポジトリの行数の変遷を集計したもの。一番利用シーンが多そう。

Image from Gyazo

$ git-of-theseus-stack-plot .\exts.json

ファイルタイプごとに集計したもの

Image from Gyazo

$ 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をご覧ください。

Image from Gyazo

$ git-of-theseus-survival-plot .\survival.json --exp-fit

オプションを付けると指数フィットもでる。

Image from Gyazo

まとめ

git-of-theseusの紹介でした。実際の利用シーンとしては、最初に上げた書籍で使われていたケースと同じく、長期的にレガシープロダクトを改善するような現場で定期的にgit-of-theseus-stack-plot .\cohorts.jsonを実行して現状認識に使うという形になると思います。

Discussion