ストーリー
中島先輩が鋭い目で聞いた。
なぜAI生成コードのレビューが重要か
AI生成コードの特徴
| 特徴 | リスク |
|---|---|
| 見た目がきれい | 品質が高いと錯覚しやすい |
| それっぽく動く | テスト不足でバグが潜むことがある |
| パターンに従っている | そのパターンが最適とは限らない |
| 自信満々 | ハルシネーションで間違いを含むことがある |
レビューチェックリスト
1. 正確性のチェック
□ 使用しているAPIやメソッドが実際に存在するか
□ 引数の型と順序が正しいか
□ 戻り値の型が正しいか
□ ライブラリのバージョンに対応しているか
実例:
// AIが生成した可能性のあるコード
import { readFileAsync } from 'fs'; // ← 存在しないメソッド!
// 正しくは
import { readFile } from 'fs/promises';
2. セキュリティのチェック
□ ユーザー入力がサニタイズされているか
□ SQLインジェクション対策がされているか
□ XSS対策がされているか
□ 認証・認可チェックが適切か
□ 機密情報がハードコードされていないか
□ 適切なエラーメッセージか(内部情報を露出していないか)
3. ロジックのチェック
□ エッジケースが考慮されているか
- 空配列、null、undefined
- 0、負数、非常に大きな数
- 空文字列、特殊文字
□ エラーハンドリングが適切か
□ 非同期処理が正しいか(await漏れ等)
□ ループの終了条件が正しいか
4. パフォーマンスのチェック
□ N+1問題がないか
□ 不必要なループや計算がないか
□ メモリリークの原因がないか
□ 適切なデータ構造を使っているか
5. 保守性のチェック
□ 命名が適切か
□ 関数が長すぎないか(30行以内推奨)
□ マジックナンバーがないか
□ 適切にモジュール分割されているか
□ プロジェクトの規約に合っているか
AI生成コードでよく見つかる問題
問題1: 存在しないAPIの使用
// AIが生成しがちな間違い
const data = await response.json<User>(); // TypeScriptの型引数は受け付けない
// 正しい書き方
const data: User = await response.json();
問題2: 不完全なエラーハンドリング
// AIが生成しがちなコード
const fetchUser = async (id: string) => {
const response = await fetch(`/api/users/${id}`);
return response.json(); // エラーチェックなし!
};
// 改善版
const fetchUser = async (id: string): Promise<User> => {
const response = await fetch(`/api/users/${id}`);
if (!response.ok) {
throw new ApiError(response.status, 'ユーザーの取得に失敗しました');
}
return response.json();
};
問題3: 古いパターンの使用
// AIが古いパターンを提案することがある
class UserService {
constructor() { ... } // クラスベース
// 現在のプロジェクトでは関数ベースが標準かもしれない
}
// プロジェクトの規約に合わせて修正
const createUserService = (deps: Dependencies) => ({
findById: async (id: string) => { ... },
create: async (input: CreateUserInput) => { ... },
});
レビューの実践テクニック
AIにAI生成コードをレビューさせる
プロンプト:
あなたはセキュリティに詳しいシニアTypeScriptエンジニアです。
以下のコードはAIが生成したものです。
AIが生成したコードに特有の以下の問題がないかチェックしてください:
1. 存在しないAPIやメソッドの使用
2. 不完全なエラーハンドリング
3. セキュリティの脆弱性
4. 非効率なパターン
5. プロジェクトの規約(TypeScript strict, 関数型アプローチ)への違反
[コードを貼り付け]
別のAIでクロスチェック
ChatGPTで生成 → Claudeでレビュー
Copilotで生成 → ChatGPTでレビュー
異なるAI間でのクロスチェックにより、単一AIの盲点を補完できる
まとめ
| ポイント | 内容 |
|---|---|
| なぜ重要か | AI生成コードは見た目がきれいだが問題を含むことがある |
| 正確性 | API/メソッドの存在確認、型の正しさ |
| セキュリティ | 入力サニタイズ、インジェクション対策 |
| ロジック | エッジケース、エラーハンドリング、非同期処理 |
| クロスチェック | 別のAIでレビューさせる手法も有効 |
チェックリスト
- AI生成コードのレビュー観点を5つ以上挙げられる
- よくある問題パターンを理解した
- レビューチェックリストを実践に活用できる
- 別のAIでクロスチェックする手法を理解した
次のステップへ
AI生成コードのレビュー方法がわかったら、次はAIツールの組み合わせ戦略を学びます。
推定読了時間: 30分