セキュリティ

Claude Codeのsecurity-guidanceプラグインとは?3層レビューの仕組み・導入・カスタムルール【v2.0.11】

Claude Codeのsecurity-guidanceプラグインとは?3層レビューの仕組み・導入・カスタムルール【v2.0.11】

security-guidanceは、Claude Codeが書いたコードの脆弱性をその場で見つけて直させる、Anthropic公式のプラグインです。2026年5月26日に3層構成へ作り直され、全プランで使えるようになりました。この記事では、2026年10月7日公開のv2.0.11のソースと公式ドキュメントを突き合わせ、各層が何を見て何を見ないのか、導入とカスタムルールの書き方、使用量とデータ送信の範囲を整理します。

まとめ:security-guidanceプラグインの要点

  • レビューは3段階:ファイル編集時の文字列照合(モデル呼び出しなし)、ターン終了時の差分レビュー、Claudeが実行したgit commit・git push時のエージェント型レビュー。
  • どの層も書き込みやコミットを止めない。指摘はClaudeへの追加指示として返り、Claudeが同じセッションで直す。
  • 編集時の組み込みルールは25本。ハードコードされた秘密情報とSQLインジェクションは正規表現の対象外で、モデルレビュー側が受け持つ。
  • 導入は/plugin install security-guidance@claude-plugins-official。プラグイン自体に料金はないが、モデルレビューは通常の使用量に計上される。
  • 独自ルールはclaude-security-guidance.md(モデルレビュー用)とsecurity-patterns.json(編集時の照合用)で追加でき、組み込みルールは個別に消せない。

既存コードの監査ツールを探しているなら次章の分担表を、導入だけしたいなら「導入手順と前提条件」の章を先に読んでください。

security-guidanceの位置づけと提供状況

2026年5月26日の3層化と全プランでの提供

Claude Codeの開発者向けアカウントClaudeDevsは2026年5月26日(UTC)の投稿で公開を告知し、「Available for all Claude Code users」と書いています。公式ドキュメントにも「The plugin is available on all plans.」とあります。同じ週にロンドンでCode w/ Claudeが開かれており、SecurityWeekの5月27日の記事は、Anthropicの発言として「社内展開とベンチマークで、プラグインを使って作られたPRのセキュリティ関連コメントが30〜40%減った」と伝えています。Anthropic自身による社内の数値で、発言の中で測定条件は示されていません。

公式マーケットプレイスのリポジトリには、2025年11月20日の初回コミットから同名のプラグインが含まれていましたが、当時は編集の直前(PreToolUse)に警告文を出すだけの単一フックでした。5月26日の更新で3層構成になり、以後もWindows対応やGraphite(gt)コマンドの検知などの修正が続いています。

Claude Security・/security-review・Code Reviewとの分担

公式ドキュメントは、このプラグインを多層防御の一番手前に置いています。対象は「Claudeがいま書いている変更」で、既存コードの棚卸しは別のツールの役割です。

段階 ツール 対象
セッション中 security-guidance Claudeが書いた変更
依頼時・1回 /security-review 現在のブランチの変更
依頼時・深い走査 Claude Securityプラグイン リポジトリ全体または差分
PR作成時 Code Review(Team・Enterprise) PR全体
CI 既存のSAST・依存関係スキャナー 言語別ルール・サプライチェーン

既存リポジトリの脆弱性を洗い出したいならsecurity-guidanceでは足りません。複数エージェントで走査するClaude Securityや、PR単位で動くClaude CodeのCode Reviewと組み合わせてください。

編集時・ターン終了時・コミット時の3つのレビュー層

プラグインはすべてClaude Codeのフックで作られています。v2.0.11のhooks.jsonと公式ドキュメントから、各層の発火条件と上限をまとめます。

層 フック モデル 上限
編集時 PostToolUse(Edit・Write・MultiEdit・NotebookEdit) なし 同じファイル・同じルールはセッション中1回
ターン終了時 Stop・SubagentStop(バックグラウンド) あり 30ファイル/連続3回まで
コミット・プッシュ時 PostToolUse(Bashのgit commit・git push・gt) あり(エージェント型) 直近1時間で20回

ほかにSessionStartで実行環境を準備し、UserPromptSubmitでターン開始時の作業ツリーを記録します。

編集時のパターン照合

ClaudeがEditやWriteでファイルを書いた直後に、新しい内容を組み込みルールと照合します。モデルを呼ばないので使用量は増えません。一致すると警告文がClaudeの次の文脈に追加され、Claudeが自分で直すか、安全な理由をコメントに書きます。

ターン終了時の差分レビュー

Claudeが返答を終えるたびに、そのターンで変わった作業ツリーのgit差分を、別コンテキストのClaudeにセキュリティ観点だけでレビューさせます。Bashコマンドやサブエージェントによる変更も差分に入ります。認可の抜け、IDOR(他人のIDでデータを参照できる欠陥)、SSRF、弱い暗号など、文字列照合では拾えない問題が対象です。バックグラウンドで走るため返答は遅れません。

コミット・プッシュ時のエージェント型レビュー

ClaudeがBashツールでgit commitやgit pushを実行すると、呼び出し元やサニタイザーなど周辺のファイルを読み込む、より深いレビューが走ります。ファイルをまたぐ認可バイパスやSSRFを拾うための層です。ターン終了時のレビューと同じ指摘しか出なければ、Claudeには再通知しません。

自分のシェルで打ったコミットは対象外です。セッション内の!によるシェル実行も含みます。

書き込みもコミットも止めない設計

公式ドキュメントは「None of the layers block writes or commits.」と明記しています。指摘はClaudeへの指示として届くだけで、レビューモデルが見落とすこともあります。特定のファイルへの書き込みを確実に禁止したいなら、ブロックするフックか権限ルールが必要です。設定方法はClaude Codeのセキュリティ設定(権限ルール・サンドボックス・管理設定)で解説しています。

編集時チェックの25ルールと対象外の脆弱性

v2.0.11のpatterns.pyに定義された組み込みルールは25本です。分類すると次のとおりです。

分類 本数 主な対象
安全でない逆シリアル化 8 pickle・marshal・shelve・yaml.load・torch.load
DOM注入(XSS) 5 innerHTML・outerHTML・document.write など
コード・コマンド実行 6 eval・new Function・child_process・os.system・shell=True・Goのsh -c
暗号・通信 3 IVなしcreateCipher・AES-ECB・TLS検証の無効化
その他 3 XMLの安全でない解析・SRIなしscriptタグ・GitHub Actionsワークフロー

GitHub Actionsのルールは、.github/workflows/配下のYAMLを編集したこと自体で発火し、イシュー名などをrun:へ直接埋め込むインジェクションを警告します。

言語による絞り込みとドキュメントの除外

多くのルールは拡張子で対象を絞っています。XSS系とnew Functionは.jsや.tsxなどJavaScript系のファイルだけ、pickleとos.systemは.py系だけが対象です。evalは.mdや.json、.yamlなどのドキュメント類を除外します。解説記事のMarkdownにinnerHTMLと書いても警告は出ません。

秘密情報とSQLインジェクションは正規表現の対象外

READMEは編集時チェックの例に「hardcoded secrets」を挙げていますが、25本の組み込みルールにAPIキーやパスワードの照合はなく、SQLインジェクションのルールもありません。これらはターン終了時のモデルレビューが受け持ちます。モデル呼び出しなしで必ず警告を出したい鍵の接頭辞があるなら、後述のsecurity-patterns.jsonに足せます。ただし警告が出るだけで、書き込みは止まりません。

torch.loadの警告文とPyTorch 2.6以降の既定値

torch_unsafe_loadは、同じ行にweights_only=Trueがないtorch.load(で発火し、警告文は「weights_only=Falseが既定」と説明します。PyTorchは2.6で既定をTrueに変えたため、2.6以降ではこの説明が実際の既定と合いません。ただしpickle_moduleを渡した場合と、環境変数TORCH_FORCE_NO_WEIGHTS_ONLY_LOADを設定した場合は、引数なしでもFalseで読み込まれます。またweights_only=Trueでも、2.5.1以前には任意コード実行の脆弱性(CVE-2025-32434、2.6.0で修正)がありました。信頼できないファイルを読むなら、PyTorchを2.6以上に上げたうえでweights_only=Trueを明示してください。警告も出なくなります。

編集時フックをローカルで動かした結果

v2.0.11のsecurity_reminder_hook.pyに、Claude CodeがPostToolUseで渡すのと同じ形のJSONを与えて単体実行しました(2026年10月9日・macOS・Python 3.9。状態ファイルのない新しいHOMEで1セッションとして実行し、モデルレビューはENABLE_CODE_SECURITY_REVIEW=0で停止)。app.jsにel.innerHTML = userInput;を書いたときの出力は次のとおりです。

{"metrics": {"pattern_hits": 1, "rule_id": 7, ...},
 "hookSpecificOutput": {"hookEventName": "PostToolUse",
  "additionalContext": "[from security-guidance@claude-code-plugins plugin]\n\n⚠️ Security Warning: Setting innerHTML with untrusted content can lead to XSS vulnerabilities. Use textContent for plain text or safe DOM methods for HTML content. ..."}}

終了コードは0で、書き込みは止まりません。警告はadditionalContextとしてClaudeの文脈に差し込まれるだけです。同じ条件で確かめた挙動は次のとおりです。

  • notes.mdに同じ1行を書くと出力なし(拡張子による除外)
  • 同じapp.jsに2回目のinnerHTMLを書くとpattern_hits: 0で警告なし(ファイル・ルールごとにセッション中1回)
  • 別ファイルapp2.jsでは再び警告
  • torch.load(path)は警告、torch.load(path, weights_only=True)は出力なし

Claudeが警告を無視して書き進めると、同じファイルでの2回目以降は編集時の層では拾えません。受け皿はターン終了時のレビューです。

導入手順と前提条件

Claude Code 2.1.144以降・Python・gitリポジトリ

READMEはClaude Code CLI 2.1.144以上を求めています。Pythonの要件は文書によって食い違い、公式ドキュメントは3.7以上(エージェント型コミットレビューと、BedrockなどサードパーティプロバイダーでのモデルレビューはPython 3.10以上)、READMEは3.8以上と書いています。起動スクリプトはpython3.13からpython3.10を優先して探すので、3.10以上を入れておけば3層すべてが動きます。

モデルレビューはgitの差分を使うため、gitリポジトリの外ではスキップされます。

/plugin installでの導入

ターミナルのClaude Codeで次を実行し、スコープを聞かれたらユーザースコープを選ぶと、このマシンで始めるすべてのローカルセッションで有効になります。

/plugin install security-guidance@claude-plugins-official

インストール後にRun /reload-plugins to apply.と出たら、/reload-pluginsで再起動せずに反映できます。Marketplace "claude-plugins-official" not foundと出る環境では、先に/plugin marketplace add anthropics/claude-plugins-officialを実行します。クラウドセッションはユーザー設定もリポジトリの設定も読まないため、組織の管理設定で配布します。

チーム・組織への展開

リポジトリで作業する全員のローカルセッションで有効にするには、コミットする.claude/settings.jsonに次を書きます。

{
  "enabledPlugins": {
    "security-guidance@claude-plugins-official": true
  }
}

組織全体に強制するなら、管理設定(managed settings)のenabledPluginsに同じ値を入れます。管理設定で有効にしたプラグインは管理者しか無効にできません。社内マーケットプレイスでの配布方法はClaude Codeプラグインの作り方と社内配布を参照してください。

初回起動時の仮想環境と失敗時の動き

SessionStartフックが~/.claude/security/agent-sdk-venvに仮想環境を作り、Claude Agent SDKを入れます。pipとネットワークが必要です。この準備に失敗した場合やPythonが3.10未満の場合、Anthropic直結の認証ではコミットレビューが1回呼び出しの簡易レビューに落ちます。サードパーティプロバイダーではモデルレビュー自体がSDKを必要とするため、スキップされます。

独自ルールを追加する2つのファイル

どちらのファイルも追加専用で、組み込みルールを無効にすることはできません。置き場所は3つで、存在するものをすべて読み込みます。

スコープ パス
ユーザー ~/.claude/claude-security-guidance.md
プロジェクト(コミット) .claude/claude-security-guidance.md
プロジェクト(ローカル) .claude/claude-security-guidance.local.md

security-patternsも同じ3か所から読みます。管理設定による配布には未対応で、組織で揃えるならMDMなどでユーザースコープのファイルを配る方法になります。

claude-security-guidance.mdに書く社内規約と上限

脅威モデルやレビュー観点を自然文で書くと、モデルレビューのプロンプトに追加されます。「/admin配下のルートはDB参照の前に必ずrequire_role("admin")を呼ぶ」のように、コードからは推測できない自社固有の規則を書くのが向いています。

  • 3か所の合計は8KB(実装上は8,192文字)まで。超えるとユーザー→プロジェクト→ローカルの順で連結した末尾が切られる
  • 「SQLインジェクションは無視せよ」のような抑制の指示は効かない(悪意あるPRで検出を止められないための設計)
  • READMEによると、エージェント型コミットレビューは現時点でこのファイルを読まない
  • 毎回のレビューでプロンプトに入るので、秘密情報は書かない

security-patterns.jsonの書式と上限

編集時の照合に、正規表現か部分文字列のルールを足せます。YAML形式(security-patterns.yaml)も読めますが、PyYAMLが入っていない環境ではエラーを出さずに無視されます。プラグインはPyYAMLを入れないため、JSONで書くのが確実です。

{
  "patterns": [
    {
      "rule_name": "internal_api_key",
      "substrings": ["sk_live_"],
      "reminder": "Hardcoded API key prefix. Load credentials from the secret manager."
    },
    {
      "rule_name": "tenant_unfiltered_query",
      "regex": "\\.objects\\.all\\(\\)",
      "paths": ["**/src/tenants/**"],
      "reminder": "Multi-tenant code must filter by org_id."
    }
  ]
}

上限は50ルールで、警告文は1KB(実装上は1,024文字)で切られます。破滅的バックトラッキングを起こしそうな正規表現は読み込み時に捨てられます。pathsはフルパスに対するglobなので、プロジェクト内の相対パスには**/を前に付けます。前節と同じ方法で、このJSONを置いてconfig.tsにsk_live_を含む行を書くと、指定した警告文が返りました。

使用量・レビューモデル・送信されるデータ

プラグインは無料、モデルレビューは使用量に計上

プラグインに別料金はありませんが、ターン終了時とコミット時のレビューは通常のClaudeリクエストと同じく使用量に数えられます。目安は、ファイルを変えたターンごとにレビュー1回、コミットごとに深いレビュー1回です。コミットレビューはエージェント型なので、1回のコミットで複数ターンかかることがあります。サブスクリプションの上限に余裕がない場合は、まずENABLE_COMMIT_REVIEW=0で深いレビューだけを止めると消費を抑えられます。

既定モデルは最新のOpusに自動追従

v2.0.9以降、ターン終了時のレビューはAPIのGET /v1/modelsから提供中の最新Opusを選び、結果を1日キャッシュします。取得できなければclaude-opus-5-5を使います。コミットレビューと、Bedrock・Vertex・Foundry経由のレビューは、Claude Codeのopusエイリアスで動きます。公式ドキュメントは10月9日時点でも「Claude Opus 4.7」と書いており、実装より古い記述です。

環境変数 効果
SECURITY_REVIEW_MODEL ターン終了時レビューのモデルを固定
SG_AGENTIC_MODEL コミットレビューのモデルを固定
SG_DUAL_OR=on レビューを2本並列にして指摘を合算(費用は約2倍)

READMEは、誤検知が多ければclaude-sonnet-5-5で評価し直し、精度優先なら既定のままにするよう勧めています。

外部へ送られるデータと送信先

ターン終了時のレビューでは、変更されたファイルのパス、差分、差分に関係するファイル内容が送られます。コミットレビューでは、レビュアーがRead・Grep・Globで読み込んだファイルも加わります。既定の送信先はapi.anthropic.com(商用規約が適用)で、ゲートウェイやBedrock・Vertex・Foundryを設定していればそちらへ送られます。ローカルのログ(~/.claude/security/log.txt)にはファイル内容もプロンプトも残りません。

無効化の環境変数とトラブルシューティング

環境変数 止まるもの
ENABLE_PATTERN_RULES=0 編集時の照合
ENABLE_STOP_REVIEW=0 ターン終了時のレビュー
ENABLE_COMMIT_REVIEW=0 コミット・プッシュ時のレビュー
ENABLE_CODE_SECURITY_REVIEW=0 モデルを使うレビュー全部
SECURITY_GUIDANCE_DISABLE=1 プラグイン全体

一時停止は/plugin disable、削除は/plugin uninstallです。プロジェクト設定で有効化されている場合、自分だけのアンインストールは.claude/settings.local.jsonへの上書きになり、チームには影響しません。

レビューが出てこないときは、まず~/.claude/security/log.txtを見ます。何も表示されずにスキップされる主な原因は、gitリポジトリの外で作業している、Anthropicの認証もサードパーティの設定もない、PyYAMLなしでYAMLのルールファイルを置いている、の3つです。

入れても効果が薄い場面と運用上の注意

security-guidanceは「Claudeに書かせたコードをClaude自身に直させる」ための道具です。次の条件では期待どおりに働かないので、導入前に確認してください。

  • 人が手で書いてコミットする比率が高いチーム:自分のシェルでのコミットではコミットレビューが動かず、編集時の照合もClaudeの編集にしか反応しない。人の変更が拾われるのは、Claudeのターン中に作業ツリーが変わり差分レビューに入った場合だけ。どの層もブロックしないのでマージ条件にもできない。
  • 複数のエージェントが同じ作業ツリーを共有する構成:別のエージェントがターンの間にHEADを動かすと差分がずれる。READMEはこの用途でENABLE_STOP_REVIEW=0を挙げている。
  • Python 3.10未満のままサードパーティプロバイダーで使う場合:モデルレビューがSDK不足でスキップされ、残るのは文字列照合だけになる。

逆に、Claudeに大半のコードを書かせていて、差分がAnthropicのAPIか自社契約のクラウドへ送られることを許容でき、ターンごとのレビュー分の使用量を払えるチームなら、入れておく価値があります。編集時の照合は無料で、モデルレビューも環境変数で個別に止められます。

よくある質問

security-guidanceプラグインは無料ですか?

プラグイン自体は全プランで追加料金なしで使えます。ただし、ターン終了時とコミット時のモデルレビューは通常のリクエストと同じく使用量に計上されます。編集時のパターン照合だけはモデルを呼ばないため、使用量は増えません。

Claude Securityとの違いは何ですか?

security-guidanceは、Claudeがセッション中に書いている変更だけを、その場で確認して直させます。Claude Securityは、既存のリポジトリや差分を複数エージェントで深く走査し、独立にレビューした指摘とパッチを出します。既存コードの棚卸しはClaude Securityの役割です。

自分でコミットした変更もレビューされますか?

されません。コミット時のレビューが動くのは、ClaudeがBashツールでgit commitやgit pushを実行したときだけです。自分のシェルやセッション内の!から実行したコミットは対象外です。

特定の警告を止めるにはどうすればよいですか?

その行に安全な理由をコメントで書くと、レビューモデルはそれを除外の根拠として扱います。確実な抑制ではなく、判断はモデルに委ねられます。恒常的な例外はclaude-security-guidance.mdに書きます。組み込みの照合ルールは1本ずつは消せず、ENABLE_PATTERN_RULES=0でまとめて止めるしかありません。

コードはどこに送信されますか?

既定ではapi.anthropic.comに、変更ファイルのパス・差分・関係するファイル内容が送られます。ゲートウェイやBedrock・Vertex・Foundryを設定していれば、そちらが送信先です。

関連記事

お気に入りに入れた記事の一覧

一創の公式 SNS

X では毎朝の新着記事と IT ニュースの速報を、YouTube・TikTok・Instagram・LinkedIn・Facebook では記事の解説動画を配信しています。

この記事は以下の記事からリンクされています

資料請求

今日のトレンド記事 直近 24 時間で、いつもより多く読まれている記事

  1. 2026.11.09 テックブログ エディオン不正アクセス第2報:カード番号の対象確認とログ・決済画面の改ざん対策
  2. 2026.11.09 テックブログ LANSCOPE不正アクセス第2報:製品への影響と偽連絡の確認、停止中のライセンス認証の窓口
  3. 2026.11.10 テックブログ Claude Fable 5.2とは:料金・破壊的変更4点とFable 5.1からの移行手順【2026年11月】
  4. 2026.11.09 テックブログ ステップゴルフ不正アクセス:口座情報の対象確認と偽連絡・引き落としの注意点
  5. 2026.11.10 テックブログ ニトリの情報漏洩:最大3,762万件の対象確認となりすまし連絡の見分け方

RELATED POSTS 関連記事

目次