【入門編】Gitの履歴をデータベースのように扱う:git-logとjqコマンドのパイプライン処理で独自分析レポートを作る – バージョン管理・CI/CD活用バイブル

エンジニアの皆さん、こんにちは。

Gitは単なるソースコードの保管庫だと思っていませんか?実はGitの履歴は、チームの生産性、健康状態、そして「ボトルネック」が刻まれた極めて価値の高いデータベースなのです。

今日は、Gitのログを`jq`コマンドで料理し、あなたのチームの活動を「可視化」する、少しプロフェッショナルなハック術を伝授します。これを使えば、直感や感情ではない、データに基づいた健全なエンジニアリング文化を作ることができますよ。

—

1. なぜ「Git × jq」なのか?

`git log`の結果は人間には読みやすいですが、コンピュータには扱いづらい。そこで、`–pretty=format`を使ってJSON形式で出力し、コマンドラインの魔法使い`jq`に渡します。

`jq`はJSONを自在に加工できる最強のフィルタツールです。これを使えば、わざわざ重い分析ツールを導入しなくても、手元のターミナルだけで「誰が」「いつ」「どれくらいの熱量で」コードを書いているかを一瞬で抽出できます。

2. 環境準備:最強のツールを揃える

まずは道具を整えましょう。`jq`がインストールされているか確認してください。

macOSの場合
brew install jq

Ubuntu/Debianの場合
sudo apt install jq

これだけで準備完了です。

3. HelloWorld: コミットログをJSON化する

まずは、Gitのログを機械可読な形式(JSON)で出力する「基本の型」を叩き込みましょう。

git log –pretty=format:'{“hash”:”%h”,”author”:”%an”,”date”:”%ad”,”msg”:”%s”}%n’ –date=iso

  • `%h`: 短縮ハッシュ
  • `%an`: 著者名
  • `%ad`: 日時(iso形式は解析に便利!)
  • `%s`: コミットメッセージ
  • `%n`: 改行(これがないとJSONとしてパースできません)

これを実行すると、1行ずつJSONオブジェクトが出力されます。これがデータ分析の「生データ」となります。

4. 実践:開発者の活動量を分析する

では、ここからが本題です。「誰がどれだけコミットしているか(貢献度の可視化)」を集計してみましょう。

git log –pretty=format:'{“author”:”%an”}’ | \
jq -s ‘group_by(.author) | map({author: .[0].author, count: length}) | sort_by(.count) | reverse’

  • `group_by(.author)`: 著者ごとにグループ化します。
  • `map(…)`: 各グループから名前と件数を取り出します。
  • `sort_by(.count) | reverse`: コミット数が多い順に並べ替えます。

これを実行した瞬間、チームの「今の勢力図」が数字として浮かび上がります。

5. 高度な分析:時間帯別アクティビティ

次に、チームが最も集中している時間帯を特定しましょう。「夜型開発」が常態化していないか、あるいは「午後にミーティングが集中しすぎてコードが書けていない」といった課題が見えてきます。

git log –pretty=format:’%ad’ –date=format:’%H’ | \
sort | uniq -c | awk ‘{print “{\”hour\”:”$2″,\”count\”:”$1″}”}’ | jq -s .

  • `–date=format:’%H’`: 日時から「時間(00-23)」だけを抽出。
  • `sort | uniq -c`: 各時間帯のコミット数をカウント。

この結果をグラフ化ツール(ExcelやGoogleスプレッドシートでも可)に貼り付ければ、一瞬で「チームの生産性ヒートマップ」の完成です。

6. 先輩からのアドバイス:なぜこれをやるのか?

「数値化」は監視するためではありません。「チームのボトルネックを特定し、改善の議論を始めるため」にあります。

例えば:

  • 特定の時間帯にコミットが集中しているなら、その時間は「集中タイム(会議禁止)」にする。
  • 特定のメンバーの負荷が高すぎるなら、タスク配分を見直す。

Gitは単なる「履歴帳」ではなく、あなたのチームを最適化するための「ログデータベース」です。ぜひ今日から、コマンドラインを使って自分たちの働き方を観察してみてください。

—

まとめ:
1. `git log`のフォーマット出力をJSONにする。
2. `jq`を使ってグループ化・集計を行う。
3. 数値から「チームの課題」を見つけ出し、会話のきっかけにする。

これだけで、あなたはただコードを書く人から、「チームの生産性をデザインできるエンジニア」へと一歩近づけます。このパイプラインを自分好みにカスタマイズして、ぜひ現場の改善に役立ててくださいね!

何か詰まったら、いつでも聞いてください。応援していますよ。

タイトルとURLをコピーしました