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-prtruePRへの指摘コメント投稿
upload-resultstrue結果をArtifactsとして保存
claude-modelclaude-opus-4-1-20250805使用モデルの指定
claudecode-timeout20分解析タイムアウト
exclude-directoriesなし解析対象から除外するディレクトリ
run-every-commitfalseキャッシュ結果ではなく全コミットを解析するか
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 ReviewSemgrepCodeQL
検出方式意味論的理解(文脈込み)パターン/ルールベースデータフロー解析
誤検知率ルールベースより低め(文脈判断が効く)ルール精度に依存精度は高いがルール構築コストが高い
セットアップの手軽さワークフロー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従量課金なので段階導入が現実的