読者が抱える課題
ChatGPTやGitHub CopilotなどのAIツールにエラーログやコードを渡してバグ修正を依頼しても、意図しないコードが返ってきたり、修正後も別のエラーが発生して解消しないケースがあります。何度もAIとやり取りを重ねるうちに会話文脈が混乱し、結果として手動でデバッグしたほうが早かったという事態に陥ることがあります。
この記事で分かること
- AIがバグ修正に失敗する主な原因の分類
- 段階的な原因切り分けの手順
- 再現性を高めるための入力プロンプトテンプレート
- バグ修正依頼時に避けるべき注意点
対象読者・前提条件
- AIコードアシスタント(ChatGPT, Claude, GitHub Copilotなど)を活用して業務を行っているエンジニア
- エラーの解消にAIを利用しているが、期待通りの回答が得られず困っている方
AIがバグを修正できない主な原因
AIが適切なバグ修正案を出せない場合、原因は主に以下の4つに大別されます。
- コンテキスト(文脈)の不足: 依存ライブラリのバージョン、呼び出し元の処理、環境変数などが伝わっていない
- 問題の範囲が広すぎる: 複数の要因が絡む複雑なバグを一度に修正させようとしている
- 入力情報のノイズ: 無関係なログやコードが多すぎて、AIが重要な部分を特定できていない
- ハルシネーション・前提の誤り: AIが特定のライブラリや言語の仕様を誤解している
原因切り分けの5ステップ
AIに再依頼する前に、以下の手順で問題と入力を整理します。
ステップ1: 最小再現コード(MCVE)の作成
問題が発生している箇所の周辺コードだけを抜き出し、単体で動作または再現できる最小限のコードを作成します。関係のないロジックを削ることで、AIの認識齟齬を防ぎます。
ステップ2: 事実(ログ・挙動)と推測の分離
「〇〇の処理が怪しい」という推測ではなく、「実行したコマンド」「実際の出力・エラーログ」「期待する動作」を明確に区別して整理します。
ステップ3: 仮説の段階的検証
AIに「修正コード全体」を一度に求めず、まずは「原因の仮説」を出力させます。提示された仮説が妥当か人間が判断してから修正コードを依頼します。
ステップ4: 依存関係と環境情報の特定
使用している言語のバージョン、主要フレームワーク、関連ライブラリのバージョンを整理します。バージョンによってAPI仕様が異なる場合があるためです。
ステップ5: 会話セッションのリセット
過去の誤った文脈が会話履歴に残っている場合、AIはその情報に引きづられます。一度チャットセッションを新規作成し、整理した情報だけを再投入します。
実務用:バグ修正依頼プロンプトテンプレート
AIにバグ修正を依頼する際は、以下の構造で情報を与えると精度が向上しやすくなります。
[目的]
以下のバグを修正するための原因特定と修正案の提示をお願いします。
[発生している現象]
- 実行コマンド: npm run build
- 期待する動作: エラーなくビルドが完了すること
- 実際の挙動: 以下のエラーが発生して中断する
[エラーログ]
(ここにエラーログのスタックトレースを貼り付ける)
[該当のコード]
```typescript
// 独自実装コードの例
export async function fetchUserData(userId: string) {
const response = await fetch(`/api/users/${userId}`);
if (!response.ok) {
throw new Error('Failed to fetch');
}
return response.json();
}
[使用環境・バージョン]
- Node.js: v18.16.0
- Next.js: v13.4.0
- TypeScript: v5.0.4
[制約事項]
- 既存の外部ライブラリの追加は行わないでください。
- 最初に「考えられる原因の仮説」を挙げ、その後に修正コードを提示してください。
---
## 良い例と悪い例
### 悪い例(情報不足・曖昧)
> 「Next.jsでデータ取得のエラーが出ます。直し方を教えてください。」
**問題点**: コード、エラーメッセージ、バージョン情報がなく、AIは一般的な推測しか返せません。
### 良い例(具体的な文脈の提示)
> 「Next.js (App Router, v13.4) で `fetchUserData` 実行時に TypeError が発生します。エラーログとコードは以下の通りです。考えられる原因と、追加の依存ライブラリを使わない修正案を提示してください。」
---
## 原因切り分けチェックリスト
AIに質問を投げる前に、以下の項目が揃っているか確認してください。
- [ ] 発生しているエラーログ(スタックトレース含む)をそのまま貼り付けているか
- [ ] 期待する動作と実際の動作の違いを明記しているか
- [ ] 関連するコードのみを切り出しているか(数百行以上の巨大なファイルをそのまま渡していないか)
- [ ] 言語やフレームワークのバージョン情報を記載しているか
- [ ] 修正に関する制約条件(ライブラリ追加不可、特定の関数を使う等)を指定しているか
- [ ] 会話が長引いた場合、新規セッションで整理した情報を投げ直しているか
---
## 注意点と運用上の注意
1. **機密情報の送信防止**
ソースコードやエラーログに含まれるAPIキー、パスワード、個人情報、顧客データなどは、AIに送信する前に必ずマスク処理またはダミー値に置換してください。
2. **存在しないAPIや仕様の確認(ハルシネーション)**
AIが提示した修正コードで使用されているメソッドや設定値が実在するかどうか、必ず使用している技術の公式ドキュメントで確認してください。
3. **バージョンによる仕様変更**
AIの学習データに含まれる情報と最新のライブラリ仕様が異なる場合があります。ライブラリのメジャーバージョンアップに伴う非推奨化などは、一次情報(公式リリースノート等)を参照して検証してください。
---
## まとめ
AIを使ったバグ修正で回答精度を上げるためには、「AIに適切な文脈と制約を与えること」が重要です。直し方が分からないときは、いきなり修正コードを求めるのではなく、最小再現コードを作成して原因の仮説から順を追って切り分けを行ってください。