📝

【Claude Code活用】差分確認・適用を任せる

に公開

Claude Code のファイル編集フロー

Claude Code はファイルを変更するとき、適用前に差分を提示して確認を取る設計になっています。

変更内容の計画

差分(unified diff)を表示

ユーザーが y / n を選択

y なら適用・n ならキャンセル

この確認ステップがあることで、意図しない変更がコードベースに混入するリスクを最小化できます。

実際に任せてみた:repl.py の更新

agent01 の Step 07 と Step 09 では、既存の src/repl.py に新機能を追加する必要がありました。

Step 09 では patch_file / write_file の人間確認フローを追加するため、repl.py の複数箇所を変更しました。Claude Code は変更前に unified diff 形式で差分を提示し、確認後に適用しました。

agent01 が実装した show_diff / patch_file の動作は以下のとおりです。

src/tools/diff_tools.py
def show_diff(original: str, modified: str, filename: str = "file") -> str:
    """変更前後のテキストの差分をunified diff形式で返す。"""
    original_lines = original.splitlines(keepends=True)
    modified_lines = modified.splitlines(keepends=True)

    diff = difflib.unified_diff(
        original_lines,
        modified_lines,
        fromfile=f"a/{filename}",
        tofile=f"b/{filename}",
        lineterm="",
    )
    return "\n".join(diff)


def patch_file(path: str, original_snippet: str, new_snippet: str) -> str:
    """ファイルの特定箇所を部分的に置換する。"""
    content = file_path.read_text(encoding="utf-8")

    if original_snippet not in content:
        return f"エラー:指定されたテキストがファイル内に見つかりません。\n..."

    new_content = content.replace(original_snippet, new_snippet, 1)
    file_path.write_text(new_content, encoding="utf-8")
    return f"✅ ファイルを更新しました: {path}"

patch_fileoriginal_snippet が存在しない場合はエラーを返す設計です。これにより、対象箇所がすでに変更済みだった場合でも安全に失敗します。

実装指示書での差分指示の書き方

実装指示書に変更内容を明示することで、Claude Code の精度が上がりました。効果的だった指示形式を紹介します。

## repl.py の更新

以下の関数 `_confirm_tool_call``_run_loop` メソッドの前に追加する。

### 追加する関数

```python
def _confirm_tool_call(self, tool_name: str, args: dict) -> bool:
    # ...
```

### 変更箇所

`_run_loop` 内の以下の箇所に確認ロジックを挿入する。

変更前:
```python
result = dispatch(tool_name, arguments)
```

変更後:
```python
if requires_confirmation(tool_name):
    if not self._confirm_tool_call(tool_name, arguments):
        result = "キャンセルされました"
        continue
result = dispatch(tool_name, arguments)
```

「既存の〇〇関数に以下を追加する」という形式で変更前後を明示することで、誤った箇所への適用を防げます。

気づき

複数箇所の変更が正確に適用された:Step 09 では repl.py の複数箇所に変更が必要でしたが、Claude Code は順番に差分を提示しながら全箇所を正確に更新しました。インポート文の追加漏れも自動で補完されていました。

変更範囲を絞った指示書ほど精度が高い:「repl.py を修正してください」という曖昧な指示よりも、「_run_loop の 〇〇行目に以下を追加してください」という具体的な指示の方が一発で意図通りの変更が得られました。

patch_fileoriginal_snippet 特定が正確:Step 13 のデモテストで、Claude Code が data=[] という短い文字列を正確に特定して patch_file を呼び出した様子が確認されました。文字列の一致判定を使うシンプルな実装でも、LLM が適切なスニペットを指定すれば高精度に機能します。

まとめ

Claude Code の差分確認フローは、既存コードを壊さない安全な変更を実現します。実装指示書で変更前後を明示しておくことで、複数箇所の変更も正確に適用できます。人間の確認ステップを挟む設計が、AI を使った開発における重要な安全弁になっています。

次回

B5 では、Claude Code のコマンド実行能力とテスト結果の解釈について紹介します。動作確認スクリプトを自動実行して完了条件を自己チェックした体験をお伝えします。

シリーズリンク(Series B)

記事 タイトル
B1 Claude Codeとは・導入と初期設定
B2 ファイル読み書きを任せる
B3 コードベース探索を任せる
B4 差分確認・適用を任せる(本記事)
B5 テスト実行と結果解釈を任せる
B6 複数ファイル跨ぎの修正を任せる
B7 PROGRESS.md駆動開発
B8 Zenn記事をClaude Codeに書かせる

Discussion