ChatGPTにコード差分をレビューさせるときの注意点
はじめに
Claude Code が実装した変更内容を、ChatGPT にレビューさせると品質が向上します。しかし、ChatGPT のレビューは 全てを信頼できない ため、適切な見せ方と人間の判断が必要です。本記事では、ChatGPT でのコードレビュー方法を解説します。
ChatGPT にコード差分を見せるときの正しい形式
❌ 悪い見せ方:コードを全て貼り付け
「これは大丈夫ですか?
const handleSubmit = async (data) => {
try {
const response = await fetch('/api/users', {
method: 'POST',
body: JSON.stringify(data)
});
const result = await response.json();
setUser(result);
} catch (err) {
console.log(err);
}
};
」
問題点:
- どこが新規で、どこが既存か不明確
- 何が変わったのか判断しにくい
- コンテキストがない
✅ 良い見せ方:git diff 形式で提示
「Claude Code がこのように変更しました。
レビューをお願いします。
--- a/src/api/users.ts
+++ b/src/api/users.ts
- const handleSubmit = async (data) => {
+ const handleSubmit = async (data: UserData): Promise<void> => {
try {
const response = await fetch('/api/users', {
method: 'POST',
+ headers: { 'Content-Type': 'application/json' },
body: JSON.stringify(data)
});
const result = await response.json();
setUser(result);
} catch (err) {
- console.log(err);
+ logger.error('Submit failed', err);
}
};
」
利点:
- 何が追加(+)で何が削除(-)か明確
- 既存コードとの関係が分かりやすい
- ChatGPT が差分を正確に理解
ChatGPT レビューのチェックリスト
ステップ1:コード変更を提示
ChatGPT への依頼:
「以下のコード差分をレビューしてください。
差分内容: エラーハンドリングを改善
--- a/src/services/auth.ts
+++ b/src/services/auth.ts
(git diff をペースト)
以下の観点からレビューしてください:
1. セキュリティリスク
2. パフォーマンス問題
3. エッジケースの漏れ
4. 既存テストへの影響
5. 可読性の問題
」
ステップ2:ChatGPT のレビュー結果を受け取る
ChatGPT の回答例:
【セキュリティ】
- ✓ エラーメッセージが詳細すぎない
- ✓ ユーザー入力のサニタイズあり
- ⚠ password フィールドを error に含めていないか確認
【パフォーマンス】
- ✓ await の位置が正しい
- ⚠ ループ内での非同期呼び出しがないか確認
【エッジケース】
- ✓ null チェックあり
- ⚠ network timeout の処理がない
【テスト影響】
- ✓ 既存テストのシグネチャ変更なし
- 提案:404 エラー時のテストケースを追加
」
ステップ3:ChatGPT のレビュー結果を人間が判断
重要:ChatGPT のレビュー結果は 提案や参考程度 です。最終判断は人間がします。
人間の判断ポイント:
✓ セキュリティ指摘:「password を含めていないか」
→ コードを確認:パスワードは含まれていない → OK
⚠ パフォーマンス指摘:「ループ内での非同期呼び出し」
→ コードを確認:ループなし → 誤検知
⚠ エッジケース指摘:「network timeout」
→ この実装では timeout ハンドリングが確実に必要 → 追加修正
ChatGPT レビューで見落とす傾向
問題1:実装仕様を誤解する
ChatGPT:「この関数は DB に保存していないので、
データが永続化されていません」
実際:メモリキャッシュで OK という設計
対策:ChatGPT に仕様を前もって説明
「このコンポーネントは、
フロントエンドのローカルキャッシュをメモリに保持する仕様です。
その前提で差分をレビューしてください。」
問題2:ビジネスロジックを評価できない
ChatGPT:「なぜこの条件で分岐しているのか不明確」
実際:その条件が重要なビジネスロジック
対策:背景をChatGPTに説明
「このコードは、
ユーザーが有料プランの場合のみ機能を有効にする仕様です。
その背景でレビューしてください。」
問題3:既存テストのカバレッジを把握していない
ChatGPT:「このエッジケースのテストがない」
実際:既存テストで十分にカバーされている
対策:既存テストを参考資料として提示
「既存テストは tests/auth.test.ts です。
参考にして、新しく必要なテストケースを提案してください。」
ChatGPT レビューの使い分け
✅ ChatGPT が得意な指摘
- セキュリティ(入力検証、SQL injection など)
- パフォーマンス(N+1 問題、メモリリークなど)
- コードスタイル(可読性、命名規則など)
- 構文エラーの検出
❌ ChatGPT が苦手な指摘
- ビジネスロジックの正確性
- 既存テストのカバレッジ
- 実装仕様の妥当性
- 過去の変更理由の理解
実際のワークフロー例
【ステップ1】Claude Code が実装
【ステップ2】git diff を ChatGPT に見せる
ChatGPT:
「セキュリティリスク:password が error ログに含まれている可能性」
「テスト提案:失敗系のケースを追加」
【ステップ3】人間が判定
確認:
- password は正しくマスクされている → ChatGPT の誤検知
- テスト追加は確かに必要 → ChatGPT の指摘が的確
【ステップ4】必要な修正を Claude Code に指示
「テストケース 『invalid password』を追加してください」
」
ChatGPT レビューを過信しない
チェックリスト
❌ ChatGPT がOKと言ったから本番OK
→ 最終判断は人間が責任を持つ
✅ ChatGPT の指摘を参考に、人間が精査する
❌ ChatGPT がテストケースを提案したから、それだけで十分
→ 既存テストとの重複確認、必要性の判定は人間
✅ ChatGPT の提案をベースに、人間が追加判定
❌ ChatGPT が「大丈夫」と言ったら、コードレビューは終了
→ ステージング環境での動作確認は必須
✅ ChatGPT レビューの後、実際の動作検証を人間が実施
まとめ
ChatGPT のコードレビューは 便利だが完全ではない ということが重要です。
ChatGPT レビューの使い方:
- 得意分野(セキュリティ、パフォーマンス)は有効活用
- 苦手分野(ビジネスロジック、仕様)は人間が判定
- 結果は参考程度、最終判断は人間が責任を持つ
ワークフロー: Claude Code(実装)→ ChatGPT(初期レビュー)→ 人間(最終判定) → 本番
git diff で小さく確認することで、ChatGPT のレビューも精度が高まります。