Claude がコードを書き、テストが失敗し、そのエラーの対処をあなたに任せます。
自己修正エージェントは違います。自分の失敗を読み、原因を修正し、すべてのテストが通るまで再実行します。
一度設定すれば、あなたはエージェントの無給デバッガーではなくなります。
必要な完全な設定はこちらです 👇
本題に入る前に、私は Telegram チャンネルで AI とバイブコーディングに関する日々のメモを共有しています: https://t.me/zodchixquant🧠

なぜ1回のパスでは不十分なのか
デフォルトでは、Claude はタスクを1回実行します。テストが失敗すると、エラーを報告して待機します。あなたがそれを読み、貼り付け直し、もう一度試すように指示します。デバッグをしているのはあなたで、Claude はただタイピングしているだけです。
自己修正エージェントはそれを逆転させます。自分の失敗を読み、それがどんなバグなのかを解明し、その原因を修正し、再実行します。これはデバッガーの思考法と同じです。あなたが介入するのは、テストが通った時か、本当に行き詰まった時だけです。
ファイル 1: 修正コマンド
これは実際に実行するループです。.claude/commands/fix.md に配置します:
1---2description: タスクを実行し、すべてのテストが通るまで自己修正する3argument-hint: <task>4allowed-tools: Read, Write, Edit, Glob, Grep, Bash5model: sonnet6---78タスク: $ARGUMENTS910ループ:111. タスクを実装する。122. テストスイートを実行する: `npm test` (または pytest、cargo test)。133. すべてのテストが通った場合:停止し、結果を表示する。144. テストが失敗した場合:エラーの種類を分類し、根本原因を特定し、15 その原因を修正してから、ステップ2に戻る。165. 最大5回の試行に制限する。毎回、試行回数を通知する。1718分類→修正の順序が肝心です。毎回、診断が先、編集が後です。19テストを弱めて通そうとせず、コードを修正してください。
あなたが /fix add pagination to the users endpoint と入力すると、エージェントは書き、テストし、テストスイートがすべて通るまで自己修復します。
ファイル 2: 自動チェックフック
このコマンドはオンデマンドで機能します。フックを使うと、編集のたびに自己チェックが自動化されます。
.claude/settings.json に追加します:
1{2 "hooks": {3 "PostToolUse": [4 {5 "matcher": "Write|Edit",6 "hooks": [7 { "type": "command", "command": "npm test --silent 2>&1 | tail -5 || echo 'テスト失敗、続行前に修正してください'" }8 ]9 }10 ]11 }12}
これで、Claude がファイルを編集するたびに、テストが実行され、結果がそのビューに返されます。
失敗はすぐに表示されるため、エージェントは同じフロー内で修正し、破損したコードの上にさらに変更を積み重ねていくようなことはしません。
ファイル 3: エラーの読み方を教える
このファイルこそ、真のデバッガーと当てずっぽうを区別するものです。ほとんどのエージェントは「テスト失敗」を見て、ランダムに編集を始めます。
優れたエージェントはまずエラーの種類を読みます。なぜなら、種類ごとに原因が異なるからです。これを CLAUDE.md に記述します:
1## 修正前に失敗を読み解く方法23常に最初にエラーの種類を特定してください。それぞれ異なる意味を持ちます:45- アサーション失敗 (expected X, got Y): ロジックが間違っています。6 アサーションから値が構築された場所まで遡ってください。7 テストの期待値を修正するのではなく、計算を修正してください。89- 型エラー / undefined is not a function: 形状の不一致です。10 何かが null であるか、間違った型がこの行に到達しています。11 その値の発生源を見つけ、そこでガードするか修正してください。1213- タイムアウト / ハング: await が不足しているか、Promise が解決されません。14 await のない非同期呼び出し、または決して状態が変わらない条件を探してください。1516- インポート / モジュールが見つからない: ロジックではなく、パスまたは依存関係の問題です。17 パスを修正するかインストールし、それを使用するコードには触れないでください。1819- 不安定 (時々通る): ランダムではなく、共有状態またはタイミングの問題です。20 順序依存のテストや、mock されていない時間/ネットワークを探してください。2122ルール: 編集する前に、種類と1文の根本原因を声に出して述べてください。23原因を特定できないなら、あなたは推測しているのです。やめてください。
型エラーとアサーション失敗では、必要な対処が正反対です。前者は上流のデータ形状の問題であり、後者はその場のロジックの誤りです。まず分類すれば、エージェントは正しいものを修正します。
これをスキップすると、赤が消えるまでランダムに編集することになり、その結果、静かに壊れたままのグリーンスイートができあがります。
実際に何が起こるか
あなたは1行入力するだけです:
1/fix 日付フォーマッターが間違ったタイムゾーンを返す
その後、エージェントは自律的に動作します:
1試行 12 テスト実行 → 失敗3 種類: アサーション (expected 5, got 11)4 原因: ページサイズがクエリに適用されていない5 LIMIT 句を修正67試行 28 テスト実行 → 失敗9 種類: 型エラー (offset is undefined)10 原因: ページ1で offset が送信されず、デフォルトが間違っていた11 offset = (page-1)*size を追加1213試行 314 テスト実行 → すべて成功 (7/7)15163回の試行で修正しました。差分を確認しますか?
あなたはエラーを貼り付け直す必要はありませんでした。エージェントは自分の失敗を読み、それぞれの原因を特定し、テストスイートが通るまで修正しました。
よくある間違い
診断する前に修正する。 最も大きな問題です。エラーの種類を特定する前に編集するエージェントは推測しており、推測では運が良ければ赤を緑に変えるだけで、修正にはなりません。分類優先のルールが唯一の防御策です。
すべてのエラーを同じように扱う。 タイムアウトとアサーション失敗には何の共通点もありませんが、エラータイプガイドのないエージェントは両方を「何かがおかしい」と扱い、最も近い行を編集します。修正の半分は間違ったファイルに適用されます。
症状にパッチを当てる。 スローする呼び出しを try/catch でラップするとテストは通りますが、バグは残ります。プロトコルは、まさにこの理由でエラーの無効化を禁止しています。
テストを弱めさせる。 テストを編集することを許可されたエージェントは、最終的に失敗するテストを削除してグリーンを達成しようとします。何も証明しない合格スイートは最悪の結果なので、このルールは譲歩できません。
5分のセットアップ
2分: .claude/commands/fix.md を作成。
1分: PostToolUse フックを settings.json に追加。
1分: 自己デバッグプロトコルを CLAUDE.md に追加。
1分: 既知のバグに対して /fix を実行し、エージェントが原因を試行錯誤しながら修正するのを見守る。
あなたはエラーを中継する人間でなくなります。エージェントは自分の赤を読み、緑になるまで修正します。エージェントが賢くなったわけではなく、問題をあなたに押し返すのをやめただけです。
お読みいただきありがとうございます!
私は Telegram チャンネルで AI、金融、バイブコーディングに関する日々のメモを共有しています: https://t.me/zodchixquant






