
目次
- 1 user@sinyblog:~/claude-security ❯ 01_intro.mdsecurity-guidance プラグインとは何か——リリース日と公式アナウンス
- 2 user@sinyblog:~/claude-security ❯ 02_three_layers.md3 層レビュー構造の全体像——どの段階で何を検出するか
- 3 user@sinyblog:~/claude-security ❯ 03_layer_pattern.mdレイヤー 1:ファイル編集ごとのパターンマッチ(モデル呼び出しなし)
- 4 user@sinyblog:~/claude-security ❯ 04_layer_turn.mdレイヤー 2:ターン終了後の差分レビュー(バックグラウンド)
- 5 user@sinyblog:~/claude-security ❯ 05_layer_commit.mdレイヤー 3:コミット/プッシュ時のエージェントレビュー
- 6 user@sinyblog:~/claude-security ❯ 06_install.mdインストール手順——3 コマンドで完了
- 7 user@sinyblog:~/claude-security ❯ 07_cloud_shared.mdクラウドセッションと共有リポジトリで有効化する方法
- 8 user@sinyblog:~/claude-security ❯ 08_guidance_md.md自社ルールを追加する——claude-security-guidance.md
- 9 user@sinyblog:~/claude-security ❯ 09_patterns_yaml.md独自パターンを追加する——security-patterns.yaml
- 10 user@sinyblog:~/claude-security ❯ 10_cost_model.md使用コストとモデル設定——SECURITY_REVIEW_MODEL の使い分け
- 11 user@sinyblog:~/claude-security ❯ 11_disable_layers.md特定レイヤーだけ無効化する——4 つの環境変数
- 12 user@sinyblog:~/claude-security ❯ 12_stack_position.md既存のセキュリティスタックでの位置づけ
- 13 user@sinyblog:~/claude-security ❯ 13_troubleshoot.mdトラブルシューティング——レビューが走らないときの確認手順
- 14 user@sinyblog:~/claude-security ❯ 99_summary.mdまとめ:導入チェックリストと初回ロールアウトの注意点
Claude Code Plugin · 2026-05-27 Release
脆弱なコードが Pull Request まで進む前に止める——。Anthropic が 2026 年 5 月 27 日にリリースした「security-guidance」プラグインは、Claude Code が書いたコードを Claude 自身に再レビューさせ、その場で修正させる仕組みです。エディット時の正規表現マッチ、ターン終了後の差分レビュー、コミット時のエージェントレビューの 3 層構造で、SQL インジェクションや安全でないデシリアライズといった脆弱性を捕捉します。社内ロールアウトで PR に出るセキュリティ指摘が 30〜40% 減少したと報告されています。全プランで無料、/plugin install security-guidance@claude-plugins-official でインストールできます。所要時間は約 12 分。エージェント検索からこのページに辿り着いた方も、最後のチェックリストまで読めば導入は 5 分で完了します。
user@sinyblog:~/claude-security ❯ 01_intro.mdsecurity-guidance プラグインとは何か——リリース日と公式アナウンス
security-guidance は、Anthropic が 2026 年 5 月 27 日にリリースした Claude Code 向け公式プラグインです[1][2]。Claude Code が書いたコードを、別の Claude インスタンスがセキュリティ観点でレビューし、見つかった問題をその同じセッション内で修正させます。Pull Request の手前で脆弱性を潰すことで、人間のレビュアーに回るセキュリティ指摘を減らす——というのが製品コンセプトです。
「Claude 自身に Claude を採点させる」と聞くと違和感があるかもしれませんが、レビュー側は 書き手とは別のセッション・別のコンテキスト・セキュリティ特化のプロンプトで起動されます。元のアプローチに思い入れのないレビュアーが、差分だけを見て「問題点を探す」ことだけを命じられた状態で動きます。これが書き手の自己採点と決定的に違う点です。
Claude Code CLI 2.1.144 以降に対応するプラグイン「security-guidance」を扱います。Code Review(PR 時に走るマルチエージェントレビュー)や /security-review(オンデマンド実行)とは別物です。3 者の関係は ch12 で整理します。
料金は 全プランで無料。インストール後はバックグラウンドで自動的に動き、明示的に呼び出すコマンドはありません。レビュー結果はチャット内に表示され、Claude が同じセッション内で修正に取り掛かります。
user@sinyblog:~/claude-security ❯ 02_three_layers.md3 層レビュー構造の全体像——どの段階で何を検出するか
このプラグインは Claude の作業の 3 つの異なるタイミングで、異なる深さのレビューを走らせます。「いつ走るか」と「何が見つかるか」を最初に把握しておくと、後続の章が読みやすくなります。
| レイヤー | 発火タイミング | レビュー方式 | 主に捕捉する内容 |
|---|---|---|---|
| 1 | ファイル編集ごと | 正規表現/部分一致(モデル呼び出しなし) | eval / innerHTML / pickle / dangerouslySetInnerHTML 等の既知の危険呼び出し |
| 2 | ターン終了後 | バックグラウンドモデルレビュー(差分ベース) | 認可バイパス、IDOR、インジェクション、SSRF、弱い暗号 |
| 3 | Claude による git commit / git push | エージェント型レビュー(周辺コードを読み込む) | 呼び出し元・サニタイザを含めた文脈つきの最終確認 |
表のとおり、上のレイヤーほど高速・低コストで、下に行くほど深い分析になります。レイヤー 1 は無料、レイヤー 2 と 3 はモデル使用料がかかります。3 層あることで「軽い網で漏れたものを重い網で受ける」defense-in-depth が成立する設計です[1]。
3 層のいずれも、書き込みやコミットを強制的に止めることはしません。検出結果は「指示」として書き手の Claude に戻され、Claude がそれを受けて修正します。レビューモデルも見落とすことがあるため、CI 側の静的解析や PR レビューと組み合わせて使う前提の設計です。
user@sinyblog:~/claude-security ❯ 03_layer_pattern.mdレイヤー 1:ファイル編集ごとのパターンマッチ(モデル呼び出しなし)
Claude が Edit、Write、NotebookEdit のいずれかでファイルに書き込んだ瞬間、プラグインはその新しい内容を文字列マッチでスキャンします。モデル呼び出しは一切発生しないので、使用料はゼロ・レイテンシも無視できます[1]。
組み込みでチェックされている代表的なカテゴリは以下のとおりです。
- 動的コード実行:
eval(、new Function、os.system、child_process.exec - 安全でないデシリアライズ:
pickle(Python の任意コード実行リスク) - DOM 注入:
dangerouslySetInnerHTML、.innerHTML =、document.write - ワークフローファイル:
.github/workflows/配下の編集(リポジトリレベルの権限を付与し得るため)
警告は編集が完了した後で発火し、Claude の次のステップに対するコンテキストに追加されます。同じパターン × 同じファイル × 同じセッションの組では 1 度しか発火しないので、繰り返し編集してもチャットが警告で埋まることはありません。
たとえば .innerHTML = はサニタイズ済みの定数を入れる場合は安全です。プラグインはコンテキストの全体像までは判断しきれないので、書き込みを止めるのではなく Claude に「これは危険パターンに該当します。文脈を確認してください」と通知する設計になっています。
このレイヤーは security-patterns.yaml でユーザー独自のパターンを追加できます(詳細は ch09)。
user@sinyblog:~/claude-security ❯ 04_layer_turn.mdレイヤー 2:ターン終了後の差分レビュー(バックグラウンド)
「ターン」とは、あなたがメッセージを送って Claude が応答するまでの 1 往復のことです。ターンが終了するたびに、プラグインはそのターン中に作業ツリーに加わった全ての変更——Edit / Write / NotebookEdit、Bash 経由の編集、サブエージェントによる編集——を git diff としてまとめ、セキュリティ特化の別 Claude セッションに投入します[1]。
このレビューは バックグラウンドで走るので、Claude の応答自体は遅延しません。問題が見つかった場合、Claude は次に「指摘事項」をプロンプトとして受け取り、フォローアップとして修正に着手します。あなたから見ると「Claude が自発的に追加修正を始めた」ように見えるはずです。
このレイヤーは文字列マッチでは捕まらない以下のような問題を検出します。
- 認可バイパス(管理者ルートに認可チェックが抜けている等)
- IDOR(他ユーザーのオブジェクト ID を直接受け付けてしまう)
- 各種インジェクション(SQL、コマンド、テンプレート)
- SSRF(サーバーから内部 IP へリクエストできてしまう)
- 弱い暗号アルゴリズムや誤った乱数生成器の使用
1 ターンあたり最大 30 ファイルまでの変更を対象にレビューします。連続して 3 回まで自動再プロンプトしますが、それを超えるとユーザーに制御が戻ります。「無限ループで自動修正し続ける」事故を防ぐためのキャップです。
user@sinyblog:~/claude-security ❯ 05_layer_commit.mdレイヤー 3:コミット/プッシュ時のエージェントレビュー
Claude が Bash ツール経由で git commit や git push を実行すると、プラグインはバックグラウンドで エージェント型のレビューを起動します。これがレイヤー 2 よりさらに深い分析になっており、変更差分だけでなく 周辺コード(呼び出し元、サニタイザ、関連ファイル)を能動的に読み込んでから判定します[1]。
この追加コンテキストの威力は大きく、たとえば「外形的には危険に見えるが、上流で十分にサニタイズされているので実際は安全」というケースを正しく無害と判定できます。誤検出が少ないのがこのレイヤーの売りです。
このレビューは Claude が Bash ツールで実行したコミット/プッシュにだけ走ります。あなた自身がシェルで実行したコミット、セッション中の ! シェルエスケープで実行したコミットは対象外です。これは「人間の意図的なコミットには介入しない」というポリシーの表れです。
頻度の制限として、コミット/プッシュレビューは 1 時間あたり 20 件のローリング上限に絞られています。レイヤー 2 で既に指摘済みの内容と同じ場合は再プロンプトされないので、「綺麗なコミット」ではこのレイヤーから何も出力されません。
user@sinyblog:~/claude-security ❯ 06_install.mdインストール手順——3 コマンドで完了
前提条件は次の 3 つです[1]。
- Claude Code CLI バージョン 2.1.144 以降
- Python 3.8 以降が
PATHに通っていること(python3→python→py -3の順に試される) - 作業ディレクトリが git リポジトリであること(レイヤー 2 と 3 が git 差分を見るため)
初回起動時に ~/.claude/security/ 配下に仮想環境が作成され、Claude Agent SDK がインストールされます。pip とネットワーク接続が必要です。Windows では venv 作成手順がスキップされるので、エージェント型のコミットレビューを使いたい場合は claude-agent-sdk をシステムの Python から import できるようにしておく必要があります。importable でない場合はワンショットレビューにフォールバックします。
インストールは Claude Code セッション内で次の 1 行を実行するだけです。
/plugin install security-guidance@claude-plugins-officialインストール時にスコープ(user / project)を聞かれます。マシン全体で常時有効にしたい場合は user スコープを選びます。マーケットプレイスが見つからないと表示された場合は、先にマーケットプレイスを追加してから再試行します。
/plugin marketplace add anthropics/claude-plugins-official
インストール後、現在のセッションでアクティベートするには /reload-plugins を実行します。再起動は不要です。
/reload-plugins
user スコープのプラグインは「あなたのマシン上の Claude Code」にだけ適用されます。Anthropic のインフラ上で動く Claude Code on the web や、チームメンバーが clone したリポジトリでは自動的には有効になりません。これらに対しては、プロジェクトの .claude/settings.json にプラグインを宣言しておく必要があります[1]。
{
"enabledPlugins": {
"security-guidance@claude-plugins-official": true
}
}このファイルをリポジトリにコミットしておけば、clone したメンバー全員にプラグインが自動有効化されます。組織全体に強制したい場合は、管理者が managed settings 経由で enabledPlugins を配布すれば、組織横断で一律に適用できます。
共有リポジトリで全員に有効化されているプラグインを自分だけ止めたい場合、/plugin disable を実行すると、チェックインされた settings.json ではなく自分の .claude/settings.local.json に上書きが書き込まれます。チームメンバーには影響しません。
user@sinyblog:~/claude-security ❯ 08_guidance_md.md自社ルールを追加する——claude-security-guidance.md
組織固有のセキュリティルール——たとえば「customer_id を INFO レベルでログに出さない」「/admin 以下は必ず role チェックを呼ぶ」——は、プラグイン本体のチェックリストには含まれていません。プロジェクトの .claude/claude-security-guidance.md に自然言語で書いておくと、モデル型レビューが 組み込みチェックリストに追加コンテキストとして併用してくれます[1]。
# Security guidance for this repo
- Do not log `customer_id` or `account_number` at INFO level or above.
- All routes under `/admin` must call `require_role("admin")` before any database read.
- Use `crypto.timingSafeEqual` for token comparison instead of `===`.ガイダンスファイルは ユーザー / プロジェクト / プロジェクトローカルの 3 段階の場所から読み込めます。
| スコープ | パス | 用途 |
|---|---|---|
| User | ~/.claude/claude-security-guidance.md |
自分のマシン上の全プロジェクトに適用 |
| Project | .claude/claude-security-guidance.md |
リポジトリにコミット、チーム全員に共有 |
| Project local | .claude/claude-security-guidance.local.md |
gitignore 対象、個人の上書き |
3 つが存在する場合は全て読み込んで結合します。合計サイズの上限は 8 KBです。同じ規則を組織配布したい場合、管理者は MDM で user スコープのファイルをデバイスに配布します。
このファイルに書かれたルールは レビュアーへの指示であり、書き込みや commit を物理的に止めるわけではありません。「この脆弱性カテゴリは無視せよ」と書いてもその指摘は抑制されません。強制的にブロックしたい場合は PreToolUse フックや CI でのチェックと組み合わせる必要があります。
user@sinyblog:~/claude-security ❯ 09_patterns_yaml.md独自パターンを追加する——security-patterns.yaml
正規表現や部分一致のルールを レイヤー 1(ファイル編集ごとのパターンマッチ)に追加したい場合、.claude/security-patterns.yaml を置きます。組み込みパターンと並行して走る決定論的な文字列マッチです[1]。
patterns:
- rule_name: internal_api_key
substrings: ["sk_live_", "AKIA"]
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."各フィールドの仕様は次のとおりです。
| フィールド | 型 | 説明 |
|---|---|---|
rule_name |
string | 警告に表示される識別子 |
reminder |
string | Claude に渡される警告文(最大 1 KB) |
regex |
string | 編集された内容に対する Python 正規表現 |
substrings |
list | 部分一致文字列リスト(regex と二者択一) |
paths |
list | 適用対象を絞る glob パターン(プロジェクト相対なら **/ 前置必須) |
exclude_paths |
list | 除外する glob パターン |
YAML 以外に security-patterns.yml と security-patterns.json も同じスキーマで読み込まれます。YAML 形式は PyYAML が import できる Python 環境が必要で、プラグインは PyYAML を勝手にインストールしません。導入が面倒な環境では JSON 形式を選ぶのが安全です。1 プロジェクトあたり最大 50 ルールまで読み込まれ、致命的なバックトラックを起こしそうな正規表現はスキップされます。
user@sinyblog:~/claude-security ❯ 10_cost_model.md使用コストとモデル設定——SECURITY_REVIEW_MODEL の使い分け
レイヤー 1 のパターンマッチはモデルを呼ばないのでコストゼロです。レイヤー 2(ターン終了レビュー)とレイヤー 3(commit レビュー)は通常の Claude リクエストと同じく 使用量に課金されます[1]。
目安は「ファイルを変更したターンごとに 1 回のレビュー呼び出し」と「コミットごとに 1 回の深いレビュー」です。後者はエージェント型なのでコミット 1 回につき複数のモデルターンを消費することがあります。コミット/プッシュレビューは 1 時間あたり 20 件の上限に絞られているので、暴走で破産する心配はありません。
両方のモデル型レビューは既定で Claude Opus 4.7 を使います。コストを下げたい場合や、特定のレビューだけ別モデルにしたい場合は環境変数で上書きできます。
| 環境変数 | 適用先 |
|---|---|
SECURITY_REVIEW_MODEL |
レイヤー 2(ターン終了レビュー)のモデル |
SG_AGENTIC_MODEL |
レイヤー 3(commit レビュー)のモデル |
ターン終了レビューは頻度が高いので Sonnet 系に落とし、commit レビューは判断の質を重視して Opus 4.7 のまま——というのが、コストと精度のバランスを取りやすい設定です。組織で標準化するなら、CI ランナーや devcontainer の起動時に SECURITY_REVIEW_MODEL を設定する形が運用しやすいでしょう。
user@sinyblog:~/claude-security ❯ 11_disable_layers.md特定レイヤーだけ無効化する——4 つの環境変数
「コミット時の深いレビューだけ要らない」「ターン終了レビューはコストを抑えたいので一時的に止めたい」——そんなときは、プラグイン全体を抜くのではなく 該当レイヤーだけ環境変数で OFFにできます[1]。
| 環境変数 | 効果 |
|---|---|
ENABLE_PATTERN_RULES=0 |
レイヤー 1(ファイル編集ごとのパターンマッチ)を無効化 |
ENABLE_STOP_REVIEW=0 |
レイヤー 2(ターン終了レビュー)を無効化 |
ENABLE_COMMIT_REVIEW=0 |
レイヤー 3(commit/push レビュー)を無効化 |
ENABLE_CODE_SECURITY_REVIEW=0 |
モデル型レビューを全部まとめて無効化(レイヤー 1 だけ残る) |
SECURITY_GUIDANCE_DISABLE=1 |
プラグイン全体を無効化(アンインストールはしない) |
user スコープでプラグインを一時停止したいだけなら、コマンド 1 行で済みます。
/plugin disable security-guidance@claude-plugins-official
マシンから削除したい場合は uninstall を使います。
/plugin uninstall security-guidance@claude-plugins-official
managed settings 経由で組織配布されているプラグインは、無効化できるのは管理者だけです。個人での一時停止はできません。
user@sinyblog:~/claude-security ❯ 12_stack_position.md既存のセキュリティスタックでの位置づけ
security-guidance は単独で全てのセキュリティ問題を捕まえるものではありません。Anthropic 自身も「defense-in-depth の 1 つのレイヤー」と明言しています[1]。typicalなスタックでの位置づけは次の通りです。
| 段階 | ツール | カバー範囲 |
|---|---|---|
| セッション内 | security-guidance プラグイン | Claude が書いたコードの一般的な脆弱性をその場で修正 |
| オンデマンド | /security-review コマンド |
現在ブランチに対する 1 回限りのセキュリティパス |
| Pull Request 時 | Code Review(Team / Enterprise プラン) | マルチエージェントで正確性とセキュリティをコードベース全体の文脈で確認 |
| CI | 既存の静的解析・依存関係スキャナ | 言語固有ルール、サプライチェーンチェック、ポリシー強制 |
後段のツールは前段で漏れたものを拾うように積まれます。プラグインの価値は「後段に到達する量を減らす」点にあり、後段を不要にすることではありません[2]。社内ロールアウトで PR に出るセキュリティ指摘が 30〜40% 減という報告は、この「上流で間引く」効果を示しています[3]。
commit レビューと PR 時 Code Review は範囲が重なりますが、両方走らせる前提の設計です。「同じ問題に二度指摘される」のではなく、commit 時に潰しきれなかったものを PR で着実に捕まえる、と捉えるのが正しい使い方です。
user@sinyblog:~/claude-security ❯ 13_troubleshoot.mdトラブルシューティング——レビューが走らないときの確認手順
「インストールしたのにレビューが走っている気配がない」とき、まずプラグインのログを見ます。プラグインは実行時の診断情報を ~/.claude/security/log.txt に書き出しているので、ここを見れば大半の原因は判明します[1]。
会話にメッセージが出ないままレビューがスキップされる典型的な原因は次の 3 つです。
| 症状 | 原因 | 対処 |
|---|---|---|
| レイヤー 2/3 が走らない | 作業ディレクトリが git リポジトリではない | git init 済みのリポジトリに移動してから再試行 |
| モデル型レビューだけ走らない | Anthropic 認証が無いセッション | API キーや credentials を再設定。レイヤー 1 のパターンマッチだけは引き続き動作する |
| security-patterns.yaml が無視される | PyYAML が import 不可 | security-patterns.json に書き換えるか、PyYAML を Python 環境に入れる |
Windows 環境では仮想環境作成がスキップされる点に注意してください。claude-agent-sdk が import できない場合、コミットレビューは エージェント型からワンショット型にフォールバックします。フォールバックしているかどうかも log.txt から確認できます。
user@sinyblog:~/claude-security ❯ 99_summary.mdまとめ:導入チェックリストと初回ロールアウトの注意点
security-guidance プラグインは「Claude が書いたコードを Claude にレビューさせる」defense-in-depth の最上流レイヤーです。インストール時のチェックリストとして以下を押さえれば、最短 5 分でロールアウトできます。
- 前提を満たす:CLI 2.1.144 以降、Python 3.8+、git リポジトリ内で作業
- マーケットプレイス追加:
/plugin marketplace add anthropics/claude-plugins-official - プラグインインストール:
/plugin install security-guidance@claude-plugins-officialを user スコープで - セッション反映:
/reload-pluginsでその場で有効化 - チーム共有:
.claude/settings.jsonにenabledPluginsを書いてコミット - 自社ルール追加:必要に応じ
claude-security-guidance.mdとsecurity-patterns.yaml - コスト調整:頻度の高いターン終了レビューは
SECURITY_REVIEW_MODELで Sonnet 等に落とす
最後に 3 点だけ要点を残します。
- 3 層は同時に動くが、止めるのは個別の環境変数で OK。「とりあえず全部 ON」で導入し、ターン終了レビューがうるさければ
ENABLE_STOP_REVIEW=0だけ落とすのが現実的な運用です。 - このプラグインは書き込みも commit も止めない。物理的に止めたいルールは
PreToolUseフックや CI で別途強制する必要があります。プラグインは「漏れを減らす」ためのもの、強制ガードレールではありません。 - Code Review と
/security-reviewとの併用が前提。プラグイン単独で「セキュアになった」と判断せず、PR レビューや既存の静的解析と組み合わせる前提で導入してください。