この章の答え
blame で手掛かりを得て、差分と周辺の変更から理由を読む。
現在のコードだけでは、なぜその条件が必要なのか分からないことがあります。履歴を使うと、以前の不具合への対処や、周辺の設計変更が見えてきます。最後に触れた commit と、不具合を導入した commit は分けて考えます。
01|図でつかむ
履歴は理由を探す手掛かり。最後の編集者や commit が、そのまま原因とは限らない。
02|3つのポイントで理解する
1. blame で現在の行の来歴を見る
関数や行範囲を絞り、関連する commit を確認します。整形や移動が直近にある場合、その差分だけで原因と決めず、さらに前へ進みます。
2. show で一行の周囲も読む
変更の前後、同時に追加されたテスト、メッセージを一緒に確認します。隣の状態管理が変わった結果として、その一行が必要になった可能性があります。
3. -S と -G を使い分ける
git log -S は指定文字列の出現数が変わる変更を探します。-G は差分の行が正規表現に一致する変更を探します。関数の導入を探すのか、条件式の変化を探すのかで選びます。
03|ソースで確かめる
以下の検索は Codex リポジトリのルートで実行します。最初に対象 commit を記録し、検索結果から定義と呼び出し元を一つずつ開いてください。
git blame -L '/restore_backtrack_prompt_after_branch_error/',+12 -- codex-rs/tui/src/app_backtrack.rs
git log -S'maybe_send_next_queued_input' -- codex-rs/tui/src
# 対象 commit を決めたら git show <commit> で差分を読む
読む入口: codex-rs/tui/src/app_backtrack.rs 。リンク先は照合に使った固定 commit のファイルです。手元の版と異なる場合は、上の検索語から探し直します。
小さく試す
気になる関数を一つ選び、現在の実装、直近の変更、導入時の差分を順に見ます。
04|30秒で復習
- blame は調査の開始点。
- 差分は周辺の状態変更と一緒に読む。
- 文字列の増減と差分パターンを使い分ける。