Diff(差分)とは

定義と基本概念

Diff(ディフ)とは、2つのバージョン間で「どのファイルの、どの行が、どのように変化したか」を示す差分情報を意味します。

Gitをはじめとするバージョン管理システムでは、変更内容を視覚的に把握するための比較結果としてこのDiffが常に表示されます。
Pull Request(PR)レビューでも、レビュアーはこのDiffを読みながらコードの正当性・安全性・可読性をチェックします。

Diffの表示形式と構成

典型的な行単位の変更表示(Unified Format):

@@ function loginHandler(req, res) {
-   const token = req.body.token
+   const token = req.headers['x-auth-token']
  • -:削除された行(旧バージョン)
  • +:追加された行(新バージョン)
  • @@:変更範囲の文脈(hunk)

GitHubやGitLabでは、これに加えてコメント挿入、ファイルナビゲーション、Fold表示、レビュー補助UIなどが提供されます。

レビューでDiffを読む際の観点

✔ 意図と差分が一致しているか

  • PRの目的に対して、必要以上に多くの差分が含まれていないか?
  • 機械生成ファイルや整形だけの変更が混ざっていないか?

✔ ロジックの変化が明示的か

  • +の追加で処理が大きく変わっていないか?
  • -の削除で既存機能が失われていないか?

✔ Diffで読みにくい箇所の補足があるか

  • コンポーネントの再構成、ファイル分割などはコメント補足が必要
  • 変数のスコープ変更・関数切り出しなども、見た目以上の意味を持つ

実務における工夫とベストプラクティス

1ファイルのDiffが巨大すぎる場合

  • PRを機能単位で分割する
  • git add -p によるコミット単位の整理
  • ?w=1(空白無視)で比較:GitHubでは Files changed?w=1 で表示可能

意図しない差分を含めない工夫

  • prettier などでの自動整形は、別コミット or 別PRで実行
  • IDEの自動import修正などがノイズになる場合は、手動で見直し

会話例:Diffに関するレビュー指摘

Reviewer:
  このDiff、整形だけの変更とロジックの追加が混ざっていて読みづらいです。
  整形は別PRにしてもらえると助かります。
Developer:
  了解です、Prettierの実行部分を切り離して再Pushします。

関連コマンド(Git)

git diff                # ワークツリーとindexの差分
git diff --cached       # indexとHEADの差分(add済み)
git diff <commit> <commit>   # 任意2コミット間の差分
git show <commit>       # 指定コミットの変更内容を表示

Diffを読む力がレビューの精度を決める

  • Diffは「開発者が何をしたか」を言葉以上に雄弁に語る情報源
  • 変化の中に“設計の意図”や“思考の痕跡”が見えることも多い
  • 丁寧に、かつ批判的に読むことでレビューの質が上がる

関連用語