phel-lang で `git log –stat` の結果を可視化するツールを作りました
2024/07/25
phel-lang で git log --stat
の結果を可視化するツールを作りました。
これは何か
実験的なものなので、何にどれだけ役立つ物になるという確信は全くありません。
git log --stat
の結果には、コミット毎にファイル名と変更行数が出力されます。これを、以下のルールに従って、D3を使ってグラフ表示するHTMLを出力するものです。
- 変更したファイルをノードとして丸で表示します。
- 変更行数に応じて丸の大きさが変わります。変更行数が多いファイル程大きい丸になります。
- コミット回数によって丸の色が変わります。コミット回数が多いファイル程暑そうな色になります。
- 同一のコミットで変更されたファイルは、線でリンクが付きます。
- 同時にコミットされた回数によって、線の太さが変わります。回数が多い程太い線になります。
試し方
PHPにコンパイルされる関数型言語である phel-lang で作られているので、PHPと composer が動く環境があれば使えると思います。
インストール
適当なディレクトリを作成して、composer
の初期化を行ないます。(質問に適当に答えると composer.json
が作成されます)
$ mkdir saraudon-example
$ cd saraudon-example/
$ composer init
phel-saraudon をインストールします。
$ composer require --dev smeghead/phel-saraudon
これでインストールは完了です。
実行方法
別のディレクトリ(/usr/target-project
)のgit リポジトリのgit log --stat
の結果を、phel-saraudonで解析して、HTMLファイルに出力します。
$ GIT_WORK_TREE=/usr/target-project GIT_DIR=/usr/target-project/.git git log --stat -n 50 | vendor/bin/phel run vendor/smeghead/phel-saraudon/src/main.phel -- src > output.html
/usr/target-project
対象のgitリポジトリのディレクトリです。-n 50
直近50件のコミットの情報を出力します。-- src
gitリポジトリのsrc
ディレクトリ配下のファイルだけを対象とします。> output.html
phelの標準出力をリダイレクトして、HTMLファイルに保存します。- phelの実行コマンドがだいぶ煩雑ですが、このバグが修正されたらもっと直感的に実行できるようになります。
最初にも書きましたが、この可視化が何の役に立つのかまだわからないので、いろいろなリポジトリで試してみたいです。もし、試してみた方がいましたら、感想など教えてください。
皿うどん。300コミットの履歴を解析するとめっちゃ時間がかかるしカオスになることがわかった。
— しめじ(smeghead) (@smeghead) July 23, 2024
phel-saraudon phel-lang pic.twitter.com/AjczteGH6M