コードレビューの支援
ストーリー
「プロンプトの基礎はもう十分だ。ここからは実践編に入る」
中島先輩がGitHubのPRページを開いた。レビュー待ちのPRが3件溜まっている。
「コードレビューって、正直時間かかるよな?」
「はい... 1件30分〜1時間くらいかかります」
「AIを使えば、レビューの下書きを5分で作れる。 もちろん最終判断は人間だが、AIに一次レビューをさせるとめちゃくちゃ効率が上がる」
AIによるコードレビューの流れ
基本フロー
[1. PRのコードをAIに入力]
↓
[2. AIがレビューポイントを指摘]
↓
[3. 人間が指摘内容を検証・補足]
↓
[4. レビューコメントとして投稿]
AIが得意なレビュー観点
| 観点 | AIの精度 | 備考 |
|---|---|---|
| バグの可能性(null参照等) | 高 | パターンマッチングが得意 |
| 型安全性の問題 | 高 | TypeScript の型チェック |
| セキュリティの一般的な問題 | 中〜高 | OWASP Top 10 レベル |
| パフォーマンスの問題 | 中 | 明らかなN+1等は検出可能 |
| コーディング規約違反 | 高 | ルールを伝えれば正確 |
| ビジネスロジックの正しさ | 低 | 要件を知らないと判断不可 |
レビュー用プロンプトテンプレート
テンプレート1: 汎用コードレビュー
あなたはシニアソフトウェアエンジニアとしてコードレビューを行います。
以下のコードをレビューしてください。
レビュー観点(優先度順):
1. バグの可能性(null参照、境界値、非同期処理)
2. セキュリティ(入力バリデーション、インジェクション)
3. パフォーマンス(N+1、不要な計算、メモリ使用)
4. 可読性(命名、構造、コメント)
5. テスタビリティ(テストしやすい設計か)
出力形式:
1. 概要(コードの目的と全体評価を2-3行で)
2. 良い点(最低1つ)
3. 指摘事項(以下の表形式)
| 重要度 | 行 | カテゴリ | 指摘内容 | 修正案 |
重要度: CRITICAL / WARNING / INFO
コード:
[ここにコードを貼り付け]
テンプレート2: セキュリティ重視のレビュー
あなたはアプリケーションセキュリティの専門家です。
以下のコードをOWASP Top 10の観点でセキュリティレビューしてください。
チェック項目:
- A01: アクセス制御の不備
- A02: 暗号化の失敗
- A03: インジェクション
- A07: 認証の失敗
各項目について:
- 問題の有無
- 問題がある場合の具体的なリスク
- 修正案(コード付き)
[コードを貼り付け]
実践例:実際のレビュー
レビュー対象コード
typescript
// ユーザープロフィール更新API
app.put('/api/users/:id', async (req, res) => {
const userId = req.params.id;
const { name, email, role } = req.body;
const user = await db.query(
`UPDATE users SET name='${name}', email='${email}', role='${role}'
WHERE id='${userId}' RETURNING *`
);
res.json(user.rows[0]);
});AIのレビュー結果(期待される出力)
概要: ユーザープロフィールを更新するPUTエンドポイント。
複数の深刻なセキュリティ問題があり、即座に修正が必要です。
良い点:
- RETURNING句を使って更新結果を効率的に取得している
指摘事項:
| 重要度 | 行 | カテゴリ | 指摘内容 | 修正案 |
|--------|-----|---------|---------|--------|
| CRITICAL | 7-8 | セキュリティ | SQLインジェクション脆弱性。文字列連結でSQLを構築している | パラメータ化クエリを使用 |
| CRITICAL | 4 | セキュリティ | 認証・認可チェックがない。誰でも任意のユーザーを更新可能 | 認証ミドルウェアの追加 |
| CRITICAL | 4 | セキュリティ | roleフィールドを直接更新可能。権限昇格の危険 | 更新可能フィールドを制限 |
| WARNING | 4 | バリデーション | 入力バリデーションがない | zodなどでバリデーション追加 |
| WARNING | 10 | エラー処理 | try-catchがなくエラー時に500が返る | エラーハンドリング追加 |
AIの修正案を確認・適用する
AIが出力した修正案は、必ず以下の視点で確認してください:
確認ポイント:
1. 修正が元の機能を壊していないか
2. 修正が新しいバグを導入していないか
3. プロジェクトの規約に合っているか
4. テストで動作確認できるか
AIレビューの限界と注意点
AIに任せきりにしてはいけない理由
AIが見落とすこと:
- ビジネスロジックの正しさ(要件を知らない)
- プロジェクト全体のアーキテクチャとの整合性
- チームのコンテキスト(なぜこの設計にしたか)
- 非機能要件(SLA、スケーラビリティ等)
- 人間関係への配慮(レビューコメントの表現)
人間が必ず確認すべきこと:
- AIの指摘が的外れでないか
- ビジネス要件との整合性
- チームの合意事項との整合性
- レビューコメントの表現(丁寧さ)
まとめ
| ポイント | 内容 |
|---|---|
| AIレビューの位置づけ | 一次レビュー(下書き)として活用 |
| 得意な観点 | バグ検出、セキュリティ、コード品質 |
| 苦手な観点 | ビジネスロジック、アーキテクチャ整合性 |
| 最終判断 | 必ず人間が検証して投稿する |
チェックリスト
- AIを使ったコードレビューの流れを理解した
- レビュー用プロンプトテンプレートを使える
- AIレビューの限界を理解し、人間の確認が必要な点を把握した
- 実際にコードをAIにレビューさせて結果を確認した
次のステップへ
コードレビューの次は、ドキュメント作成の自動化です。 README、API仕様書、テクニカルドキュメントの作成をAIで効率化する方法を学びます。
推定読了時間: 30分