導入
Gitを使っていると、膨大な変更が含まれたコードの確認に頭を抱えることはありませんか?特に大きな機能追加やリファクタリングの後では、どこにどれだけの変更が入ったかを把握するだけで時間がかかってしまいます。そんな時に役立つのが「git diff –stat」です。このコマンドを使えば、詳細なコードの差分を追う前に、プロジェクト全体への影響度を瞬時に定量化し、レビューの優先順位や分割の判断をスムーズに行うことができます。
基礎知識
「git diff」は、コミット間やワークツリーとステージングエリアの差分を表示するコマンドですが、デフォルトではコードの行単位の変更内容まで全て出力されます。ここで使用する「–stat」オプションは、詳細を省き、変更されたファイル名と、それぞれのファイルで何行追加(+)され、何行削除(-)されたかという統計情報(サマリー)のみを出力します。これにより、変更の規模感を一目で把握することが可能になります。
実装/解決策
使い方は非常にシンプルです。ターミナルで以下のコマンドを実行するだけです。
1. 直前のコミットとの差分を確認する場合
git diff –stat HEAD^
2. 特定のブランチとの差分を確認する場合
git diff –stat main..feature/new-function
3. ステージング済みの変更を確認する場合
git diff –cached –stat
これらのコマンドを実行することで、以下のような統計結果が表示されます。
path/to/file1.py | 10 +++++—–
path/to/file2.js | 50 ++++++++++++++++++++++++++++++——————–
2 files changed, 35 insertions(+), 25 deletions(-)
この出力結果を見て、「特定ファイルへの変更が集中しすぎていないか」「影響範囲が広すぎてレビューが困難ではないか」を判断する指標にします。
サンプルプログラム
実際の現場で、特定のディレクトリ配下の変更状況を確認し、ログとして残すためのシェルスクリプト例を紹介します。
!/bin/bash
現在のブランチとmainブランチの差分統計を取得するスクリプト
TARGET_BRANCH=”main”
echo “=== 影響範囲の統計情報 ===”
–statオプションで変更のサマリーを表示
–summaryを併用すると、ファイル名の変更や権限変更なども検知可能です
git diff –stat $TARGET_BRANCH
echo “————————–”
変更行数の合計を計算して表示する簡易的な処理
DIFF_COUNT=$(git diff –shortstat $TARGET_BRANCH | awk ‘{print “追加: “$4”, 削除: “$6}’)
echo “合計変更数: $DIFF_COUNT”
このスクリプトをCI/CDのパイプラインに組み込んだり、
プルリクエスト作成前のチェックリストとして活用してください。
応用・注意点
現場での活用において、以下の点に注意してください。
・レビュー分割の目安にする:–statの結果、変更箇所が多すぎる(例えば数百行を超える)場合は、一つのプルリクエストに詰め込みすぎているサインです。機能単位やモジュール単位で分割することを検討しましょう。
・バイナリファイルに注意:画像やPDFなどのバイナリファイルが含まれる場合、行数の増減が正しく表示されないことがあります。
・–shortstatとの使い分け:ファイルごとの詳細が不要で、全体で何行変わったかだけを知りたい場合は「git diff –shortstat」を使うと、より簡潔な結果が得られます。
日々の開発で「まず全体像を把握する」という一手間を加えるだけで、コードレビューの質は劇的に向上します。ぜひ今日から活用してみてください。

コメント