Claude CodeにSnyk Studioを入れて脆弱性スキャンを組み込む手順
Snyk StudioをClaude Codeに入れ、生成コードを書いた直後にSnyk MCPサーバーでスキャンさせる手順。hooksとCLAUDE.mdの違い、プロファイル、権限設定まで。
Claude Codeが書いたコードの脆弱性は、Snyk Studioを入れると「書いた直後にスキャンして、見つかった問題をその場で直させる」流れに組み込めます。仕組みはSnyk MCPサーバー(ローカルで動くMCPサーバー)と、スキャンを呼ばせる指示(directives)の組み合わせです。
この記事では、導入経路の選び方、インストール、認証、スキャンを呼ばせる指示の書き方、Claude Code側の権限設定までを順に扱います。
Snyk Studioとは何か
Snyk Studioは、AIコーディングアシスタントの作業フローにセキュリティ上の指示(directives)を埋め込む仕組みです。Snyk側の説明では、次の4つの層がつながって動きます。
- ADE(エージェント型の開発環境。Claude Codeはここに入ります)
- Directives(アシスタントに渡すhooks・skills・rules・commands)
- Snyk MCPサーバー(ローカルでSnyk CLIを使って動くMCPサーバー)
- Snyk platform(Snyk CodeやSnyk Open Sourceなどの検出エンジン)
Snyk MCPサーバーはローカルのファイルを読むためにSnyk CLI経由で動き、リモートのホスト型サーバーは提供されていません。接続先をURLで指定する通常のリモートMCPとは前提が違うので、手元にNode.jsかSnyk CLIが要ります。
Snyk Studioは、Snykの「AIセキュリティ」の3領域のうち、開発者個人が生成するコードを守る入口です。クラウドAIプラットフォームの統制や、組織横断のAIリスク管理(Evo by Snyk)は別の入口です。
導入経路は3つ — どれを選ぶか
Claude Codeへの入れ方は3通りあります。新規に入れるなら1番目が既定です。
| 経路 | 仕組み | 向く場面 |
|---|---|---|
| インストーラースクリプト | 仕組みhooksベース(既定) | 向く場面新規導入。スキャンを確実に走らせたい |
snyk mcp configure | 仕組みMCP登録+グローバルrules(旧来の方式) | 向く場面すでにこの方式で運用している |
| MCP設定を手書き | 仕組みMCPサーバーだけ登録 | 向く場面hooksもrulesも自分で管理したい |
Claude Code・Cursor・Codex CLI・Gemini CLI・GitHub Copilotは、hooksベースの既定の導入が使える環境です。Claude Codeの個別ガイドでは、npx で設定する方式が「legacy rules-based approach」と書かれています。新規に導入するなら、hooksベースのインストーラーが既定の経路です。
hooksとrulesの違いは、スキャンが確実に走るかどうかです。Snyk docsの比較表では、hooksは「deterministic(必ず実行される)」、rulesは「non-deterministic(AIが飛ばすことがある)」とされています。LLMへの指示は、書いてあっても守られない回があるということです。
インストーラーでSnyk Studioを入れる
前提はSnykアカウントと、Claude Codeが入っていることです。インストーラーが uv、Python、Node.js、npm、Snyk CLIを必要に応じて入れ、各ステップの前に確認を挟みます。
macOS / Linuxでは、スクリプトをいったんファイルに落としてから実行する手順になっています。
curl -fsSL 'https://raw.githubusercontent.com/snyk/studio-recipes/main/installer/dist/snyk-studio-install.sh' \
-o snyk-studio-install.sh
bash ./snyk-studio-install.sh2コマンドに分かれているので、実行前に snyk-studio-install.sh の中身を読めます。社内の制限環境では、BUILDING.md の手順でインストーラーを自前ビルドして社内ホストから配る選択肢もあります。ビルドが向くのは、組織向けにバンドルを調整したい場合、実行内容を監査してから配りたい場合、raw.githubusercontent.com から取得できない環境の場合です。
Windowsは同じ構成のPowerShell版 (snyk-studio-install.ps1) を使います。
手動でMCPサーバーだけ登録する
hooksやrulesを自分で管理したいときは、MCPサーバーだけを登録します。~/.claude.json に次の設定を足す形が、Claude Code向けガイドに載っています。
{
"mcpServers": {
"Snyk": {
"type": "stdio",
"command": "npx",
"args": ["-y", "snyk@latest", "mcp", "-t", "stdio"],
"env": {}
}
}
}Snyk CLIをすでに入れているなら、command を snyk の絶対パス、args を ["mcp", "-t", "stdio"] にします。claude mcp add で登録する方法もありますが、ガイドの例はSSE方式で、先に snyk mcp -t sse を別ターミナルで起動してから登録する流れです。
snyk mcp -t sse
claude mcp add --transport sse snyk http://127.0.0.1:7695/sseSSE方式はサーバーを常駐させる手間が増えます。JSONをそのまま渡す登録手順はclaude mcp add-jsonの解説にまとめています。
登録できたかは、Claude Code内の /mcp で確かめます。一覧に出たサーバーから「View Tools」を選ぶと、公開されているツールが読めます。
認証とフォルダの信頼は最初の1回
Snyk MCPサーバーは、初回にSnykアカウントでの認証(snyk_auth)と、スキャン対象フォルダの信頼(snyk_trust)が必要です。ガイドはこれを「one-time setup」と呼んでいます。
動作確認には、Claude Codeに自然文で頼むのが手早い方法です。Snyk docsの例は「scan my directory for security issues」です。ツールが呼ばれて認証を求められれば、MCPサーバーはつながっています。
ツールとプロファイル — tokenコストを選ぶ
Snyk MCPサーバーが公開するツールは次のとおりです。
| ツール | 役割 |
|---|---|
snyk_code_scan | 役割自前コードの静的解析(SAST) |
snyk_sca_scan | 役割依存パッケージの脆弱性とライセンス |
snyk_iac_scan | 役割Terraform・Kubernetes・CloudFormationなどの設定ミス |
snyk_container_scan | 役割コンテナイメージの脆弱性 |
snyk_sbom_scan | 役割SBOMファイルの脆弱性(実験的) |
snyk_aibom | 役割AI-BOMの生成(実験的。Pythonプロジェクト向け) |
snyk_package_health_check | 役割依存パッケージ選定時の健全性評価 |
snyk_auth / snyk_logout / snyk_trust / snyk_version / snyk_send_feedback | 役割認証・信頼・バージョン・フィードバック |
ツールの数だけ、Claude Codeのコンテキストにツール定義が載ります。そこでSnykは3つのプロファイルを用意しています。
- Lite: 認証系に加え
snyk_code_scanとsnyk_sca_scanだけ。トークン消費とコンテキストを抑える - Full(既定): 安定版の全ツール。コンテナ、IaC、SBOM、AI-BOM、パッケージ健全性チェックを含む
- Experimental: Fullに評価中のツールを加えたもの
コードと依存関係のスキャンだけで足りるチームは、Liteで始める手があります。指定は --profile=lite フラグか、環境変数 SNYK_MCP_PROFILE です。
{
"mcpServers": {
"Snyk": {
"type": "stdio",
"command": "npx",
"args": ["-y", "snyk@latest", "mcp", "-t", "stdio", "--profile=lite"],
"env": {}
}
}
}スキャンを呼ばせる指示 — CLAUDE.mdのrulesの書き方
MCPサーバーを登録しただけでは、Claude Codeがスキャンを呼ぶとは限りません。「いつ呼ぶか」を指示で与えるのが、Secure at inception directivesです。Claude Codeでは CLAUDE.md に次を追記する形が載っています。
- Always run snyk_code_scan tool for new first party code that is generated in a Snyk-supported language.
- If any security issues are found based on newly introduced or modified code or dependencies, attempt to fix the issues using the results context from Snyk.
- Rescan the code after fixing the issues to ensure that the issues were fixed and that there are no newly introduced issues.
- Repeat this process until no new issues are found.これは「スキャン → 修正 → 再スキャン → 指摘が消えるまで繰り返す」という検証ループを、指示として与えているわけです。
依存関係やIaCまで広げたければ、Snykの「All Snyk products」版が使えます。依存関係の追加・更新で snyk_sca_scan、コンテナイメージのビルドや参照で snyk_container_scan、IaCファイルの作成・変更で snyk_iac_scan を呼ばせる行が足されています。
毎回走らせるか、AIに判断させるか
npx 方式のインストールは、既定で「毎回スキャン」の指示をグローバルの CLAUDE.md に書きます。--rule-type=smart-apply を付けると、LLMが「大きな変更のときだけ」呼ぶ指示に変わります。
npx -y snyk@latest mcp configure --tool=claude-cli --rule-type=smart-applysmart scanはトークン消費が減って反復が速くなる一方、安全でないコードが混ざるリスクが上がります。
スキャン頻度の選び方
毎回スキャン(既定)
新規コードのたびに snyk_code_scan を呼ぶ指示です。トークンと待ち時間は増えます。
smart-apply
大きな変更の完了前だけ呼ぶ指示です。呼ばれない変更が残ります。
確実に走らせたいならhooks
CLAUDE.md の指示は、Snyk docs自身が注記するとおり、LLMの非決定性のためアシスタントが従わない場面があります。完了条件としてスキャンを必須にしたいなら、hooksで固定する構成が必要です。hooksの種類とイベントはClaude Code Hooks完全ガイドで一覧できます。
Snykは、hooksで決定論的に強制し、rulesはその場のフィードバック用に重ねる併用を勧めています。インストーラーが入れる既定のhooks構成が、まさにこの考え方です。実装例はSnyk側の studio-recipes リポジトリにあります。
Claude Code側の権限設定
スキャンのたびに許可プロンプトが出ると、自動修正のループが止まります。Claude Codeの権限ルールは、MCPツールを mcp__<サーバー名>__<ツール名> で指定できます。サーバーを Snyk の名前で登録した場合、コードスキャンだけを事前許可する設定は次の形です。
{
"permissions": {
"allow": ["mcp__Snyk__snyk_code_scan"]
}
}mcp__Snyk__* のようにサーバー全体を許可する書き方もあります。ただし、全部を許可するかどうかは、次の点を見て決めます。
snyk_sca_scan は、プロジェクトの依存ツリーを取得するためにGradleやMavenといったサードパーティのツールをマシン上で実行することがあります。依存関係のスキャンは、読み取りだけの操作とは言い切れません。事前許可はコードスキャンに絞り、snyk_sca_scan は都度確認にする運用が考えられます。
stdioのMCPサーバーに環境変数を渡す範囲を絞る設定はCLAUDE_CODE_MCP_ALLOWLIST_ENVの解説にあります。Snyk MCPサーバーは認証トークンを使うので、渡す環境変数を意識する場面で効きます。
見つかった問題をまとめて直す — snyk-fix
新規コードのスキャンとは別に、すでにある脆弱性をまとめて直すcommand directiveも公開されています。Snykの例では /snyk-fix というカスタムコマンドで、スキャン、修正、再スキャンを経てPR作成までを一続きにしています。引数なしなら検出された全件が対象で、Snykのプロダクト名などで絞り込むこともできます。
これは自動で走るものではなく、人かエージェントが呼ぶ手動のコマンドです。載っているサンプルは、自分の組織向けに調整して使う前提のものです。
/security-reviewとの使い分け
Claude Code自体にも、ブランチの差分をセキュリティ観点で調べる /security-review があります。対象はブランチとoriginのデフォルトブランチとの差分で、位置づけは出荷前の「1回きりの単発確認」です。
Snyk Studioは、コードを書いた直後に、Snykの検出エンジンの結果を使ってスキャンを呼ばせる側です。依存パッケージ(snyk_sca_scan)、IaC、コンテナ向けのツールも別に用意されています。必要になるのはSnykアカウントとローカルのSnyk CLIです。
書いた直後の機械的な検査と、PR前の差分レビューは役割が違うので、両方を置く構成も組めます。/security-review の挙動はsecurity-reviewコマンドの解説で扱っています。
落とし穴
- スキャンできる言語に限りがある:
snyk_code_scanが対応するのはApex、C/C++、Dart/Flutter、Elixir、Go、Groovy、Java/Kotlin、JavaScript、.NET、PHP、Python、Ruby、Rust、Scalaなど。指示文の "Snyk-supported language" はこの範囲を指します - アカウントが要る: 認証にはSnykアカウントが必要です
- package health checkのhookはCursor専用:
snyk_package_health_checkのインストール阻止hookは、Snyk docs上はCursorでのみ動くと明記されています。Claude Codeで使うならskillとして呼ばせる形になります - ホスト型の代替はない: 手元にNode.jsまたはSnyk CLIが入らない環境では、このMCPサーバーは動かせません
組織全体に配る場合は、MDM(IntuneやJamfなど)にインストールスクリプトを載せる流れがSnyk docsの「Distribution at scale」に整理されています。判断点は、対応アシスタント、SnykのCLIとMCPを自動更新にするか手動にするか、directivesを入れるか、開発者に変更を許すか、の4つです。Claude Code側でhooksを組織の管理設定に限定する場合は、allowManagedHooksOnlyがユーザー設定から持ち込まれるhookを止めます(allowManagedHooksOnlyの影響範囲)。併用するなら、Snykのインストーラーがhooksをどの設定ファイルに書くかを先に確かめておきます。