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