In this article
ContinueとSnyk MCPで脆弱性を検出・修正する
Continueは、開発環境を自分の手に取り戻すような感覚をもたらします。操作権を手放させる独自仕様のAIコーディングアシスタントとは異なり、Continueは徹底して透明性を重視しています。何が起きているのかを正確に把握し、自分でモデルを選び、コードのプライバシーを保てます。まるで自分だけのライトセーバーを作るようです。この開発者の自律性へのこだわりは、オープンソースの理念だけでなく、MCPとの連携や、GPT-4からローカルのLLaMAモデルまで実行できる、特定のモデルに依存しない柔軟性といった細やかな設計にも表れています。
Continueを使って、Snyk Studioのセキュリティスキャン機能を開発ワークフローに直接組み込むワークショップ一式のガイドをご覧ください。
開発者のリアルな声
ある開発者はDEV Communityにこう投稿しています:「チャットを補助するいくつかのオプション(URLのWebクロール、特定のファイルなど)に加えて、コードベースのコンテキストにも対応していると知って驚きました。しかも、実際に動きました!そのすべてが完全無料のオープンソースです!」
さまざまな使い方ができます:「インターネットに接続できないときは、continue.devとローカルのqwen 7b coderを使って自動補完しています。」
あるユーザーはこう語っています:「チャットツールとして、柔軟性と拡張性に優れていて素晴らしいです。OpenAI o1、Gemini 1.5と2.0、Claude 3.5、その他いくつかのollama上のモデルなど、十数種類のモデルを使っています。よく使うタスク向けに、あらかじめ定義したカスタムプロンプトやコマンドも多数あります。」
一般的な流れは、まずプロジェクトのコードベースをコンテキストとしてモデルにタスクを実装させ、次に別のモデルでコードをレビューし、最後に『Clean Code』の書籍からまとめた推奨事項を含むカスタムプロンプトを使います。利用中のフレームワークのドキュメントやGoogle検索結果を追加すると、かなり良い結果が得られます。」
こうしたユーザーレビューで繰り返し語られるのは、ベンダーロックインからの解放、プライバシーを自分で管理できること、自由にカスタマイズできる柔軟性、そして完全無料のオープンソースであることの価値です。開発者が、自分に合わせて働いてくれるAIコーディングアシスタントをようやく手に入れたと喜ぶのも当然でしょう。
Continueを使い始める
Continueは、すぐに作業を始められる開発者向けの導入体験を提供します。
拡張機能をインストール:VS Code向けはVisual Studio Marketplaceから、JetBrains IDE(IntelliJ IDEA、PyCharm、WebStorm)向けはプラグインとして入手できます。
右サイドバーに移動:インストールすると、Continueのアイコンが左サイドバーに表示されます。より快適に使うには、右サイドバーにドラッグして移動してください。
モデルを設定:エージェント選択のドロップダウンをクリックし、希望するモデルプロバイダーを選択します。ContinueはOpenAI、Anthropic、ローカルモデル向けのOllamaなど、さまざまなプロバイダーに対応しています。
任意:Continue Hubにサインイン:エージェントワークフローの管理やチームコラボレーション機能を使う場合は、Continue Hubにサインインします(詳しくは後述)。ただし必須ではありません。ローカルモデルを使えば、Continueは完全オフラインでも動作します。

ContinueのModel Context Protocol(MCP)対応
最新のAIコーディングツールであるContinueは、Model Context Protocol(MCP)に対応しています。MCPを使うと、AIモデルが外部ツール、データベース、APIとリアルタイムにやり取りでき、単純なコード生成を超えて、できることが大幅に広がります。
ContinueでMCPサーバーを設定する
Continueでは、主に2つの方法でMCPサーバーを設定できます:
ワークスペース単位のMCP設定
(.continue/mcpServers/):プロジェクト固有のツールセットに最適です。ワークスペースのルートにこのディレクトリを作成し、MCPサーバーごとにYAMLファイルを追加します。これらのツールは、そのワークスペース内でのみ有効になります。
設定例:
your-project/
├── .continue/
│ └── mcpServers/
│ ├── playwright-mcp.yaml
│ └── snyk-mcp.yaml
└── ...グローバルMCP設定
(~/.continue/config.yaml):すべてのプロジェクトでグローバルに使いたいツールは、メインのContinue設定ファイル内のmcpServersブロックで定義します。Snykなど、どこでも使いたいセキュリティスキャンツールに最適です。
MCPのトランスポート方式
Continueは複数のトランスポート方式に対応しています:
STDIO(標準入出力):ローカルプロセスやコマンドラインツールに最適です。多くのMCPサーバーがこの方式を使用します。
Streamable HTTP:ストリーミングに対応したリモート/ホスト型MCPサーバー向けです。
SSE(Server-Sent Events):リモートサーバーとのリアルタイムストリーミング通信向けです。
なお、MCPプロトコルではSSEが廃止予定となっており、Streamable HTTPへの移行が進められています。
MCPサーバーのYAML設定はシンプルで、主要なプロパティをいくつか指定するだけです:
name: My MCP Server
version: 0.0.1
schema: v1
mcpServers:
- name: Server Display Name
command: npx # or full path to executable
args:
- "package-name"
- "--flags"
env:
API_KEY: ${{ secrets.MY_API_KEY }}この形式なら、移行も簡単です。Claude Desktop、Cursor、Clineなど、別のツールを使っている場合は、そのJSON形式のMCP設定ファイルをそのまま.copyせず、.continue/mcpServers/ディレクトリにコピーできます(複数形の「Servers」である点に注意)。Continueが自動的に読み込みます。
Snyk Studioを追加する
Snyk Studioの一部であるSnyk公式MCPサーバーは、セキュリティスキャン機能をAIコーディングワークフローに直接組み込みます。開発環境を離れることなく、脆弱性スキャンの実行、セキュリティ検出結果の取得、AIを活用した修正の依頼ができます。実際、Snyk CLIに組み込まれています。
前提条件
Snyk MCPサーバーを追加する前に、以下をご確認ください:
1. Snyk CLIがインストール済みであること(v1.1296.2以降):インストールガイド
# Install via npm
npm install -g snyk
# Or download from https://docs.snyk.io/developer-tools/snyk-cli/install-or-update-the-snyk-cli2. Snyk認証:MCPサーバーにはSnyk APIトークンが必要です。次のコマンドを実行します:
1snyk authブラウザーが開いて認証が行われ、トークンがローカルに保存されます。

設定方法
最も簡単な方法は、インストール済みのContinue VS Code拡張機能にSnyk MCPサーバーを追加することです:
左サイドバーのContinueアイコンを選択します。
ユーザー入力ボックスの上部にある「Configure tools」を選択します。

3. 「MCP Servers」の右にある「+」アイコンをクリックして、新しいサーバーを追加します。

4. プロジェクト内の適切な場所にnew-mcp-server.yamlファイルが自動的に作成されます。
1owler@OwlUbuntu:~/Documents/Snyk/snyk-mcp-demos/pygoat$ tree .continue/
2.continue/
3└── mcpServers
4 └── new-mcp-server.yaml
5
61 directory, 1 fileSnyk MCPサーバーは、npx(推奨)またはCLIを直接呼び出す方法で追加できます。
npxを使って常に最新の状態に保つ
ワークスペースに.continue/mcpServers/snyk-mcp.yaml を作成したら、次のように定義できます:
name: Snyk Security Scanner
version: 0.0.1
schema: v1
mcpServers:
- name: Snyk
command: npx
args:
- "-y"
- "snyk@latest"
- "mcp"
- "-t"
- "stdio"
env: {}この設定ではnpxを使って、常に最新バージョンのSnyk CLIを取得します。
ローカルにインストールしたSnyk CLIのパスを直接使う
Snykをグローバルにインストール済みで、ローカルのインストールを使う場合:
name: Snyk Security Scanner
version: 0.0.1
schema: v1
mcpServers:
- name: Snyk
command: /absolute/path/to/snyk (i.e. from `which snyk`)
args:
- "mcp"
- "-t"
- "stdio"
env: {}ほとんどのLinuxシステムでは、which snykの出力から/absolute/path/to/snyk を取得できます。
Snyk MCPサーバーをCLIから直接実行する場合は--experimentalフラグが必要なことがありますが、最新バージョンのnpx経由で呼び出すと自動的に処理されます。
ContinueでSnyk MCPサーバーを有効にする
設定ファイルを作成すると、ContinueがMCPサーバーを自動的に検出して読み込みます。動作を確認するには:
1. Continueのエージェントモードを有効にする:MCP機能はエージェントモードでのみ利用できます。チャット入力欄の近くにあるエージェント選択のドロップダウンをクリックし、エージェントモードが有効になっていることを確認します。


2. MCPツールを確認する:選択したLLMに、利用可能なツールを尋ねます。

3. 認証を確認する:チャットパネルでContinueに「Snykの認証状態を確認できますか?」と尋ねます。エージェントがSnyk MCPサーバーを使って(MCPツール呼び出しを通じて)接続を確認します。
Continueで脆弱性を自動検出して修正する
このデモでは、OWASPプロジェクトリーダーのadeyosemanputra'が公開しているpyGoatリポジトリを使用します。セキュリティ教育を目的に設計された、意図的に脆弱性を含めたDjangoアプリケーションです。重大度の異なる脆弱性が詳しく記録されているため、セキュリティスキャンと修正のワークフローを試すのに最適です。
初回のセキュリティスキャン
まず、コードベース内でSnykがどのような脆弱性を検出するか見てみましょう。ContinueにSnyk MCPサーバーを使ってプロジェクトをスキャンするよう依頼することもできます:
Continueのチャットパネル(エージェントモード)で、次のように依頼します:
Please run a Snyk code scan on the current project.Continueのエージェントは、Snyk MCPツールを利用できることを認識し、スキャンを実行します:

続いてContinueが、重大な検出結果をわかりやすく要約します:
Top Critical Issues Found:
🔴 High Severity Issues:
Path Traversal (2 instances) - Unsanitized input flows into file operations
Code Injection (2 instances) - Use of eval() with unsanitized input
SQL Injection (2 instances) - Unsanitized input in SQL queries
Command Injection (2 instances) - Unsanitized input in subprocess calls
Deserialization of Untrusted Data (3 instances) - Unsafe pickle.loads() usage
XML External Entity (XXE) Injection - Insecure XML parser
Use of Hardcoded Cryptographic Key (2 instances) - JWT with hardcoded secret
Hardcoded Non-Cryptographic Secret (2 instances) - Including Django SECRET_KEY
🟡 Medium Severity Issues:
Debug Mode Enabled - Flask app running with debug=True
CSRF Protection Disabled (27 instances) - Many views using @csrf_exempt
Hardcoded Passwords (18 instances)
SSRF - Server-Side Request Forgery vulnerability
Insecure XML Parser (2 instances)
🟢 Low Severity Issues:
Insecure Hash (MD5) (4 instances) - Using MD5 for passwords
Hardcoded Credentials (5 instances)
Cookie Security Issues (46 instances) - Missing HttpOnly/Secure flags
This is clearly a vulnerable-by-design training application (PyGoat). Would you like me to help you understand any specific vulnerability or create fixes for them?重大度の高いSQLインジェクションの脆弱性を修正する
次に、Continueのエージェントに優先度の高い脆弱性を1つ修正させ、再スキャンで修正を確認してみましょう。スキャン結果に記載された脆弱性の詳細を提示します:
The scan found a High severity SQL Injection vulnerability:
Path: introduction/views.py, line 871
Info: Unsanitized input from an HTTP parameter flows into
introduction.models.sql_lab_table.objects.raw, where it is used in an SQL query.
Can you fix this vulnerability and then re-scan to verify it's fixed?Continueのエージェントが、明確な計画を立てて作業を開始します:
The user wants me to:
1. Fix a SQL injection vulnerability in introduction/views.py around line 871
2. Re-scan to verify the fix
Let me first read the file to see the vulnerable code.
I'll help you fix the SQL injection vulnerability. Let me first examine the vulnerable code.まず、エージェントが脆弱なコードを読み、状況を把握します:
Continue read introduction/views.py
Now I can see the vulnerable code around line 871. The issue is in the injection_sql_lab function where raw SQL queries are constructed using string concatenation with unsanitized user input. Let me fix this vulnerability by using parameterized queries:
次に、パラメーター化クエリを使って修正を適用します:

Continueが修正内容を説明します:
What was fixed:
Before:
Line 856: sql_query = "SELECT * FROM introduction_sql_lab_table WHERE id='"+name+"'AND password='"+password+"'"
Line 870: user = sql_lab_table.objects.raw(sql_query)
This allowed attackers to inject malicious SQL code through the name or password parameters
After:
Line 851: sql_query = "SELECT * FROM introduction_sql_lab_table WHERE id=%s AND password=%s"
Line 871: user = sql_lab_table.objects.raw(sql_query, [name, password])
Now uses parameterized queries where user input is safely passed as separate parameters修正を確認する
エージェントがSnykのスキャンを自動的に再実行し、脆弱性が解消されたことを確認します:
Perfect! ✅ The SQL injection vulnerability has been successfully fixed!
Verification Results:
The scan now shows 101 issues (down from 102), confirming that one SQL injection vulnerability has been eliminated.
これで、セキュリティ脆弱性の修正デモは完了です!🎈
Continue Hub:チームコラボレーションと共有エージェント
参考までに、Continue Hubは、カスタムAIエージェントを一元管理できるチームコラボレーション基盤です。Continueのコア拡張機能(今回使用するもの)は無料のオープンソースですが、Hubでは上級ユーザー向けに次のような価値を提供します:
無料のSoloプラン:個人の開発者やオープンソースプロジェクト向けに、非公開の設定、チームで共有するエージェント、誰でも使える公開アシスタントの3つの公開範囲を用意しています。
Hub Agents(クラウド管理型):
Webベースの管理:使いやすいインターフェースでエージェントを設定でき、すべてのIDEインスタンスからアクセスできます。
ワンクリックで共有:チームのコーディング規約に合わせたカスタムエージェントを作成し、シンプルなリンクで共有できます。
すばやくセットアップ:設定ファイルを編集する必要はありません。好みの設定を選ぶだけで、すぐにコーディングを始められます。
自動更新:変更はチームメンバー全員にすぐ反映されます。
Continue CLI:ターミナルで使えるAIエージェント
Continue CLI(cn)はオープンソースのモジュール型コーディングエージェントで、AIの強力な支援をターミナル上で直接利用できます。普段からターミナルを中心に作業し、使い慣れた環境で自動化したい開発者に、コマンドラインを離れることなくターミナルの機能を最大限に活用できます。

対話モード
# Install globally
npm i -g @continuedev/cli
# Launch interactive mode
cn
# Resume previous conversation
cn --resume対話モードでは、cnはIDE拡張機能と同じように動作します。次のような作業を依頼できます:
失敗するテストの修正
コードベース内のパターンの検出
複雑なリファクタリングの実行
新機能の実装
(承認後に)ターミナルコマンドを実行
IDEと同じように、@でファイルのコンテキストを指定し、/でスラッシュコマンドを実行できます。CLIにはヘッドレスモードもあり、Unix形式のスクリプトやCI/CDの自動化にも最適です。
IDEと同じ設定を使用
CLIはIDE拡張機能と同じconfig.yamlを使用します。/configコマンドまたは--configフラグで、Hubエージェントとローカル設定を切り替えられます:
# Use Hub agent
cn --config continuedev/default-agent
# Use local configuration
cn --config ~/.continue/config.yamlContinueの特徴
Continueが掲げるのは、開発者が試行錯誤し、カスタマイズを作り、コミュニティと共有する「貢献の文化」です。誰もが独立してクローズドソースのアシスタントを開発するのではなく、オープンな取り組みを促します。Continueは、クローズドソースの代替製品とは根本的に異なるアプローチを取っています:
オープンソースと拡張性に優れたアーキテクチャ
Continueは「独自仕様の『ブラックボックス』型AIアシスタントプロバイダーとは正反対の存在」として、開発者が実験し、カスタマイズを作成し、コミュニティと共有できるオープンなアーキテクチャを通じて、「貢献の文化」を実現します。
ソースコードを確認:コードのコンテキストがどのように処理され、AIモデルと共有されるかを正確に確認できます。
カスタム拡張機能:独自のスラッシュコマンド、コンテキストソース、テンプレート化されたシステムメッセージ、ツールを作成できます。
コミュニティの貢献:拡大を続ける拡張機能と設定のエコシステムを活用し、その発展に貢献できます。
モデル選択の柔軟性とベンダーロックインからの解放
Continueは特定のモデルに依存しないため、ニーズに合ったモデルを自由に選べます。OpenAIやClaude、Mixtralから、OpenRouter、Ollama、カスタムAPI経由のローカルLLaMAまで対応。ベンダーロックインを避け、柔軟かつコスト効率よく拡張できます。さらに、次のことも可能です。
モデルを使い分ける:複雑な推論タスクにはClaude Sonnetモデルを使い、日常的な補完にはローカルモデルを利用
ニーズに応じて会話の途中でモデルを切り替える
コスト体系:Continueは完全なオープンソースで、無料で利用できます。ライセンス料はかかりません。費用が発生するのは外部モデルの有料APIを利用する場合のみですが、自前のモデルをデプロイすれば費用を完全に回避できます。
IDEを置き換えずに統合
VS CodeのフォークであるCursorや、独立したIDEであるWindsurfとは異なり、Continueは既存のワークフローに組み込める軽量な拡張機能です。つまり、次のメリットがあります。
使い慣れた設定や拡張機能をそのままに、既存のVS CodeやJetBrains環境を利用できる
新しいIDEの習得が不要
既存のキーボードショートカットやカスタマイズをそのまま利用できる
導入のハードルが低く、数分でインストールして使い始められる
ContinueとSnykで次のステップへ
MCPの普及が進み、MCPサーバーを開発するセキュリティツールが増えるにつれて、次のようなAIエージェントの実現が期待できます。
脆弱性を修正するだけでなく、包括的なセキュリティテストを生成してリグレッションを防止する
セキュリティ修正やセキュアコーディングのパターンを反映するよう、ドキュメントを自動更新する
人の判断が必要な複雑なセキュリティ課題について、手動レビュー用の詳細なチケットを作成する
CI/CDパイプラインと連携し、コードのマージ前にセキュリティに関するフィードバックを提供する
Continue CLIを使って、スケジュール済みジョブやイベント起動型ワークフローでセキュリティスキャンを自動実行する
ContinueのアーキテクチャとMCPプロトコルはどちらもモジュール式のため、相互運用性を保ちながら、それぞれ独立して進化できます。セキュリティは一度限りのチェックポイントではなく、継続的に自動化されるプロセスになります。
利用を開始する
同様のワークフローを導入するチーム向けに、セットアップの概要を紹介します(TL;DR)。
1. Continueをインストール:VS Code MarketplaceまたはJetBrainsのプラグインリポジトリからインストールします。
2. 使用するモデルを設定:Ollama経由のローカルモデル、またはOpenAIやAnthropicなどのクラウドモデルを設定します。
3. 任意:Continue CLIをインストール:ターミナルやCI/CDとの連携に利用します。
npm i -g @continuedev/cli4. Snyk MCPサーバーを追加:上記のYAML設定を使用するか、workshop-in-a-boxから入手します。
5. Snykで認証:snyk authを実行します。
6. Agent Modeを有効化:ContinueでMCPツールを利用できるようにします。
7. スキャンと修正を開始:ワークフロー内で脆弱性を直接スキャンして修正します。
LLMは、SQLインジェクション、XSS、ハードコードされたシークレットなど、定型的でよく知られた問題の修正を得意とします。一方、人は創造的な問題解決やアーキテクチャの検討が必要な、新たなセキュリティ課題に集中できます。ContinueとSnyk MCPにより、セキュリティは開発のボトルネックではなく、開発フローの一部として上流から組み込まれます。
SnykとContinueのパートナーシップについて、ぜひご覧ください。