Windows10でGitログからチームを可視化するツール、gilotを試してみた

少し前になるが、こちらの gilot の紹介を見て、ちょっと試してみた。

qiita.com

Windows 10だと、環境設定などで少しつまづいたのでメモ。

環境

2020/7/8時点。

Windows 10 Pro/Home 64bit Version 1909, Python 3.8.3, Git 2.27.0

インストール

pip でインストールするが、 Poetryもインストールしておかないとエラーとなる。

pip install git+https://github.com/hirokidaichi/gilot
Collecting git+https://github.com/hirokidaichi/gilot
  (中略)
ERROR: Exception:
Traceback (most recent call last):
  (中略)
ModuleNotFoundError: No module named 'poetry'

Windowsでは、 Poetryのインストールに Microsoft Visual C++ Build Tools が必要。

pip install poetry
    ERROR: Command errored out with exit status 1:
  (中略)
    error: Microsoft Visual C++ 14.0 is required. Get it with "Microsoft Visual C++ Build Tools": https://visualstudio.microsoft.com/downloads/

Microsoft Visual C++ Build Tools は Chocolatey の microsoft-visual-cpp-build-tools でインストールできるので、GitやPythonも含め、まとめてインストールするには以下のコマンドとなる。

cinst git python microsoft-visual-cpp-build-tools

pip install poetry
pip install git+https://github.com/hirokidaichi/gilot

...と思ったら、後述の通り pip install gilot だけでインストール可能。その場合、Poetryは不要なので、以下のコマンドだけでよかった。

cinst git python microsoft-visual-cpp-build-tools
pip install gilot

logコマンド

以下、コマンドはGit Bashで実行する。

gilot log ${Gitリポジトリパス} で、Gitリポジトリのログ解析を行う。解析対象のGitリポジトリはローカルに存在する必要がある模様。

解析結果は、デフォルトでは標準出力に出力されるが、 -o ${CSV_FILE_PATH} でファイル出力可能。

引数としてGitリポジトリのパスを取る。また、デフォルトでは origin/HEAD から master ブランチ相当となるブランチを指定しているが、 --branch ${BRANCH_NAME} で指定可能。実際にリリースや運用されているブランチを指定することが推奨されていた。

# JavaのGradleプロジェクトのため、 build/gilot/ ディレクトリを作成してそこに出力
# 約5,000コミットのGitリポジトリで2分ほどかかった
$ cd <PATH_TO_GIT_REPOSITORY>
$ date && mkdir -p build/gilot/ && gilot log . --branch master -o build/gilot/repo.csv && date
202078日 水曜日 21:31:58
202078日 水曜日 21:33:48

ファイル出力時の注意点

Qiitaの使用例では、 log の実行結果を -o オプションではなく、リダイレクトでファイル出力している。

gilot log REPO_DIR > repo.csv

-o オプションでファイル出力すると、文字コードUTF-8となるが、Git BashでリダイレクトするとShift_JIS(CP932)になる。

Gitコミットのユーザー名がすべてASCIIであれば問題ないかもしれないが、日本語などのマルチバイト文字がユーザー名に含まれると、後述の plot コマンドの入力として渡した場合にエラーが発生するため、 -o オプションでファイル出力しておいたほうが無難と思われる。

$ cd <PATH_TO_GIT_REPOSITORY>
$ mkdir -p build/gilot/ && gilot log . --branch master > build/gilot/repo.csv
$ gilot plot -i build/gilot/repo.csv -o build/gilot/graph.png
Traceback (most recent call last):
  (中略)
UnicodeDecodeError: 'utf-8' codec can't decode byte 0x8e in position 0: invalid start byte

plotコマンド

gilot log の出力結果を、 gilot plot でグラフ画像に変換する。

-i ${CSV_FILE_PATH} で入力となる gilot log の結果ファイルを指定。 -o ${PNG_FILE_PATH} で出力結果のグラフ画像をPNGで保存。

# 画像生成は数秒で実行できる
$ date && gilot plot -i build/gilot/repo.csv -o build/gilot/graph.png && date
202078日 水曜日 21:37:23
202078日 水曜日 21:37:28

# gilot log の出力をパイプで直接渡すことも可能
$ date && mkdir -p build/gilot/ && gilot log . --branch master | gilot plot -o build/gilot/graph.png && date
202078日 水曜日 21:44:11
202078日 水曜日 21:46:04

複数Gitリポジトリの解析結果を結合

チームが複数のGitリポジトリに対して変更を行っている場合、各リポジトリgilot log した結果をまとめて gilot plot できる。

# フロントエンドはGitHub Flow、バックエンドはgit-flowの別々のGitリポジトリで管理している想定
gilot log ${PATH_TO_FRONTEND} --branch master -o repo-frontend.csv
gilot log ${PATH_TO_BACKEND} --branch develop -o repo-backend.csv
gilot plot -i repo*.csv -o graph.png

振り返り

解説記事がもう出ていた。 plot 以外にも、 hotspothotgraph の説明もあり、非常に詳しい。

synamon.hatenablog.com

こちらの記事を見ると、 pip install gilot でもインストールできる模様。

GitHubのREADME.mdにも、2020/7/8段階で pip install gilot は記載があった模様。やはりREADME.mdは読まないとだめだな...