VS Code でエージェント モードを使用する
Visual Studio Code のチャット エージェント モードを使用すると、自然言語で高レベルのタスクを指定し、AI にリクエストについて自律的に推論させ、必要な作業を計画し、コードベースに変更を適用させることができます。エージェント モードは、コード編集とツールの呼び出しを組み合わせて、指定したタスクを達成します。リクエストを処理する際に、編集とツールの結果を監視し、発生した問題を解決するために反復処理を行います。
前提条件
- Visual Studio Code の最新バージョンをインストールします
- Copilotへのアクセス。Copilot無料プランでは、月ごとの補完とチャットインタラクションの制限が適用されます。
なぜエージェント モードを使用するのか?
エージェント モードは、プロジェクト内の複数のファイルにわたって自律的な編集を行うために最適化されています。特に、コード編集だけでなく、ツールやターミナル コマンドの呼び出しも必要とする複雑なタスクに役立ちます。エージェント モードを使用して、以下を行うことができます。
- 「アプリをリファクタリングして Redis キャッシュを使用するようにする」など、コードベースの一部をリファクタリングする。
- 「認証に OAuth を使用してアプリにログイン フォームを追加する」など、新しい機能を計画して実装する。
- 「アプリを React から Vue.js に移行する」など、コードベースを新しいフレームワークに移行する。
- 「Swift のフロントエンドと Node.js のバックエンドを使用して食事計画 Web アプリを作成する」など、複雑なタスクの実装計画を生成する。
- 「ソーシャル メディア共有機能を追加する」など、高レベルの要件を定義する。
エージェント モードは、タスクが明確に定義されておらず、ターミナル コマンドやツールの実行も必要になる可能性があるコーディング タスクに特に役立ちます。エージェント モードは、リクエストを達成するために、関連するコンテキストとタスクを自律的に決定します。また、構文エラーやテストの失敗などの中間的な問題を解決するために、複数回反復することもできます。
エージェント モードと Copilot コーディング エージェントの比較
VS Code は 2 つの自律的なコーディング体験を提供します。エージェント モードがエディター内で直接対話的な開発を提供するのに対し、Copilot コーディング エージェントは GitHub 上で独立して動作し、バックグラウンドで機能を実装します。
機能 | エージェントモード | Copilot コーディング エージェント |
---|---|---|
実行場所 | VS Code エディター | GitHub クラウド |
独立性 | ユーザーの対話と反復を伴う | 完全に自律的 |
出力 | ファイルを直接編集 | プル リクエストを作成 |
最適な用途 | 対話的な開発、即時のフィードバック | 明確に定義されたタスク、バックグラウンド作業 |
このドキュメントでは、エージェント モードについて説明します。Copilot コーディング エージェントの詳細については、そのドキュメントを参照してください。
VS Code でエージェント モードを有効にする
エージェント モードは、VS Code 1.99 から利用できます。
VS Code でエージェント モードを有効にするには、chat.agent.enabled 設定を有効にします。
エージェント モードを一元管理する
組織内でデバイス管理を使用してエージェント モードを一元的に有効または無効にするには、エンタープライズ ドキュメントの「VS Code 設定の一元管理」を確認してください。
エージェント モードに関連する以下の設定を一元管理できます
-
エージェント モードの有効化または無効化: chat.agent.enabled
-
サードパーティ拡張機能によって提供されるツールの使用を有効または無効にする: chat.extensionTools.enabled
-
エージェント モードのツールの自動承認を有効または無効にする: chat.tools.autoApprove
エージェント モードを使用する
エージェント モードでは、AI は自律的に動作し、プロンプトに関連するコンテキストを決定します。
開始するには、以下の手順に従ってください
-
チャット ビューを開き (⌃⌘I (Windows、Linux Ctrl+Alt+I))、チャット モード セレクターから Agent を選択します。
-
チャット入力フィールドに編集を行うためのプロンプトを入力し、送信 () を選択して送信します。
高レベルの要件を指定でき、どのファイルで作業するかを指定する必要はありません。エージェント モードでは、AI が関連するコンテキストと編集するファイルを自律的に決定します。
開始するには、これらのプロンプト例をいくつか試してみてください
React と Node.js を使用して食事計画 Web アプリを作成する
ソーシャル メディア共有機能を追加する
現在の認証を OAuth に置き換える
-
エージェント モードは、さまざまなタスクを達成するために複数のツールを呼び出す場合があります。オプションで、ツール アイコンを選択して、リクエストに応答するために使用できるツールを設定します。
ヒントプロンプトで
#
の後にツール名を入力して、ツールを直接参照することもできます。これは、すべてのチャット モード (質問、編集、エージェント モード) で行うことができます。 -
ツールの呼び出しとターミナル コマンドを確認します。
ターミナル コマンドまたは組み込み以外のツールを実行する前に、Copilot は続行の確認を求めます。これは、ツールがマシン上でローカルに実行され、ファイルやデータを変更する可能性があるためです。
続行ボタンのドロップダウン オプションを使用して、現在のセッション、ワークスペース、または将来のすべての呼び出しに対して特定のツールを自動的に確認します。ツールの承認を管理し、すべてのツールの呼び出しを承認する方法を学びます。
プロジェクトで
tasks.json
にタスクが設定されている場合、エージェント モードは適切なタスクを実行しようとします。たとえば、ビルド タスクを定義した場合、エージェント モードはアプリケーションを実行する前にビルド タスクを実行します。github.copilot.chat.agent.runTasks 設定でワークスペース タスクの実行を有効または無効にします。 -
オプションで、ツールを実行する前に入力パラメーターを確認および編集します。
ツール名の横にあるシェブロンを選択して、その詳細と入力パラメーターを表示します。ツールを実行する前に入力パラメーターを編集できます。
-
VS Code は、コード編集とターミナル コマンドの問題を検出し、それらを解決するために反復処理を行います。
github.copilot.chat.agent.autoFix 設定を有効にして、生成されたコード変更の問題を自動的に診断および修正します。この設定はデフォルトで有効になっています。
たとえば、エージェント モードはコード編集の結果として単体テストを実行する場合があります。テストが失敗した場合、テスト結果を使用して問題を解決します。
エージェント モードは、問題や問題を解決するために複数回反復します。chat.agent.maxRequests 設定は、エージェント モードが続行できるかどうかを尋ねる前に実行できるリクエストの最大数を制御します。
-
チャット リクエストが処理されると、提案されたコード編集がエディターに直接表示されることに注意してください。
チャット ビューで変更されたファイルの一覧を表示できます。エディター オーバーレイ コントロールを使用すると、提案された編集間を移動できます。
-
提案された編集を確認し、提案された編集を受け入れるか破棄するかします。
-
編集を洗練したり、追加機能を実装したりするために、コード変更の反復を続けます。
エージェント モード ツール
エージェント モードは、ユーザー リクエストの処理中に特殊なタスクを達成するためにツールを使用します。このようなタスクの例としては、ディレクトリ内のファイルのリスト表示、ワークスペース内のファイルの編集、ターミナル コマンドの実行、ターミナルからの出力の取得などがあります。
エージェント モードは、次のツールを使用できます
- 組み込みツール
- MCP ツール
- 拡張機能によって提供されるツール
リクエストに応答するために使用できるツールを表示および管理できます。チャット ビューのツール アイコンを選択して、エージェント モードで利用可能なツールを表示および選択します。
ツールの結果に基づいて、エージェントは全体のリクエストを達成するために他のツールを呼び出す場合があります。たとえば、コード編集によってファイルに構文エラーが発生した場合、エージェントは別のアプローチを検討し、別のコード変更を提案する場合があります。
チャット リクエストでは、一度に最大 128 個のツールを有効にできます。128 個を超えるツールを選択している場合は、ツール ピッカーでいくつかのツールを選択解除してツールの数を減らすか、仮想ツールが有効になっていることを確認してください (github.copilot.chat.virtualTools.threshold)。
ツールセットを定義する
ツールセットは、チャットで使用できるツールのコレクションです。ツールセットは、個々のツールを使用するのと同じ方法で使用できます。たとえば、エージェント モードのツール ピッカーでツールセットを選択するか、プロンプトで #
の後にツールセット名を入力して直接参照します。
ツールセットを使用すると、関連するツールをグループ化でき、チャット プロンプト、プロンプト ファイル、またはカスタム チャット モードで簡単に使用できます。これは、MCP サーバーや拡張機能から多くのツールをインストールしている場合に特に役立ちます。
ツールセットを作成するには、チャット ビューの チャットの設定 ボタンを選択し、ツールセット を選択してから、新しいツールセット ファイル を選択します。または、コマンド パレット (⇧⌘P (Windows、Linux Ctrl+Shift+P)) から Chat: Configure Tool Sets コマンドを使用することもできます。
ツールセット ファイルは、ユーザー プロファイルに保存される .jsonc
ファイルで、エージェント モード ツールのリストが含まれています。ツールセットには次の構造があります
<tool set name>
: ツールセットの名前。ツール ピッカーやプロンプトでツールセットを参照するときに表示されます。tools
: ツールセットに含まれるツール名のリスト。ツールは、組み込みツール、MCP ツール、または拡張機能によって提供されるツールにすることができます。description
: ツールセットの簡単な説明。この説明は、ツール ピッカーでツールセット名と一緒に表示されます。icon
: ツールセットのアイコン。値は製品アイコンリファレンスで見つけることができます。
次のコード スニペットは、reader
という名前のツールセットを定義するツールセット ファイルの例を示しています。
{
"reader": {
"tools": [
"changes",
"codebase",
"fetch",
"findTestFiles",
"githubRepo",
"problems",
"usages"
],
"description": "description",
"icon": "tag"
}
}
ツールの承認を管理する
エージェント モードがツールまたはターミナル コマンドを実行する前に、実行の確認を求めます。これは、ファイルやデータを変更したり、破壊的なアクションを実行したりする可能性があるためです。
チャット ビューで、ツールまたはターミナル コマンドの呼び出しが発生した場合、続行 ボタンのドロップダウン オプションを使用して、現在のセッション、ワークスペース、または将来のすべての呼び出しに対して特定のツールを自動的に確認します。
コマンド パレットの Chat: Reset Tool Confirmations コマンドを使用して、ツールの確認をリセットできます。
すべてのツールとコマンドを自動承認する (実験的)
すべてのツールとターミナル コマンドを自動承認したい場合は、実験的な chat.tools.autoApprove 設定を使用できます。これにより、すべてのツールとコマンドの呼び出しが自動的に承認され、言語モデルがツールを実行したいときに VS Code は確認を求めません。
この設定を有効にすると、モデルが実行しようとする潜在的に破壊的なアクションをキャンセルする機会がなくなります。
強化された境界として、リモート環境に接続している場合にのみ chat.tools.autoApprove を設定することを選択できます。これをユーザーレベルの設定ではなく、リモート設定として設定する必要があります。ローカル マシンの一部であるリモート環境 (dev コンテナーなど) や、資格情報にアクセスできるリモート環境は、依然としてさまざまなレベルのリスクをもたらすことに注意してください。
ターミナル コマンドを自動承認する
エージェント モードがターミナル コマンドを実行する前に、実行の確認を求めます。どのターミナル コマンドが自動承認されるかをより詳細に制御したい場合は、chat.tools.terminal.autoApprove 設定を使用します。
この設定では、許可されたコマンドと拒否されたコマンドの両方を 1 つの設定で指定できます
- コマンドを
true
に設定すると、確認なしで自動的に承認されます - コマンドを
false
に設定すると、常に明示的な承認が必要になります - コマンドを
null
に設定すると、そのコマンドのデフォルトの動作が解除されます - パターンを
/
文字で囲んで正規表現を使用します
例
{
"mkdir": true,
"echo": true,
"/^git (status|show)\\b/": true,
"rm": false,
"del": false,
"/dangerous/": false
}
デフォルトでは、コマンドと正規表現は完全なコマンド ライン内のすべてのサブコマンドに対して評価されるため、foo && bar
は、自動承認されるために foo
と bar
の両方が true
のエントリに一致し、false
のエントリに一致してはなりません。これはインライン コマンドにも適用されます (例: echo $(rm file)
)。
高度なシナリオでは、オブジェクト構文を使用して、パターンが個々のサブコマンドまたは完全なコマンド ラインに対して一致するかどうかを制御できます
{
// Broad rule to block any command line that contains ".ps1"
"/\\.ps1\\b/i": { "approve": false, "matchCommandLine": true }
}
matchCommandLine
プロパティは、一致する動作を決定します
false
(デフォルト): サブコマンドとインライン コマンドに対して一致します。たとえば、foo && bar
の場合、foo
とbar
の両方が一致する必要があります。true
: 完全なコマンド ラインに対して一致します。たとえば、foo && bar
は単一の文字列として扱われます。
ターミナル コマンドが自動承認されるには、サブコマンドとコマンド ラインの両方が明示的に拒否されてはならず、すべてのサブコマンドまたは完全なコマンド ラインのいずれかが承認される必要があります。
編集を承諾または破棄する
Copilot は、チャット ビューの変更されたファイルの一覧に編集されたファイルをリストします。保留中の編集があるファイルには、エクスプローラー ビューとエディター タブにもインジケーターが表示されます。
エディター オーバーレイ コントロールを使用すると、上 () と 下 () コントロールを使用して、提案された編集間を移動できます。特定のファイルの編集を承諾または拒否するには、保持 または 元に戻す ボタンを使用します。
エディターまたはチャット ビューの 保持 または 元に戻す コントロールを使用して、個々のまたはすべての提案された編集を承諾または拒否します。
chat.editing.autoAcceptDelay 設定を使用すると、提案された編集が自動的に承諾されるまでの遅延を設定できます。エディター オーバーレイ コントロールにカーソルを合わせると、自動承諾のカウントダウンをキャンセルできます。
VS Code を閉じると、保留中の編集の状態が記憶されます。VS Code を再度開くと、保留中の編集が復元され、引き続き編集を承諾または破棄できます。
以前のチャット リクエストを編集する (実験的)
チャット リクエストを編集する機能は、VS Code バージョン 1.102 から利用可能で、現在は実験的な機能です。
アクティブなチャット セッションで以前のチャット リクエストを編集できます。これは、プロンプトを洗練したり、間違いを修正したりする場合に役立ちます。チャット リクエストの編集は、リクエストを元に戻し、編集されたプロンプトで新しいリクエストを送信するのと同じです。
以前のチャット リクエストを編集すると、次の手順が実行されます
- 編集されたリクエストと、それ以降のすべてのリクエストと応答が会話履歴から削除されます。
- これらのリクエストによって行われたすべての編集は、リクエストが行われる前の状態に戻されます。
- 編集されたリクエストが会話履歴に追加され、新しい応答のために言語モデルに送信されます。
chat.editRequests 設定で、以前のチャット リクエストの編集を設定できます
inline
: チャット ビューでリクエストを選択して、その場で編集可能にします。Escape を使用して編集モードを終了します。hover
: チャット リクエストにカーソルを合わせ、編集アイコン (鉛筆) を選択して、その場で編集可能にします。Escape を使用して編集モードを終了します。input
: チャット リクエストにカーソルを合わせ、編集アイコン (鉛筆) を選択して、チャット入力フィールドでリクエストを編集します。none
: チャット ビューでのチャット リクエストの編集を無効にします。
チェックポイントを使用して編集を元に戻す (プレビュー)
チャット チェックポイントは、ワークスペースの状態を以前の時点に戻す方法を提供し、チャットのやり取りによって複数のファイルに変更が加えられた場合に特に役立ちます。
チェックポイントが有効になっている場合、VS Code はチャットのやり取り中の重要なポイントでファイルのナップショットを自動的に作成し、チャット リクエストによって行われた変更が期待どおりでない場合や、別のアプローチを試したい場合に、既知の良好な状態に戻すことができます。
チェックポイントを有効にするには、chat.checkpoints.enabled 設定を構成します。
チャットでのチェックポイントの使用について詳しく学びます。
コーディング スタイルに従った AI 編集を取得するために指示を使用する
コーディング スタイル、好みのフレームワーク、その他の設定に従った AI 生成のコード編集を取得するには、指示ファイルを使用できます。指示ファイルを使用すると、コーディング スタイルと設定を Markdown ファイルに記述でき、AI はこれを使用して要件に一致するコード編集を生成します。
指示ファイルを手動でチャット プロンプトにコンテキストとして添付するか、指示ファイルが自動的に適用されるように設定できます。
次のコード スニペットは、コーディング スタイルと設定を記述する指示ファイルの例を示しています
---
applyTo: "**"
---
# Project general coding standards
## Naming Conventions
- Use PascalCase for component names, interfaces, and type aliases
- Use camelCase for variables, functions, and methods
- Prefix private class members with underscore (_)
- Use ALL_CAPS for constants
## Error Handling
- Use try/catch blocks for async operations
- Implement proper error boundaries in React components
- Always log errors with contextual information
指示ファイルの使用の詳細については、こちらをご覧ください。
設定
次のリストには、エージェント モードに関連する設定が含まれています。設定エディター (⌘, (Windows、Linux Ctrl+,)) を通じて設定を構成できます。
- chat.agent.enabled: エージェント モードを有効または無効にします (デフォルト:
false
、VS Code 1.99 以降が必要) - chat.agent.maxRequests: エージェント モードでチャットが行えるリクエストの最大数 (デフォルト: Copilot Free ユーザーは 5、その他のユーザーは 15)
- github.copilot.chat.agent.runTasks: エージェント モードを使用するときにワークスペース タスクを実行します (デフォルト:
true
) - chat.mcp.discovery.enabled: 他のツールで構成された MCP サーバーの検出を有効または無効にします (デフォルト:
true
) - github.copilot.chat.agent.autoFix: 生成されたコード変更の問題を自動的に診断および修正します (デフォルト:
true
) - chat.tools.autoApprove (実験的): すべてのツールを自動的に承認します (デフォルト:
false
)
よくある質問
編集モードの代わりにエージェント モードを使用するのはなぜですか?
編集モードとエージェント モードのどちらを選択するかは、次の基準を考慮してください
- 編集範囲: エージェント モードは、関連するコンテキストと編集するファイルを自律的に決定します。編集モードでは、自分でコンテキストを指定する必要があります。
- タスクの複雑さ: エージェント モードは、コード編集だけでなく、ツールやターミナル コマンドの呼び出しも必要とする複雑なタスクに適しています。
- 期間: エージェント モードはリクエストを処理するために複数のステップを伴うため、応答を得るのに時間がかかる場合があります。たとえば、関連するコンテキストと編集するファイルを決定し、アクションの計画を決定するなどです。
- 自己修復: エージェント モードは、生成された編集の結果を評価し、中間的な問題を解決するために複数回反復する場合があります。
- リクエスト クォータ: エージェント モードでは、タスクの複雑さによっては、1 つのプロンプトでバックエンドに多数のリクエストが発生する可能性があります。
エージェント モードの代わりに Copilot コーディング エージェントを使用するのはいつですか?
Copilot コーディング エージェントは、バックグラウンドで独立して動作できる、明確に定義されたタスクに使用します。開発プロセスに関与し続け、変更を迅速に反復したい場合は、エージェント モードを使用します。
「リクエストごとに 128 個を超えるツールを持つことはできません」というエラーが表示されます。
チャット リクエストでは、一度に最大 128 個のツールを有効にできます。128 個を超えるツールを選択している場合は、チャット ビューのツール ピッカーでいくつかのツールを選択解除してツールの数を減らすか、仮想ツールが有効になっていることを確認してください (github.copilot.chat.virtualTools.threshold)。