PR

AIにいきなり直させない「失敗テスト先行」バグ修正プロンプト

失敗するテストを最小修正で成功へ変える検証フローのイメージ AI & テクノロジー
AI & テクノロジー
この記事は約7分で読めます。
記事内に広告が含まれています。

AIコーディング支援へエラーメッセージを貼り、「直してください」と頼むと、動きそうなコードは返ってきます。ところが、症状だけを隠したのか、原因を直したのか、別の機能を壊していないかは、その回答だけでは分かりません。

今回は、修正より先に失敗するテストを固定するプロンプトを、ページ番号から配列の一部を取り出す小さなJavaScript関数で試しました。GitHub Copilotの公式ガイドを設計根拠にしていますが、実行検証はこの制作環境のCodexとNode.jsで行っています。Copilot上で実行済みとは主張しません。

検証日:2026年7月18日。修正前コード、修正後コード、5項目のテストを記事制作フォルダへ保存し、Node.js 24.15.0で再実行しました。

今回のバグは1ページ目からずれる

テスト対象は、配列、ページ番号、1ページあたりの件数を受け取り、該当範囲を返す関数です。修正前は開始位置を「ページ番号×件数」で計算していたため、1ページ目なのに3件目から返していました。

先に5つの期待動作を固定しました。通常の1ページ目と2ページ目、空配列、0ページ、0件指定です。修正前の実装へテストを実行すると、最初の期待値で失敗し、実際には [‘c’]、期待値は [‘a’,’b’] と確認できました。

段階 結果 意味
修正前 終了コード1 1ページ目の期待値で失敗を再現
最小修正 開始位置を (page – 1) × pageSize へ変更 ページ番号を1始まりとして扱う
入力確認 0以下をRangeError 曖昧な入力を黙って補正しない
修正後 5 assertions passed 正常系・境界値・例外を確認

実際に使った失敗テスト先行プロンプト

失敗テスト先行のバグ修正プロンプト
対象コードのバグ修正を手伝ってください。ただし、最初からコードを書き換えないでください。

次の順序を守ってください。
1. 対象ファイルと関数、現在の入出力、期待する動作を短く整理する。
2. エラーを再現する最小入力を示す。
3. 既存のテスト方式に合わせ、修正前に必ず失敗するテストを追加または提示する。
4. テストを実行し、失敗したコマンド、終了状態、期待値、実値を記録する。
5. 原因仮説を、確認済みと未確認に分ける。
6. 依存関係、公開API、無関係なファイルを変えず、必要最小限の修正案を示す。
7. 修正後に、新しいテストと既存テストをすべて再実行する。
8. 変更ファイル、変更理由、実行コマンド、成功件数、未検証範囲を報告する。

禁止事項:テスト失敗を確認する前の修正、テストの削除や弱体化、依存関係の無断更新、破壊的コマンド、秘密ファイルの読取り。

なぜ「先にテスト」が効くのか

修正前に失敗を再現できれば、修正後の成功に意味が生まれます。反対に、最初からテストが成功していた場合、そのテストは今回のバグを捕まえていません。

もう1つの利点は、変更範囲を狭くできることです。今回必要だった中心修正は、開始位置の式を1箇所変えることでした。入力値の扱いは仕様判断を伴うため、0以下をエラーにする条件をテストへ明記しています。

実際の開発で追加したい条件

  • 使用中のテストフレームワークと実行コマンドを先に伝える。
  • 変更してよいファイルと、触れてはいけないファイルを列挙する。
  • データベース、外部API、ファイル削除を伴うテストは隔離する。
  • AIが出したコードは、静的解析、依存関係監査、人のレビューも通す。

GitHubの公式ガイドも、複雑な依頼を分割し、関連コードや具体例を示し、単体テストを先に用意する方法を案内しています。また、AIの提案は人が理解し、自動テストや検査ツールで確認する必要があります。

関連資料:テスト駆動開発を掘り下げる

失敗するテストを先に固定する考え方を掘り下げたい人向けに、テスト駆動開発の基本書を1冊だけ掲載します。購入しなくても、本記事のプロンプトとサンプルコードは利用できます。

1冊目はテスト駆動開発の考え方を学びたい人向け、2冊目はテスト設計を演習形式で身につけたい人向けです。

広告・アフィリエイトリンクを含みます。商品選定は記事内容との関連性を優先しています。

テスト駆動開発 [ Kent Beck ]

テスト駆動開発 [ Kent Beck ]

価格・在庫はリンク先でご確認ください。

まとめ:修正速度より失敗の再現性を先に作る

AIの修正案が短時間で出ても、合格条件がなければ完成とは判断できません。「失敗を再現するテスト」「最小変更」「全テスト再実行」をプロンプトの順序として固定すると、やり直しの理由が明確になります。

既存プロジェクトで試す前に、今回のような数行のサンプルコードで、修正前に失敗し、修正後に成功する流れを確認してください。

参考情報

本記事の手順はAIを活用して構成し、CodexとNode.jsで再現テストを行いました。GitHub Copilotの実行結果そのものではありません。生成コードは環境により異なるため、本番反映前にテストと人のレビューを行ってください。

タイトルとURLをコピーしました