Claude Code Security Review 実践ガイド — PRの脆弱性をAIが自動レビューするGitHub Action徹底比較
Claude Code Security Reviewは、PRの差分をClaudeが読み解いて脆弱性を検出し、GitHub上に自動コメントしてくれるAnthropic製のGitHub Actionです。自分もpicoCTFでセキュリティを学び直している最中ですが、チームのCIに組み込んでみたところ「パターンマッチではないSASTツール」としての手応えを感じたので、導入手順から実務での活用パターンまで整理します。
Claude Code Security Reviewとは — 意味論的にコードを読むGitHub Action
anthropics/claude-code-security-review は、PRの差分(diff)だけを対象にClaudeがコードの意図や文脈を理解した上で脆弱性を洗い出す、AI駆動のセキュリティレビューActionです。従来のSASTツールが正規表現やASTパターンで既知の危険な呼び出しを検出するのに対し、このActionは「この入力はどこから来て、どう使われるか」まで踏み込んで判定します。
検出対象は以下のようなカテゴリに及びます。
- インジェクション系(SQL・コマンド・パストラバーサル)
- 認証・認可の不備
- 機密情報の露出
- 暗号処理の弱点
- 入力バリデーション漏れ
- ビジネスロジックの欠陥
- 設定ミス・サプライチェーンリスク
- コード実行・XSS系
言語非依存で動作するため、TypeScript・Python・Go など普段の業務スタックをそのままカバーできる点も実務では嬉しいポイントです。
GitHub Actionsへの導入手順
必要なシークレットと権限
導入にはClaude APIとClaude Codeの両方で有効化されたAPIキーが必要です。リポジトリの Settings > Secrets and variables > Actions に CLAUDE_API_KEY として登録します。ワークフローには pull-requests: write と contents: read の権限、および差分解析のための fetch-depth: 2 を指定したチェックアウトが必要です。
ワークフローファイルの最小構成
# .github/workflows/security.yml
name: Claude Code Security Review
on:
pull_request:
types: [opened, synchronize]
permissions:
pull-requests: write
contents: read
jobs:
security-review:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
ref: ${{ github.event.pull_request.head.sha || github.sha }}
fetch-depth: 2
- uses: anthropics/claude-code-security-review@main
with:
claude-api-key: ${{ secrets.CLAUDE_API_KEY }}
これだけでPRを開くたびに差分がClaudeへ送られ、指摘があればPRのコード行にコメントが付きます。20分程度のタイムアウトの中で完結するので、既存のLintやテストのジョブと並列に走らせても運用負荷は小さめです。
設定オプションで検出精度をチューニングする
主要な入力パラメータは次のとおりです。
| パラメータ | デフォルト | 役割 |
|---|---|---|
claude-api-key | 必須 | API認証 |
comment-pr | true | PRへの指摘コメント投稿 |
upload-results | true | 結果をArtifactsとして保存 |
claude-model | claude-opus-4-1-20250805 | 使用モデルの指定 |
claudecode-timeout | 20分 | 解析タイムアウト |
exclude-directories | なし | 解析対象から除外するディレクトリ |
run-every-commit | false | キャッシュ結果ではなく全コミットを解析するか |
false-positive-filtering-instructions | なし | 誤検知フィルタリングのカスタムルール |
custom-security-scan-instructions | なし | 監査プロンプトのカスタム指示 |
除外ディレクトリとfalse positiveフィルタリング
生成コードやベンダーディレクトリまで解析対象に含めると、レビュー時間もノイズも増えます。実務では次のように絞り込むのが定番です。
- uses: anthropics/claude-code-security-review@main
with:
claude-api-key: ${{ secrets.CLAUDE_API_KEY }}
exclude-directories: "dist,node_modules,tests/fixtures"
false-positive-filtering-instructions: .github/security-review/false-positives.md
デフォルトでもDoSやレート制限、汎用的な入力バリデーション指摘などは自動的にフィルタされますが、自社特有の「安全と分かっている実装パターン」はここで明示しておくと再指摘を防げます。
カスタム監査プロンプトの作成
チームの規約(例: 「認可チェックは必ずミドルウェア層で行う」など)をプロンプトとして渡せば、単なる汎用SASTではなく自社ルールに沿ったレビューになります。
custom-security-scan-instructions: .github/security-review/audit-instructions.md
<!-- .github/security-review/audit-instructions.md -->
- 認可判定はコントローラ層ではなくミドルウェアで行われているか確認する
- 外部APIへのリクエストにタイムアウトが設定されているか確認する
- Snowflake/dbtのモデルに動的SQL文字列結合がないか重点的に確認する
実務での活用パターン — PRコメント運用とローカルslash commandの使い分け
PRコメントの実例
指摘は該当コード行に直接コメントとして付き、深刻度と修正案が添えられます。レビュアーは「なぜ危険か」の説明込みで確認できるため、若手メンバーへのセキュリティ教育としても機能する点は、後輩にIPA試験の解説をしている立場として特に価値を感じました。
ローカル開発でのslash command活用
CIを待たずに手元で確認したい場合は、Claude Codeの /security-review スラッシュコマンドが使えます。.claude/commands/security-review.md をカスタマイズすれば、PR作成前のセルフチェックとしても運用できます。
# ローカルでの実行イメージ
claude
> /security-review
「CIで指摘されてから直す」のではなく「PR作成前に自分で潰す」フローに組み込むと、レビューの往復コストがそのまま減ります。
比較検証: Semgrep・CodeQLとの使い分け
既存のSASTツールと役割が重なる部分もあるため、実際に使ってみた上での棲み分けを整理します。
| 観点 | Claude Code Security Review | Semgrep | CodeQL |
|---|---|---|---|
| 検出方式 | 意味論的理解(文脈込み) | パターン/ルールベース | データフロー解析 |
| 誤検知率 | ルールベースより低め(文脈判断が効く) | ルール精度に依存 | 精度は高いがルール構築コストが高い |
| セットアップの手軽さ | ワークフロー1つで即導入 | ルールセット選定が必要 | クエリ言語の習得が必要 |
| カスタマイズ性 | 自然言語で監査観点を追加できる | YAMLルール自作が必要 | QLクエリの自作が必要 |
| 実行コスト | Claude APIの従量課金 | OSS版は無料 | 公開リポジトリは無料 |
| 得意領域 | ビジネスロジックの欠陥、認可漏れ | 既知の危険パターンの網羅 | 複雑なデータフロー追跡 |
チームでの結論としては「置き換え」ではなく「併用」です。CodeQLやSemgrepで既知パターンを機械的に潰しつつ、Claude Code Security Reviewでビジネスロジックや認可周りの“文脈が絡む”脆弱性を拾う、という二段構えが最もコストパフォーマンスが良いという実感です。
運用上の注意点とコスト
プロンプトインジェクションへの対策
公式ドキュメントでも明記されている通り、このActionはプロンプトインジェクション攻撃に対して十分に堅牢化されていません。信頼できるPRのレビュー用途に限定し、外部コントリビューターのPRに対しては「Require approval for all external contributors」を有効化してからワークフローを実行することが推奨されています。OSSリポジトリを運用している場合は特に注意が必要です。
API利用コストの考え方
Semgrep OSS版やCodeQL(公開リポジトリ)が無料である一方、Claude Code Security ReviewはClaude APIの従量課金が発生します。PR数が多いリポジトリでは run-every-commit: false(デフォルト)のままキャッシュを活用し、必要な差分のみを解析対象にすることでコストを抑えられます。まずは重要度の高いリポジトリから段階的に導入し、費用対効果を見ながら適用範囲を広げるのが現実的です。
まとめ
| 項目 | ポイント |
|---|---|
| 概要 | PR差分をClaudeが意味論的に解析し脆弱性を自動検出するGitHub Action |
| 導入 | CLAUDE_API_KEY を登録し、fetch-depth: 2 でチェックアウトするだけで最小構成が動く |
| チューニング | exclude-directories / false-positive-filtering-instructions / custom-security-scan-instructions で精度を調整 |
| 活用パターン | CIでのPRコメントに加え、/security-review でローカルの事前チェックにも使える |
| 比較検証 | Semgrep・CodeQLとは置き換えではなく併用が最適。文脈依存の欠陥はClaude、既知パターンは静的ルールが得意 |
| 注意点 | プロンプトインジェクション対策として信頼できるPRに限定運用。API従量課金なので段階導入が現実的 |