ChatGPTでエラー原因を整理してClaude Codeで修正する流れ
はじめに
本番環境でエラーが発生したとき、エラーログは複雑で、原因を特定するのが困難です。ChatGPT でエラーログを分析して修正方針を立てた後、Claude Code で修正する という手順により、デバッグが格段に効率化されます。
本記事では、実際のエラーから修正までの流れを解説します。
ステップ1:エラーログをChatGPT に分析させる
実際のエラー例
2026-06-22 14:23:45 ERROR: TypeError: Cannot read property 'user' of undefined
at getUserProfile (src/services/user.ts:45:12)
at async handleProfileRequest (src/routes/profile.ts:23:8)
at processRequest (src/middleware/request.ts:118:5)
Stack: Error: Cannot read property 'user' of undefined
at getUserProfile (src/services/user.ts:45)
at handleProfileRequest (src/routes/profile.ts:23)
エラーログだけではどこが問題かわかりません。
ChatGPT への分析依頼
「以下のエラーログが本番で発生しました。
原因を分析し、修正方針を提案してください。
エラーログ:
(エラー全体をコピー)
関連コード:
src/services/user.ts:45
--
const getUserProfile = (userId) => {
const user = userCache[userId]; // Line 45
return {
name: user.name,
email: user.email,
};
};
--
src/routes/profile.ts:23
--
app.get('/profile/:id', async (req, res) => {
const profile = getUserProfile(req.params.id);
res.json(profile);
});
--
このエラーの原因と、修正方針を教えてください。
」
ChatGPT の分析結果例
【原因分析】
✓ 原因:userCache に存在しないユーザーID を渡している
- Line 45: const user = userCache[userId]
- ユーザーが存在しない場合、user は undefined
- その後 user.name を参照 → TypeError
【なぜこれが起きたのか】
1. 要求者が削除したユーザーのプロフィールをリクエスト
2. キャッシュに存在しない
3. undefined チェックがない
【修正方針】
【案1】キャッシュに存在しない場合、DB から取得
- リスク:DB 負荷増加
- メリット:常に最新データを返す
【案2】キャッシュに存在しない場合、エラーを返す
- リスク:404 が多発
- メリット:実装が シンプル、高速
【案3】キャッシュ自動更新
- リスク:複雑な実装
- メリット:常に最新、キャッシュ効果
【推奨】案2(エラーを返す)理由:
- 削除済みユーザーへのアクセスは通常仕様
- 404 を返すのが正しい
- 実装がシンプル
【修正内容】
if (!userCache[userId]) {
throw new NotFoundError('User not found');
}
const user = userCache[userId];
ステップ2:修正方針をClaude Code に渡す
ChatGPT の分析を基に、Claude Code に修正を指示:
「以下のエラーを修正してください。
エラー:
Cannot read property 'user' of undefined
src/services/user.ts:45
原因(ChatGPT 分析):
userCache に存在しないユーザーID を渡す場合、undefined チェックがない
修正方針:
存在しない場合、NotFoundError を throw する
修正ファイル:src/services/user.ts の getUserProfile()
実装内容:
- if (!userCache[userId]) { throw new NotFoundError(...) }
- エラーメッセージ:『User not found』
- 既存テスト tests/services/user.test.ts で確認
実装前に計画を出してください。
」
ステップ3:Claude Code が修正を実装
Claude Code は明確な指示を受けて、修正を実装します:
// Before
const getUserProfile = (userId) => {
const user = userCache[userId]; // undefined の可能性
return {
name: user.name,
email: user.email,
};
};
// After
const getUserProfile = (userId) => {
if (!userCache[userId]) {
throw new NotFoundError(`User ${userId} not found`);
}
const user = userCache[userId]; // ここは安全
return {
name: user.name,
email: user.email,
};
};
ステップ4:修正をテストして本番適用
修正が完了したら:
npm test を実行
→ 既存テスト全 pass ✓
git diff で確認
→ 変更が小さく明確 ✓
本番環境にデプロイ
→ 同じエラーが発生しない ✓
エラーに関する ChatGPT の活用パターン
パターン1:複数のエラーが連鎖している
エラーログ:
1. API timeout → 2. Connection refused → 3. Database crashed
ChatGPT に依頼:
「以下の 3 つのエラーが連鎖しています。
根本原因を分析してください。」
ChatGPT:
「根本原因:DB のメモリ不足
→ クエリが遅延
→ 接続池が満杯
→ API が timeout」
修正方針が一本筋で通る
パターン2:本番環境でのみ発生するエラー
エラーログ:
「NaN が計算結果に含まれている」
「ローカル環境では再現しない」
ChatGPT に依頼:
「以下の条件の差を考えて、原因を推測してください:
- ローカル:小規模データ、タイムゾーン JST
- 本番:大規模データ、タイムゾーン UTC
原因推測と修正方針を教えてください。」
ChatGPT:
「原因:大規模データ処理時の浮動小数点演算
タイムゾーン差は関係ない
修正:parseInt ではなく Math.floor() を使う」
パターン3:仕様不明確なエラー
エラー:「Validation error: data is invalid」
ChatGPT に依頼:
「この validation エラーの原因を分析してください。
要件:
- ユーザーが送信するデータは任意形式
- バリデーション厳しすぎ?甘すぎ?
実装コードと仕様を確認して、
修正方針を提案してください。」
ChatGPT:
「バリデーション基準が不明確
修正方針:
1. 仕様を明確化(何を許可・拒否するのか)
2. テストケースを追加
3. エラーメッセージを詳細化」
ChatGPT でのエラー分析の注意点
❌ 落とし穴1:エラーログが不完全
「エラーが出ます」
→ どんなエラー?→ スタックトレース不明確
→ ChatGPT も分析できない
対策:フルのエラーログとスタックトレースを提供
❌ 落とし穴2:関連コードを見ていない
ChatGPT:「このコード、user が undefined の可能性」
実際:user は常に定義済み(別の関数で保証)
対策:関連するコード、特に user の初期化部分も提示
❌ 落とし穴3:ChatGPT の提案を鵜呑み
ChatGPT:「DB から再取得すればいい」
実装者:その通りにする
実際:本来は 404 を返すべき仕様
対策:修正方針を複数提示させ、人間が最適なものを選ぶ
まとめ
エラー対応の効率化フロー:
本番エラー発生
↓
【ChatGPT】エラーログを分析
- 原因の特定
- 修正方針を複数提案
↓
【人間】修正方針を判定
- ビジネス影響を考慮
- 最適な方針を選択
↓
【Claude Code】修正を実装
- 明確な指示で確実に実装
↓
テスト & デプロイ
ChatGPT と Claude Code の役割分担:
ChatGPT:
- エラー原因の分析
- 修正方針の提案
- 代替案の検討
Claude Code:
- 明確な指示による実装
- テスト含めた修正
人間:
- 修正方針の最終判定
- 本番デプロイの決定
- ビジネス要件の確認
Claude Codeで変更計画だけ出させることで、エラー修正もより安全で追跡可能になります。