ai
B
信頼度ランク
| S | 公式ソース確認済み |
| A | 成功実績多数・失敗例少数 |
| B | 賛否両論 |
| C | 動作未確認・セキュリティリスク高 |
| Z | 個人所感 |
AIを使ったコードレビュー自動化の実践
GitHub ActionsとAI(Claude Opus 4.6・GPT-5.4)を組み合わせてPRのコードレビューを自動化する方法を解説。セキュリティチェック・バグ検出・スタイル一貫性の維持をAIに任せます。
一言結論
AIコードレビューは人間レビューの補完として有効だが、誤検知やセキュリティリスクを考慮しAIの出力をそのままマージせず人間が最終判断する運用設計が不可欠だ。
なぜ AI コードレビューを自動化するのか
人間によるレビューの限界:
- レビュアーの時間が足りない
- 疲れているときはバグを見逃す
- スタイル指摘に時間を取られる
AI レビューの強み:
- 24時間即時対応
- 一貫した基準
- バグパターン・セキュリティ問題の検出
- ボイラープレートな指摘を自動化
アーキテクチャ
PR 作成
↓
GitHub Actions トリガー
↓
差分(git diff)を取得
↓
AI(Claude Opus 4.6 / GPT-5.4)に送信
↓
レビューコメントを PR に投稿
GitHub Actions の実装
# .github/workflows/ai-review.yml
name: AI Code Review
on:
pull_request:
types: [opened, synchronize]
jobs:
review:
runs-on: ubuntu-latest
permissions:
pull-requests: write # コメント投稿に必要
steps:
- uses: actions/checkout@v6
with:
fetch-depth: 0 # 差分取得のため全履歴が必要
- name: Get diff
id: diff
run: |
DIFF=$(git diff origin/${{ github.base_ref }}..HEAD -- '*.ts' '*.tsx' '*.js' '*.py' | head -c 10000)
echo "diff<<EOF" >> $GITHUB_OUTPUT
echo "$DIFF" >> $GITHUB_OUTPUT
echo "EOF" >> $GITHUB_OUTPUT
- name: AI Review
env:
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
PR_NUMBER: ${{ github.event.pull_request.number }}
REPO: ${{ github.repository }}
DIFF: ${{ steps.diff.outputs.diff }}
run: node .github/scripts/ai-review.mjs
// .github/scripts/ai-review.mjs
import Anthropic from "@anthropic-ai/sdk";
const client = new Anthropic();
const diff = process.env.DIFF;
const prNumber = process.env.PR_NUMBER;
const [owner, repo] = process.env.REPO.split("/");
const response = await client.messages.create({
model: "claude-opus-4-6",
max_tokens: 2000,
messages: [{
role: "user",
content: `以下のコード差分をレビューしてください。
レビューの観点:
1. バグ・論理エラー(重要度: 高)
2. セキュリティの問題(重要度: 高)
3. パフォーマンスの問題(重要度: 中)
4. コードの可読性・保守性(重要度: 低)
形式:
- 問題がない場合は「✅ レビュー完了:特に問題なし」と返す
- 問題がある場合は Markdown リストで列挙(深刻度と理由を含める)
- スタイルの好みの違いには言及しない
\`\`\`diff
${diff}
\`\`\``
}]
});
const review = response.content[0].text;
// GitHub PR にコメント投稿
const ghResponse = await fetch(
`https://api.github.com/repos/${owner}/${repo}/issues/${prNumber}/comments`,
{
method: "POST",
headers: {
Authorization: `Bearer ${process.env.GITHUB_TOKEN}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
body: `## 🤖 AI コードレビュー\n\n${review}`,
}),
}
);
セキュリティ特化のレビュー
const securityPrompt = `
以下のコード差分でセキュリティ問題を検出してください。
チェック項目:
- SQLインジェクション
- XSS(Cross-Site Scripting)
- 認証・認可の欠陥
- センシティブな情報のハードコード(APIキー・パスワード)
- 依存関係の危険な使い方
- 入力値のバリデーション不足
問題なければ「✅ セキュリティ上の問題なし」とだけ返す。
`;
実用的なTips
コストコントロール
# 大きすぎる PR はスキップ(コスト対策)
- name: Check diff size
run: |
SIZE=$(echo "$DIFF" | wc -c)
if [ $SIZE -gt 50000 ]; then
echo "PR が大きすぎるためAIレビューをスキップします(${SIZE} chars)"
exit 0
fi
レビュー対象ファイルの絞り込み
# テストファイルとドキュメントを除外
git diff origin/$BASE..HEAD -- '*.ts' '*.py' ':!*.test.ts' ':!*.spec.ts' ':!docs/'
既存ツールとの組み合わせ
steps:
- name: ESLint(機械的チェック)
run: npx eslint . --format json > eslint-results.json || true
- name: AI Review(高レベルの判断)
# ESLint の結果も含めてAIに送る
注意点
- AI は確定的なレビューをしない。誤検知・見逃しは発生する
- 最終判断は人間のレビュアーが行う
- センシティブなコードを外部APIに送ることへの社内ポリシーを確認する
- API コストはDiff サイズとモデルに依存(目安: 10KB の diff で Sonnet 4.6 使用時 $0.01〜0.05、Opus 4.6 使用時 $0.03〜0.08)
まとめ
AI コードレビューは人間レビューの補助ツールとして有効です。単純なバグパターンやセキュリティ問題を事前に検出することで、人間のレビュアーはより本質的な設計・ロジックの議論に集中できます。完全自動化を目指すのではなく、「人間のレビューをより効率的にするための前段階」として活用するのが現実的です。