チャットでのツールの使用
ツールは、コードの検索、コマンドの実行、Webコンテンツの取得、APIの呼び出しなど、特定のタスクを実行するための専門機能を備えてチャットを拡張します。VS Codeは3種類のツールをサポートしています。組み込みツール、Model Context Protocol (MCP) ツール、拡張機能ツールです。
この記事では、VS Codeで利用可能なツールの種類、チャットプロンプトでの使用方法、およびツール呼び出しと承認の管理方法について説明します。
ツールの種類
VS Codeは、チャットで使用できる3種類のツールをサポートしています。
組み込みツール
VS Codeは、チャットで自動的に利用可能な包括的な組み込みツールセットを提供します。これらのツールは、一般的な開発タスクをカバーし、ワークスペース内での作業に最適化されています。
組み込みツールはインストールや構成を必要とせず、チャットの使用を開始するとすぐに利用できます。
組み込みツールの完全なリストとその説明については、チャットツールリファレンスを参照してください。
MCPツール
Model Context Protocol (MCP) は、AIモデルが統一されたインターフェイスを通じて外部ツールやサービスを使用できるようにするオープンスタンダードです。MCPサーバーは、チャットに extra な機能を追加するためにVS Codeに追加できるツールを提供します。
チャットでツールを使用するには、MCPサーバーをインストールして構成する必要があります。MCPサーバーは、ローカルマシンで実行するか、リモートでホストできます。
VS CodeでのMCPサーバーの構成については、こちらを参照してください。
拡張機能ツール
VS Code拡張機能は、エディターと深く統合されたツールを提供できます。拡張機能ツールは、Language Model Tools APIを使用して、VS Code拡張機能APIの全範囲にアクセスしながら、専門的な機能を提供します。
拡張機能ツールは、それらを提供する拡張機能をインストールすると自動的に利用可能になります。ユーザーは、拡張機能自体をインストールする以外に、個別のインストールや構成を必要としません。
拡張機能ツールを作成する開発者の方は、Language Model Tools APIガイドを参照してください。
チャットでツールを有効にする
チャットでツールを使用するには、まずチャットビューでツールを有効にする必要があります。ツールピッカーを使用して、リクエストごとにツールを有効または無効にできます。MCPサーバーのインストールや、ツールを提供する拡張機能のインストールによって、さらにツールを追加できます。
結果を改善するために、プロンプトに関連するツールのみを選択してください。
ツールピッカーにアクセスするには
-
チャットビューを開き、エージェントピッカーからエージェントを選択します。
-
チャット入力フィールドにあるツールを構成ボタンを選択します。

-
現在のリクエストで利用可能なツールを制御するために、ツールを選択または選択解除します。
検索ボックスを使用してツールのリストを絞り込みます。
プロンプトファイルやカスタムエージェントでチャットをカスタマイズする場合、特定のプロンプトやモードで利用可能なツールを指定できます。ツールリストの優先順位について詳しくは、こちらを参照してください。
プロンプトでツールを使用する
エージェントを使用する場合、エージェントはプロンプトとリクエストのコンテキストに基づいて、有効なツールから使用するツールを自動的に決定します。エージェントは、必要に応じて関連ツールを自律的に選択して呼び出し、タスクを完了します。
プロンプトで#の後にツール名を入力して、ツールを明示的に参照することもできます。これは、特定のツールの使用を確実に行いたい場合に便利です。チャット入力フィールドに#と入力すると、組み込みツール、インストール済みのサーバーからのMCPツール、拡張機能ツール、およびツールセットを含む、利用可能なツールのリストが表示されます。
明示的なツールの参照例
"#fetch https://vscode.dokyumento.jp/updates のコンテンツを要約してください""Next.jsでのルーティングはどのように機能しますか? #githubRepo vercel/next.js""#problems の問題を修正してください""認証フローについて説明してください #codebase"
一部のツールは、プロンプトで直接パラメーターを受け付けます。たとえば、#fetchはURLを必要とし、#githubRepoはリポジトリ名を必要とします。
デフォルトでは、ツール呼び出しの詳細はチャットの会話で折りたたまれています。チャットでツール概要行を選択して展開するか、実験的な chat.agent.thinking.collapsedTools 設定でデフォルトの動作を変更できます。
ツールの承認
一部のツールは、実行前に承認が必要です。これは、ツールがファイルを変更したり、環境を変更したり、悪意のあるツールの出力によってプロンプトインジェクション攻撃を試みたりする可能性があるため、セキュリティ対策です。
ツールが承認を必要とする場合、ツールの詳細が表示された確認ダイアログが表示されます。ツールを承認する前に情報を注意深く確認してください。ツールは一度だけ、現在のセッション、現在のワークスペース、または将来のすべての呼び出しに対して承認できます。

ツールやエージェントのアクションにより、ファイルが変更される可能性があります。ワークスペース内の機密ファイルへの意図しない編集を回避する方法については、こちらを参照してください。
常にツールのパラメーターを注意深く確認してから承認してください。特に、ファイルを変更したり、コマンドを実行したり、外部サービスにアクセスしたりするツールについては、VS CodeでAIを使用する際のセキュリティに関する考慮事項については、こちらを参照してください。
ツールの自動承認を有効または無効にする (実験的)
デフォルトでは、任意のツールを自動承認できます。誤った承認を防ぐために、chat.tools.eligibleForAutoApproval 設定で特定のツールの自動承認を無効にできます。そのツールに対して常に手動承認を要求するには、値をfalseに設定します。
組織は、デバイス管理ポリシーを使用して、特定のツールの手動承認を強制することもできます。エンタープライズドキュメントで詳細を確認してください。
URL承認
fetchツールなどで、ツールがURLにアクセスしようとすると、悪意のあるコンテンツや予期しないコンテンツから保護するために2段階の承認プロセスが使用されます。VS Codeは、チャットビューで確認するためのURLの詳細が表示された確認ダイアログを表示します。
-
事前承認: URLへのリクエストを承認する
このステップにより、連絡するドメインを信頼していることを確認し、機密データが信頼できないサイトに送信されるのを防ぐことができます。

一度限りの承認、または特定のURLまたはドメインへの将来のリクエストの自動承認のオプションがあります。自動承認を選択しても、結果の確認の必要性には影響しません。リクエストを許可するを選択すると、URLまたはドメインに対する事前承認と事後承認の両方を構成できます。
注意事前承認は、"信頼されたドメイン"機能を尊重します。ドメインがそこにリストされている場合、そのドメインへのリクエストは自動的に承認され、応答の確認ステップは延期されます。
-
事後承認: URLから取得した応答コンテンツを承認する
このステップにより、取得したコンテンツがチャットに追加されたり、他のツールに渡されたりする前に確認され、潜在的なプロンプトインジェクション攻撃を防ぐことができます。
たとえば、GitHub.comのようなよく知られたサイトからコンテンツを取得するリクエストを承認する場合があります。しかし、コンテンツ(issueの説明やコメントなど)はユーザー生成であるため、モデルの動作を操作する可能性のある有害なコンテンツが含まれている可能性があります。
一度限りの承認、または特定のURLまたはドメインからの将来の応答の自動承認のオプションがあります。
重要事後承認ステップは、"信頼されたドメイン"機能とはリンクされておらず、常に確認が必要です。これは、信頼できるドメインであっても、信頼できないコンテンツによる問題を防止するためのセキュリティ対策です。
chat.tools.urls.autoApprove 設定は、自動承認URLパターンを保存するために使用されます。設定値は、リクエストと応答の両方の自動承認を有効または無効にするブール値、または詳細な制御のためのapproveRequestとapproveResponseプロパティを持つオブジェクトです。正確なURL、グロブパターン、またはワイルドカードを使用できます。
URL自動承認の例
{
"chat.tools.urls.autoApprove": {
"https://www.example.com": false,
"https://*.contoso.com/*": true,
"https://example.com/api/*": {
"approveRequest": true,
"approveResponse": false
}
}
ツールの確認をリセットする
保存されているすべてのツールの承認をクリアするには、コマンドパレット (⇧⌘P (Windows, Linux Ctrl+Shift+P)) からChat: Reset Tool Confirmationsコマンドを使用します。
ツールのパラメーターを編集する
ツールが実行される前に、入力パラメーターを確認および編集できます。
-
ツールの確認ダイアログが表示されたら、ツール名の隣にあるシェブロンを選択して詳細を展開します。
-
必要に応じて、ツールの入力パラメーターを編集します。
-
変更されたパラメーターでツールを実行するには、許可を選択します。
ターミナルコマンド
エージェントは、タスクを完了するためにワークフローの一部としてターミナルコマンドを使用する場合があります。エージェントがターミナルコマンドを実行することを決定した場合、VS Code内の統合ターミナルでそれらを実行するために組み込みターミナルツールを使用します。
チャットの会話で、エージェントは実行したコマンドを表示します。コマンドの隣にある出力の表示 (>) を選択すると、チャット内でコマンドの出力をインラインで表示できます。ターミナルを表示を選択すると、統合ターミナルで完全な出力を表示することもできます。

実験的な chat.tools.terminal.outputLocation 設定を使用して、ターミナルコマンドの出力が表示される場所を構成できます。チャットのインライン、統合ターミナル。
ターミナルペインでは、エージェントがチャットセッションで使用したターミナルの一覧を確認できます。ターミナルリストのチャットアイコンによって、エージェントのターミナルを区別することもできます。

ターミナルコマンドを自動承認する
どのターミナルコマンドが自動承認されるかを、chat.tools.terminal.autoApprove 設定を使用して構成できます。許可されたコマンドと拒否されたコマンドの両方を指定できます。
- コマンドを
trueに設定すると、自動承認されます。 - コマンドを
falseに設定すると、常に承認が必要です。 - 正規表現を使用するには、パターンを
/で囲みます。
例えば
{
// Allow the `mkdir` command
"mkdir": true,
// Allow `git status` and commands starting with `git show`
"/^git (status|show\\b.*)$/": true,
// Block the `del` command
"del": false,
// Block any command containing "dangerous"
"/dangerous/": false
}
デフォルトでは、パターンは個々のサブコマンドに一致します。コマンドが自動承認されるためには、すべてのサブコマンドがtrueのエントリと一致し、falseのエントリと一致しない必要があります。
高度なシナリオでは、matchCommandLineプロパティを持つオブジェクト構文を使用して、個々のサブコマンドではなく、コマンドライン全体に一致させます。
関連設定
- chat.tools.terminal.enableAutoApprove: 自動承認機能を無効にする
- chat.tools.terminal.blockDetectedFileWrites (実験的): ファイル書き込みの検出 (実験的)
- chat.tools.terminal.ignoreDefaultAutoApproveRules (実験的): すべてのデフォルトルール(許可およびブロック)を無効にし、すべてのルールを完全に制御できるようにします。
ターミナルコマンドの自動承認は最善の努力の保護を提供し、エージェントが悪意を持って動作していないことを前提としています。ターミナルの自動承認を有効にすると、一部のコマンドが通過する可能性があるため、プロンプトインジェクションから身を守ることが重要です。検出が失敗する可能性のある例をいくつか示します。
- VS CodeはPowerShellとbashのtree-sitterグラマーを使用してサブコマンドを抽出するため、これらのグラマーが検出しない場合、パターンは検出されません。
- VS Codeはzshまたはfishのグラマーがないためbashグラマーを使用するため、一部のサブコマンドは検出されません。
- ファイル書き込みの検出は現在最小限であるため、ファイル編集エージェントツールを使用しても不可能なターミナルを使用してファイルに書き込むことが可能になる場合があります。
ツールセットでツールをグループ化する
ツールセットは、プロンプトで単一のエンティティとして参照できるツールのコレクションです。ツールセットは、関連するツールを整理し、チャットプロンプト、プロンプトファイル、およびカスタムチャットエージェントで使いやすくするのに役立ちます。組み込みツールのいくつかは、#editや#searchなどの事前定義されたツールセットの一部です。
ツールセットを作成する
ツールセットを作成するには
-
コマンドパレットからChat: Configure Tool Setsコマンドを実行し、Create new tool sets fileを選択します。
または、チャットビュー > **ツールセット** > **新しいツールセットファイルを作成**で**チャットを構成**を選択します。

-
開かれた
.jsoncファイルでツールセットを定義します。ツールセットの構造は次のとおりです。
{ "reader": { "tools": ["changes", "codebase", "problems", "usages"], "description": "Tools for reading and gathering context", "icon": "book" } }ツールセットのプロパティ
tools: ツールの名前の配列(組み込みツール、MCPツール、または拡張機能ツール)description: ツールピッカーに表示される簡単な説明icon: ツールセットのアイコン(製品アイコン参照を参照)
ツールセットを使用する
プロンプトで#の後にツールセット名を入力して、ツールセットを参照します。
"コードベースのセキュリティ問題の分析 #reader""DB接続文字列はどこで定義されていますか? #search"
ツールピッカーでは、ツールセットは関連ツールの折りたたみ可能なグループとして利用できます。ツールセット全体を選択または選択解除することで、複数の関連ツールを一度にすばやく有効または無効にできます。
よくある質問
どのツールが利用可能かを知るには?
チャット入力フィールドに#と入力すると、利用可能なすべてのツールのリストが表示されます。チャットのツールピッカーを使用して、アクティブなツールのリストを表示および管理することもできます。
「リクエストあたりのツール数が128を超えられません」というエラーが発生しました。
チャットリクエストでは、一度に最大128個のツールが有効になります。リクエストあたりのツール数が128個を超えたというエラーが表示された場合は、
-
チャットビューのツールピッカーを開き、ツールまたはMCPサーバー全体を選択解除して、数を減らしてください。
-
または、github.copilot.chat.virtualTools.threshold設定を使用して仮想ツールを有効にし、大規模なツールセットを自動的に管理します。
エージェントがコマンドプロンプトをターミナルシェルとして使用しないのはなぜですか?
エージェントは、cmdの場合を除き、ターミナルとして構成されているシェルを使用します。これは、シェル統合がコマンドプロンプトでサポートされていないため、エージェントがターミナル内で何が起こっているかについての可視性が非常に限られているためです。コマンドが実行されているか、完了したかの直接の信号を受け取る代わりに、エージェントはタイムアウトに依存し、ターミナルがアイドル状態になるのを待って続行する必要があります。これにより、遅く不安定なエクスペリエンスになります。
それでも、chat.tools.terminal.terminalProfile.windows設定を使用してエージェントをコマンドプロンプトで使用するように構成できますが、PowerShellを使用する場合と比較して、エクスペリエンスは劣ります。
"chat.tools.terminal.terminalProfile.windows": {
"path": "C:\\WINDOWS\\System32\\cmd.exe"
}
すべてのツールとターミナルコマンドを自動承認できますか?
この設定は、潜在的に破壊的なアクションを含む、すべての手動承認を無効にします。これは重要なセキュリティ保護を削除し、攻撃者がマシンを侵害しやすくします。この設定を有効にするのは、その影響を理解している場合にのみ行ってください。詳細については、セキュリティドキュメントを参照してください。
すべてのツールとターミナルコマンドがユーザーの確認なしに実行されるようにするには、chat.tools.global.autoApprove設定を有効にします。この設定は、すべてのワークスペース全体でグローバルに適用されます!
ツールとチャット参加者の違いは何ですか?
チャット参加者は、チャットでドメイン固有の質問をできるようにする専門的なアシスタントです。チャット参加者は、チャットリクエストを渡すドメインエキスパートのようなもので、残りを処理します。
ツールは、特定のタスクに貢献し実行するために、エージェントフローの一部として呼び出されます。1つのチャットリクエストに複数のツールを含めることができますが、一度にアクティブにできるチャット参加者は1人だけです。
独自のツールを作成できますか?
はい。2つの方法でツールを作成できます。
- VS Code拡張機能の開発: Language Model Tools APIを使用してツールを提供する。
- MCPサーバーの作成: ツールを提供する。MCP開発者ガイドを参照してください。