バイブコーディング実践編 — Claude Code を中心に AIで安全に作る力 / テスト戦略とデバッグ — VibeContract
デバッグ — エラーログ → AI に渡す前に整える
読了目安 5 分
学習のねらい
AI がコードを生成しても、常に完璧なものができるわけではありません。 バグが発生したとき、AI に「このバグを直して」と丸投げするだけでは、期待通りの修正が得られないことが多いです。 効果的に AI の力を借りてデバッグを進めるためには、人間がエラーの状況を整理し、AI に適切な情報を渡すスキルが不可欠です。 本レッスンでは、バグをAIに渡す前に人間がやるべきこと、特に「最小再現ケースの作成」「スコープの限定」「スタックトレースの要約」といったデバッグの基本戦略を学びましょう。
最小再現ケース (Minimal Reproducer)
バグが発生したとき、最初にやるべきことは「そのバグを最もシンプルに再現できるコード」を見つけることです。 これを 最小再現ケース (Minimal Reproducer) と呼びます。
- なぜ重要か:
- 複雑なコードの中からバグの原因を特定しやすくなります。
- AI に渡す情報が少なくて済むため、AI が誤解するリスクを減らせます。
- AI の推論コスト(トークン消費)も抑えられます。
- 作り方:
- バグが発生したときの入力データや実行環境を可能な限り小さくします。
- 関係ないコードやライブラリの依存を削除し、バグが再現する最小のコードスニペットを作成します。
- 例えば、ウェブアプリケーションで発生したバグであれば、そのバグが再現するコントローラーの最小限のコードと、入力データだけを抽出します。
スコープの限定 (Scope Limitation)
バグの原因がどこにあるのか、その「スコープ (範囲)」を限定することも重要です。 AI は大量のコードを一度に読むことができますが、それでも「どこに注目すべきか」を人間が教えてあげることで、デバッグの効率が格段に上がります。
- 具体例:
- 「このファイルの中の
calculate_price関数にバグがあるようです」と伝える。 - 「この10行のコードブロックのどこかに問題があります」と指摘する。
- 関連性の低いファイルや関数は、AI に渡すプロンプトから除外するか、「ここは見なくていい」と明示します。
- 「このファイルの中の
スコープを限定することで、AI はより焦点を絞って分析を行い、的確な修正案を提示しやすくなります。
スタックトレースの要約 (Stack Trace Summarization)
エラーが発生した際に表示される スタックトレース (Stack Trace) は、バグの原因を探る上で非常に重要な情報源です。 しかし、長いスタックトレースをそのまま AI に渡しても、AI はその全体像を把握しきれなかったり、不要な情報に惑わされたりすることがあります。
-
スタックトレースの読み方:
- 下から上に読むのが基本です。一番下が最初に呼び出された関数、一番上がエラーが発生した場所です。
- 自分のコードで呼び出している部分に注目します。フレームワークやライブラリ内部の呼び出しは、通常は直接の原因ではありません。
- エラーメッセージ (
ValueError,TypeErrorなど) と、その直前の行に注目します。
-
AI に渡す前の要約:
- 関連性の低いフレームワークやライブラリの内部スタックは省略します。
- 自分のコードに関わる部分だけを抽出し、簡潔にまとめます。
- 「このスタックトレースの、特に
my_module.pyのmy_functionの部分に問題がありそうです」のように、人間が注目点を加えるプロンプトが有効です。
まとめ
AI とのデバッグでは、人間が「バグの翻訳者」として機能することが重要です。 最小再現ケースの作成、スコープの限定、スタックトレースの要約といった前処理を行うことで、AI はより正確かつ効率的にバグを特定し、修正提案を出せるようになります。 これらのデバッグ戦略を身につけ、AI を強力なデバッグパートナーとして活用しましょう。