プルリクエストをAIで多角的にレビューし、セキュリティ問題の検出やコード品質の向上を支援するワークフローです。
このワークフローは、PR作成時や更新時に自動的に実行され、複数のAIエンジニアがそれぞれの専門分野から以下をレビューします:
各リポジトリで以下のシークレットを設定してください:
ANTHROPIC_API_KEY
- Claude AI API用(Claude 3.5 Sonnet, Claude Opus 4等)(取得方法)OPENAI_API_KEY
- OpenAI API用(GPT-4, GPT-4o等)(取得方法)GEMINI_API_KEY
- Google Gemini API用(オプション)(取得方法)GH_PAT
- より詳細なPR情報取得用(なくても動作します)リポジトリの .github/workflows/
ディレクトリに以下のファイルを作成:
name: PR Auto Review
on:
pull_request:
types: [opened, synchronize]
workflow_dispatch:
inputs:
pr_number:
description: 'PR番号(手動実行時)'
required: true
type: number
review_type:
description: 'レビューの深さ'
required: false
default: 'balanced'
type: choice
options:
- quick
- balanced
- detailed
permissions:
contents: read
pull-requests: write
jobs:
trigger-review:
runs-on: ubuntu-latest
outputs:
number: $
type: $
steps:
- name: Determine PR number and settings
id: pr
run: |
if [[ "$" == "workflow_dispatch" ]]; then
echo "number=$" >> $GITHUB_OUTPUT
echo "type=$" >> $GITHUB_OUTPUT
else
echo "number=$" >> $GITHUB_OUTPUT
# PRサイズに基づいてレビュータイプを決定
PR_SIZE=$
if [[ $PR_SIZE -gt 500 ]] || [[ "$" == "true" ]]; then
echo "type=detailed" >> $GITHUB_OUTPUT
else
echo "type=balanced" >> $GITHUB_OUTPUT
fi
fi
- name: Post start message
uses: actions/github-script@v7
with:
script: |
const pr_number = $;
const type = '$';
await github.rest.issues.createComment({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: pr_number,
body: `🤖 AI Code Review を開始します...\n- Type: ${type}\n- Repository: ${context.repo.repo}`
});
review:
needs: trigger-review
if: always()
uses: NFTTechnology/NFTT-GitHub-Workflows/.github/workflows/reusable-pr-review.yml@main
with:
pr_number: $
repository: $
review_type: $
max_diff_lines: 10000
enable_code_suggestions: true
secrets: inherit
Actions タブから手動でワークフローを実行し、PR番号とレビュータイプを指定
以下のセキュリティ問題を自動検出:
# 🤖 AI Multi-Role Code Review v2.2
**PR:** #123 新機能の追加
**Review Type:** Balanced (4 roles)
**Security Issues Detected:** 2
**Timestamp:** 2024-11-26 10:30 UTC
## 判定
⚠️ 条件付き承認
## 必須対応 (ブロッカー)
1. SQLインジェクションの脆弱性を修正
2. APIキーがハードコードされている
## 推奨対応
1. エラーハンドリングの改善
2. テストカバレッジの向上
---
### 💰 Token Usage & Cost
| Model | Input Tokens | Output Tokens | Cost (USD) |
|-------|-------------|---------------|------------|
| claude-3-5-sonnet | 5,234 | 1,256 | $0.0245 |
| gpt-4o-mini | 3,421 | 892 | $0.0012 |
| **Total** | **8,655** | **2,148** | **$0.0257** |
特定のファイルパターンのみレビュー:
with:
pr_number: $
repository: $
review_type: 'balanced'
max_diff_lines: 5000 # 差分の最大行数
enable_code_suggestions: false # コード提案を無効化
使用するAIモデルをカスタマイズ:
with:
models: '{"claude": "claude-3-opus-20240229", "openai": "gpt-4-turbo"}'
レビュー結果に基づいて以下のラベルが自動付与されます:
ai-reviewed
- レビュー完了security-review-needed
- セキュリティ問題検出ready-to-merge
- 承認可能needs-work
- 要修正→ pull-requests: write
権限があることを確認
→ 最新のv2.2を使用していることを確認
→ ソースコードファイルが含まれているか確認
with:
models: '{
"claude": "claude-3-5-sonnet-20241022", # 最新版
"openai": "gpt-4o-mini" # コスト最適化
}'
AI | モデル | 特徴 | コスト |
---|---|---|---|
Claude | claude-3-5-sonnet-20241022 | 最高精度 | $3/1M入力 |
Claude | claude-3-5-haiku-20241022 | 高速・安価 | $0.25/1M入力 |
OpenAI | gpt-4o | 最新GPT-4 | $2.50/1M入力 |
OpenAI | gpt-4o-mini | コスト効率 | $0.15/1M入力 |
# 差分の制限
with:
max_diff_lines: 5000 # デフォルト10000
# 特定のファイルのみレビュー
if: |
contains(github.event.pull_request.files.*.filename, '.js') ||
contains(github.event.pull_request.files.*.filename, '.ts')
# 同一PRの再レビューを防ぐ
- uses: actions/cache@v4
with:
path: .pr-review-cache
key: pr-review-$
v2.2以降では、レビュー結果にトークン使用量とコストが表示されます:
### 💰 Token Usage & Cost
| Model | Input Tokens | Output Tokens | Cost (USD) |
|-------|-------------|---------------|------------|
| claude-3-5-sonnet | 5,234 | 1,256 | $0.0245 |
| gpt-4o-mini | 3,421 | 892 | $0.0012 |
| **Total** | **8,655** | **2,148** | **$0.0257** |
レビュータイプ | PRあたりのコスト | 適用場面 |
---|---|---|
quick | $0.01-0.02 | 小さな変更 |
balanced | $0.02-0.05 | 通常のPR |
detailed | $0.05-0.10 | 大きな変更、セキュリティ |