エラーが出たコードを生成AI に直してもらうときの精度は、情報の出し方 で大きく変わります。本記事では Traceback の貼り方、最小再現コード(MRE)の作り方、環境情報の添え方を整理します。

目次

  1. 修正依頼の基本テンプレート
  2. Traceback は省略せず全部貼る
  3. 最小再現コード(MRE)を作る
  4. サンプルデータを最小化する
  5. 環境情報を欠かさない
  6. 「期待していた挙動」を 1 行添える
  7. 状況の切り分けを依頼する
  8. 失敗するパターン
  9. 修正版を受け取った後のチェック
  10. 生成AI へのプロンプト例(MRE 作成補助)

修正依頼の基本テンプレート

エラー修正のプロンプトは、次の 4 要素を必ず入れます。

次の Python コードを実行したところ、エラーが出ました。
【コード】
(コード全体、または最小再現コード)
【エラーメッセージ】
(Traceback を省略せず全部)
【環境】
- OS: macOS 14 / Windows 11 / Ubuntu 22.04 など
- Python: 3.12.5
- 主要ライブラリ: pandas 2.2.3, numpy 2.0.1
【期待していた挙動】
(何が起きるはずだったか、を 1〜2 行)
原因と修正版のコードを提示してください。

「コード」「エラー」「環境」「期待」が揃っていれば、生成AI は的を絞って原因を推定できます。

Traceback は省略せず全部貼る

Python のエラー出力は、上から順にどこで何が起きたかを伝える構造になっています。最終行だけ貼ると、原因が呼び出し元にあるケースで見落とされます。

Traceback (most recent call last):
File "main.py", line 12, in <module>
process(df)
File "main.py", line 7, in process
return df["close"].rolling(window).mean()
KeyError: 'close'

この例では、最終行の KeyError: 'close' だけ貼ると「列名のタイポでは?」で終わってしまうかもしれません。Traceback を全部貼ることで、process(df) が呼ばれた地点や、入力 DataFrame が問題かどうかまで踏み込めます。

最小再現コード(MRE)を作る

エラーが出るコードが 500 行ある場合、すべてを貼るのは現実的ではありません。最小再現コード(Minimal Reproducible Example, MRE) に絞り込んでから貼ります。

MRE のコツは次の 3 つです。

  • 機密データ・外部 API 呼び出しを ハードコードのサンプル値に置き換える
  • 関係しないインポート・関数を削る
  • 単一ファイルで上から実行できるようにする

例として、エラーが出る前のコードと、最小化した後のコードを並べます。

# Before: 500 行のスクリプトの抜粋
import requests
import pandas as pd
from my_secret_lib import load_token
token = load_token()
res = requests.get("https://...", headers={"Authorization": token})
df = pd.DataFrame(res.json()["data"])
ma = df["close"].rolling(5).mean() # ← ここで KeyError
# After: MRE
import pandas as pd
df = pd.DataFrame({
"Date": ["2025-01-06", "2025-01-07", "2025-01-08"],
"C": [100, 101, 102], # 大文字 'C' を再現
})
ma = df["close"].rolling(5).mean() # ← ここで KeyError

MRE まで絞ると、「列名の大文字小文字」が原因と一目で分かります。生成AI に渡す前に、自分の目でも気づけることが多いです。

サンプルデータを最小化する

データに依存するエラーの場合、データの一部を 抜粋 して添えます。

  • 列構成を保つ
  • 件数は 5〜10 行で十分
  • 機密値は架空値に置換
df = pd.DataFrame({
"Code": ["7203", "9984", "8306"],
"Date": ["2025-01-06", "2025-01-06", "2025-01-06"],
"C": [2900, 9800, 1500],
})

「データの先頭 5 行」を df.head().to_dict() で出力したものを貼るのも有効です。形が一目で伝わります。

環境情報を欠かさない

「ローカルでは動くのに別環境では落ちる」型のエラーは、環境差が原因です。最低限、次の情報を添えます。

【環境】
- OS: macOS 14.5 (Apple Silicon)
- Python: 3.12.5 (pyenv で導入)
- 仮想環境: venv (.venv)
- pandas: 2.2.3
- numpy: 2.0.1
- 起動コマンド: python main.py

pip freeze の結果を全部貼るのは過剰です。該当ライブラリと、関連する代表的なライブラリ だけで十分です。

「期待していた挙動」を 1 行添える

エラーの原因と、ユーザーの本来の意図がずれていることがあります。「何が起きるはずだったか」を 1 行添えるだけで、生成AI が的外れの修正を返す確率が下がります。

【期待していた挙動】
df の close 列(小文字)で 5 日移動平均を計算し、新しい列 sma5 として追加する。

この 1 行があれば、生成AI は「列名を直す」「rolling の使い方を直す」のどちらが正しい修正かを判断できます。

状況の切り分けを依頼する

何が原因か自分でも見当がつかないときは、修正コードを書かせる前に切り分けを依頼 します。

コードとエラーは前述の通りです。
修正コードを書く前に、考えられる原因を可能性の高い順に 3 つ列挙してください。
それぞれについて、利用者側で確認するためのコマンドや出力例を 1 行ずつ添えてください。

切り分けプロンプトは「修正版を急に貼られて場当たり的に動かす」よりも、学びが多くなります。

失敗するパターン

エラー修正でよく起きる失敗の典型例です。

失敗起きること直し方
最終行だけ貼る表面的な修正になり再発するTraceback を全部貼る
コード全文を貼る関係ない部分の改変提案が返るMRE まで絞り込む
環境を書かないバージョン違いの API を使う修正が返るPython とライブラリのバージョンを書く
期待挙動を書かない意図と異なる方向の修正が返る1 行で目的を添える

修正版を受け取った後のチェック

返ってきた修正版コードは、そのまま実行する前に次を確認します。

  • 原因の説明が納得できるか(理由なしの「これで動きます」は要注意)
  • 関係ない箇所の書き換え が混ざっていないか(差分が大きいときは要警戒)
  • 新しい依存ライブラリ が追加されていないか(意図しない依存が入る)
  • API キー / トークン がコードに紛れ込んでいないか

詳しくは#7-4「AI が書いたコードを安全にレビューする観点」 の「AI が書いたコードを安全にレビューする観点」で扱います。

生成AI へのプロンプト例(MRE 作成補助)

MRE を自分で絞り込めないときは、生成AI に補助を依頼できます。

次のコードでエラーが出ています。
最小再現コード(MRE)を作るために削れる部分を教えてください。
削るべき行・削れない行・サンプルデータの最小例の 3 点をリスト形式で返してください。
【コード】
(コード全体)
【エラー】
(Traceback)

まとめ

  • エラー修正プロンプトは「コード / エラー / 環境 / 期待」の 4 要素で構成する
  • Traceback は 省略せず全部 貼る
  • 巨大なコードは 最小再現コード(MRE) に絞り込む
  • 環境はバージョンつきで明記する
  • 修正版コードは、原因説明と差分の大きさを確認してから動かす