チャットでツールを使用する
ツールは、Visual Studio Codeのエージェントを拡張し、コードの検索、コマンドの実行、Webコンテンツの取得、APIの呼び出しなどの特定タスクを達成するための特化型機能を提供します。VS Codeは、組み込みツール、Model Context Protocol (MCP) ツール、および拡張機能ツールの3種類のツールをサポートしています。
ツールの種類やエージェントループにおけるツールの仕組みの背景については、ツールの概念を参照してください。
この記事では、チャットプロンプトでツールを使用する方法と、ツール呼び出しを管理する方法について説明します。エージェントがツール呼び出しの承認を要求する方法や、その自律性のレベルを制御するには、承認と権限の管理を参照してください。
チャットでツールを有効にする
チャットでツールを使用する前に、チャットビューでそれらを有効にする必要があります。ツールピッカーを使用すると、リクエストごとにツールを有効または無効にすることができます。ツールを追加するには、MCPサーバーのインストールまたは、ツールを提供する拡張機能を行います。
結果を向上させるために、プロンプトに関連するツールのみを選択してください。
ツールピッカーにアクセスするには
-
チャットビューを開き、エージェントピッカーから Agent を選択します。
-
チャット入力フィールドの Configure Tools ボタンを選択します。

-
ツールを選択または選択解除して、現在のリクエストで使用できるツールを制御します。
検索ボックスを使用して、ツールの一覧をフィルター処理します。
プロンプトファイルやカスタムエージェントでチャットをカスタマイズすると、特定のリクエストやモードで使用できるツールを指定できます。ツールリストの優先順位についての詳細をご覧ください。
プロンプトでツールを使用する
エージェントを使用する場合、エージェントはプロンプトとリクエストのコンテキストに基づいて、有効なツールの中から使用するツールを自動的に決定します。エージェントは、タスクを達成するために必要に応じて関連するツールを自律的に選択し、呼び出します。
また、プロンプトに # と続けてツール名を入力することで、ツールを明示的に参照することもできます。これは、特定のツールが確実使用されるようにしたい場合に便利です。チャット入力フィールドに # と入力すると、組み込みツール、インストール済みサーバーからのMCPツール、拡張機能ツール、ツールセットなど、利用可能なツールのリストが表示されます。
明示的なツール参照の例
"Node.jsの最新バージョンは何ですか #web""Next.jsのルーティングはどのように機能しますか? #web""#problems の問題を修正する""認証フローを説明してください #codebase"
デフォルトでは、ツール呼び出しの詳細情報はチャット会話内で折りたたまれています。チャット内のツールの概要行を選択して展開するか、 chat.agent.thinking.collapsedTools (実験的機能)を使用してグループ化の動作を変更できます:ツール呼び出しを個別に維持するには off、利用可能な場合は思考とグループ化するには withThinking、常にグループ化するには always を使用します。 chat.agent.thinkingStyle が collapsed に設定されている場合、推論とグループ化されたツール呼び出しは個別の折りたたみ可能なセクションに表示されることがあります。
ツールのパラメータを編集する
ツールが実行される前に、入力パラメータを確認および編集できます
-
ツールの確認ダイアログが表示されたら、ツール名の横にあるシェブロン(矢印)を選択して詳細を展開します。
-
必要に応じて、ツールの入力パラメータを編集します。
-
変更されたパラメータでツールを実行するには、Allow(許可)を選択します。
ツールセットでツールをグループ化する
ツールセットは、プロンプト内で単一のエンティティとして参照できるツールのコレクションです。ツールセットを使用すると、関連するツールを整理し、チャットプロンプト、プロンプトファイル、およびカスタムチャットエージェントで使いやすくすることができます。組み込みツールの一部は、#editや#searchなどの事前定義されたツールセットの一部です。
ツールセットを作成する
ツールセットを作成するには
-
コマンドパレットから Chat: Configure Tool Sets コマンドを実行し、Create new tool sets file を選択します。
または、チャットビューのエリプシス(...)メニューを選択し、Tool Sets を選択してから、Create new tool sets file を選択します。
-
開いた
.jsoncファイルでツールセットを定義します。ツールセットには次の構造があります
{ "reader": { "tools": ["search/changes", "search/codebase", "read/problems", "search/usages"], "description": "Tools for reading and gathering context", "icon": "book" } }ツールセットのプロパティ
tools: ツール名の配列(組み込みツール、MCPツール、または拡張機能ツール)description: ツールピッカーに表示される簡単な説明icon: ツールセットのアイコン(プロダクトアイコンのリファレンスを参照)
ツールセットを使用する
プロンプトで # に続けてツールセット名を入力することで、ツールセットを参照します
"コードベースのセキュリティ上の問題点を分析する #reader""DBの接続文字列はどこで定義されていますか? #search"
ツールピッカーでは、ツールセットは関連するツールの折りたたみ可能なグループとして利用できます。ツールセット全体を選択または選択解除することで、関連する複数のツールを一度に素早く有効または無効にできます。
ターミナルコマンドを実行する
すべての組み込みツールの中で、ターミナルツールは最も頻繁に使用されるものの1つです。エージェントは、依存関係のインストール、ビルドの実行、テストの実行など、ワークフローの一部としてコマンドを実行するためにこれを使用します。ターミナルコマンドは環境を変更する可能性があるため、VS Codeでは、前述の承認の動作を基にして、それらの確認、実行、および監視のための追加のコントロールを提供しています。
エージェントがコマンドの実行を決定すると、組み込みのターミナルツールを使用して、VS Code内の統合ターミナルでそれを実行します。
チャット会話の中で、エージェントは実行したコマンドを表示します。コマンドの横にある Show Output(>)を選択すると、チャット内にインラインでコマンドの出力を表示できます。また、Show Terminal を選択すると、統合ターミナルで完全な出力を表示することもできます。

実験的な chat.tools.terminal.outputLocation 設定を使用して、ターミナルコマンドの出力が表示される場所(チャット内のインライン、または統合ターミナル内)を設定します。
ターミナルコマンドをバックグラウンドで継続する
開発サーバーの起動やウォッチモードでのビルドの実行など、長時間実行されるターミナルコマンドをエージェントが実行する場合、そのコマンドをバックグラウンドに送ることができます。これにより、エージェントはコマンドの完了を待たずに他のタスクを続行できます。
コマンドの実行中、チャット会話内のターミナルコマンドの横に Continue in Background ボタンが表示されます。このボタンを選択すると、コマンドがバックグラウンドに移動します。コマンドの実行は継続され、エージェントは後でその出力を確認したり、他のタスクにターミナルを使用したりできます。
エージェントは、ターミナルコマンドの実行時にタイムアウトを指定することもできます。タイムアウトに達すると、エージェントはコマンドの待機を停止し、これまでに収集された出力を返します。エージェントが指定したタイムアウト値を適用するかどうかを制御するには、 chat.tools.terminal.enforceTimeoutFromModel 設定を使用します。
エージェントは、ユーザーの操作なしでコマンドを直接バックグラウンドで実行することも選択できます。表示していないバックグラウンドターミナルは、コマンドの終了時に自動的にクリーンアップされるため、長時間のセッションで古いターミナルが蓄積するのを防ぎます。バックグラウンドターミナルを表示し、コマンド完了後も開きままにするには、チャットのツール呼び出しヘッダーにある Show リンクを選択します。ターミナルがクリーンアップされた後でも、ターミナル出力はチャット会話内に表示されたままになります。
ターミナルコマンドを自動的に承認したり、エージェントコマンドのファイルシステムおよびネットワークアクセスを制限したりする方法については、承認と権限の管理を参照してください。
よくある質問
利用可能なツールを確認するにはどうすればよいですか?
チャット入力フィールドに # と入力すると、利用可能なすべてのツールのリストが表示されます。また、チャット内のツールピッカーを使用して、アクティブなツールのリストを表示および管理することもできます。
「1つのリクエストあたり128個を超えるツールを持つことはできません (Cannot have more than 128 tools per request)」というエラーが表示されます。
チャットリクエストで一度に有効にできるツールは最大128個までです。1リクエストあたりのツール数が128個を超えているというエラーが表示された場合は、
-
チャットビューでツールピッカーを開き、いくつかのツールまたはMCPサーバー全体を選択解除して数を減らしてください。
-
または、 github.copilot.chat.virtualTools.threshold 設定で仮想ツールを有効にして、大規模なツールセットを自動的に管理します。
エージェントが設定したターミナルシェルを使用しないのはなぜですか?
エージェントは、Windows上の cmd(コマンドプロンプト)とmacOS/Linux上の sh を除き、ターミナルのデフォルトとして設定したシェルを使用します。これは、これらのシェルではシェル統合がサポートされていないためです。つまり、エージェントはターミナル内部で何が起きているかをほとんど把握できません。コマンドが実行されているか、実行が完了したかについての直接的なシグナルを受け取る代わりに、エージェントはタイムアウトやターミナルのアイドル状態の監視に依存して処理を続ける必要があります。これにより、動作が遅く不安定なエクスペリエンスになってしまいます。
ターミナルプロファイル設定を使用して、エージェントにこれらのシェルを使用するように設定することもできますが、WindowsでPowerShellを使用したり、macOS/Linuxで bash/zsh を使用したりする場合と比較して、劣ったエクスペリエンスになります。
- chat.tools.terminal.terminalProfile.windows - Windowsでのシェルをオーバーライドする
- chat.tools.terminal.terminalProfile.osx - macOSでのシェルをオーバーライドする
- chat.tools.terminal.terminalProfile.linux - Linuxでのシェルをオーバーライドする
自作のツールを作成できますか?
はい。ツールを作成するには、次の2つの方法があります
- 言語モデルツール API (Language Model Tools API)を使用してツールを提供するVS Code拡張機能を開発する
- ツールを提供するMCPサーバーを作成する。MCP開発者ガイドをご覧ください
関連リソース
- チャットツールのリファレンス
- エージェントフック (Agent hooks) - ツールのライフサイクルイベントでカスタムコマンドを実行する
- VS Code で AI を使用するためのセキュリティに関する考慮事項