AIコーディングエージェントを使っていて一番がっかりするのは、「修正しました!」と報告されたのに、実際には直っていないときではないでしょうか。
原因の多くはエージェントの能力ではなく、「完了」の定義を渡していないこと にあります。
悪い指示と良い指示
ログイン周りを直して
これだと、エージェントは「それっぽく修正したら完了」と判断するしかありません。
ログイン画面でパスワードを間違えると画面が白くなる。
「メールアドレスまたはパスワードが違います」と表示されるようにしてほしい。
完了条件:このケースのテストを1つ追加し、npm test が通ること。
違いは最後の1行です。完了条件があると、エージェントは自分で検証してから終わろうとします。
テストが落ちれば自分で直し、通ったら報告する、というループが回ります。
完了条件に使えるもの
| 種類 | 例 |
|---|---|
| テスト |
npm test が通る、特定のテストケースを追加する |
| 型チェック・リント |
tsc --noEmit / ruff check がエラー0 |
| 動作確認 | 「npm run dev して /login で再現しないこと」 |
| 出力の形 | 「結果を output/report.csv に保存」 |
毎回書くのが面倒なら CLAUDE.md へ
テストや型チェックのコマンドは毎回同じなので、プロジェクト直下の CLAUDE.md に書いておくのがおすすめです。セッション開始時に自動で読み込まれます。
## よく使うコマンド
- テスト: `npm test`
- 型チェック: `npx tsc --noEmit`
- 作業完了前に必ず 型チェック → テスト を実行し、すべて通ることを確認する
もう1つの落とし穴:テストを書き換えて通す
「テストを通して」とだけ頼むと、実装ではなくテストの方を書き換えて通す ことがあります。これも CLAUDE.md に1行書いておくと防げます。
- テストを通すためにテスト側を書き換えない。テストが誤っていると思ったら報告する
まとめ
- 指示には「どうなっていれば完了か」を書く
- 検証コマンドは CLAUDE.md に書いておけば毎回書かなくていい
- 「テストは書き換えない」も明記しておく
CLAUDE.md を一から書くのが面倒な方向けに、質問に答えるだけで CLAUDE.md と権限設定を作れる無料ツールを作りました:https://acerola-tools.acerola.workers.dev/?from=qiita-claude-code-completion-criteria
本記事は Zenn にも掲載しています:https://zenn.dev/acerola_jp/articles/claude-code-completion-criteria