LESSON 30分

AIが生成したコードのレビュー

ストーリー

「AIが生成したコード、そのままPRに出したことある?」

中島先輩が鋭い目で聞いた。

「えっと... 急いでる時にやったことが...」

「正直でいいな(笑)。でもそれは危険だ。 AIが生成したコードは、人間が書いたコード以上に慎重にレビューすべきなんだ」

「人間が書いたコード以上に?」

「AIは自信満々に問題のあるコードを生成することがあるからだ。 今日はAI生成コードのレビュー観点を叩き込む」


なぜAI生成コードのレビューが重要か

AI生成コードの特徴

特徴リスク
見た目がきれい品質が高いと錯覚しやすい
それっぽく動くテスト不足でバグが潜むことがある
パターンに従っているそのパターンが最適とは限らない
自信満々ハルシネーションで間違いを含むことがある

レビューチェックリスト

1. 正確性のチェック

□ 使用しているAPIやメソッドが実際に存在するか
□ 引数の型と順序が正しいか
□ 戻り値の型が正しいか
□ ライブラリのバージョンに対応しているか

実例:

typescript
// 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の使用

typescript
// AIが生成しがちな間違い
const data = await response.json<User>(); // TypeScriptの型引数は受け付けない

// 正しい書き方
const data: User = await response.json();

問題2: 不完全なエラーハンドリング

typescript
// 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: 古いパターンの使用

typescript
// 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分