少し前になるが、こちらの gilot
の紹介を見て、ちょっと試してみた。
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 2020年 7月 8日 水曜日 21:31:58 2020年 7月 8日 水曜日 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 2020年 7月 8日 水曜日 21:37:23 2020年 7月 8日 水曜日 21:37:28 # gilot log の出力をパイプで直接渡すことも可能 $ date && mkdir -p build/gilot/ && gilot log . --branch master | gilot plot -o build/gilot/graph.png && date 2020年 7月 8日 水曜日 21:44:11 2020年 7月 8日 水曜日 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
以外にも、 hotspot
や hotgraph
の説明もあり、非常に詳しい。
こちらの記事を見ると、 pip install gilot
でもインストールできる模様。
GitHubのREADME.mdにも、2020/7/8段階で pip install gilot
は記載があった模様。やはりREADME.mdは読まないとだめだな...