理解できない修正をねだる代わりに、AIを使ってエラーメッセージを分解し、診断の手法を身につけよう。
このレッスンを Kodokon で開くバグにぶつかったとき、真っ先に出る反応はスタックトレースをチャットに貼り付けて「これを直して」と頼むことだ。たいていうまくいく - そしてまさにそこが問題だ。あなたは理解しないままの修正を手にして立ち去り、それが属するバグの種類は来月また別の形で戻ってくる。バグは貴重な学びの機会だ。あなたの頭の中のモデルと、システムの実際の振る舞いとのあいだのズレを明らかにしてくれる。修正を求めることは、その情報を捨ててしまうことだ。正しいやり方はこうだ。AIにエラーメッセージを説明してもらい、診断の手法を並べてもらう - そして調査は自分自身で進めるのだ。
あなたは、私がデバッグを上達させるのを助けてくれるシニア開発者です。あなたの仕事は説明することであって、私の代わりに直すことではありません。
コンテキスト: [言語 + バージョン、フレームワーク、そのコードが本来やるべきこと]。
コールスタックを含む、エラーメッセージの全文:
[エラーメッセージを貼り付け]
関連するコード片(10行から30行):
[コードを貼り付け]
あなたのタスク:
1. エラーメッセージを部分ごとに説明してください: それは正確に何を言っていて、何を言っていないのか?
2. 私のコンテキストにおいて最もありそうな原因を2つか3つ、可能性の高い順から低い順に挙げてください。
3. それぞれの原因について、私が自分で試せる具体的な確認方法を提案してください(狙いを定めたログ、ブレークポイント、独立したテスト)。
厳守事項: 修正を渡さないでください。原因を確信をもって特定できたとしても、どこを見ればいいかを伝えるだけにしてください。このプロンプトには、決定的な違いを生む3つの性質がある。1つ目は、最小限だが完全なコンテキストだ。バージョン、コードの意図、エラーメッセージの全文 - あなたのコンテキストを推測するAIは原因を幻覚(ハルシネーション)で作り出す。2つ目は、可能性の順に並べた原因を求めること。あなたは確信ではなく仮説で考えることを学ぶ。3つ目は、修正の明示的な禁止だ。これがないと、モデルは役立とうと訓練されているため、ほぼ必ず解決策のほうへ滑っていく。枠組みを固定するのはあなたの役目だ。
あなたは私のデバッグコーチです。厳格なソクラテス式問答法で進めます。答えを決して教えず、問いを投げかけてください。
私のバグ: [観察された症状]が起きるが、私は[期待される振る舞い]を期待していた。
すでに確認したこと: [リスト]。
進め方:
- 原因を切り分けられるよう、一度に1つだけ質問してください。
- 各質問は、ある仮説を除外するか、別の仮説を補強するかのどちらかでなければなりません。
- 私が答えたら、次の質問をする前に、私の答えがどの筋を消し去るのかを説明してください。
- 私が仮説を述べたら、それを確認または反証する最速のテストを設計する手助けをしてください。
禁止事項: たとえあなたにとって明白に思えても、原因を直接口にしないでください。この2つ目のプロンプトは、最も難しいケースをカバーする。サイレントなバグ、つまり例外が出ず、プログラムがただ期待とは違うことをするケースだ。AIにあなたへ練習させるべき手法は、経験を積んだデバッガーが誰もが使うものだ。信頼できる形で再現し、範囲を縮めて(コードやデータを二分探索して)切り分け、反証可能な仮説を立て、可能な限り安上がりな確認でその仮説をテストする。ここでAIは、返事をしてくれるラバーダックの役割を演じる - あなたが手順を飛ばすのを止めてくれるラバーダックだ。