VS Codeでエージェントモードを使用する
Visual Studio Codeのチャットエージェントモードを使用すると、自然言語で高レベルのタスクを指定し、AIに要求を自律的に推論させ、必要な作業を計画させ、コードベースに変更を適用させることができます。エージェントモードは、コード編集とツール呼び出しの組み合わせを使用して、指定したタスクを達成します。要求を処理する際に、編集とツールの結果を監視し、発生する問題を解決するために反復します。
前提条件
- Visual Studio Code の最新バージョンをインストールします
- Copilotへのアクセス。Copilot無料プランでは、月ごとの補完とチャットインタラクションの制限が適用されます。
なぜエージェントモードを使用するのか?
エージェントモードは、以下のシナリオに最適化されています。
- 高レベルの要件またはあまり明確でない実装の詳細に基づくコーディングタスク
- プロジェクト内の複数のファイルにわたる自律的な編集
- コード編集だけでなく、ツールの呼び出しやターミナルコマンドも必要とする複雑なタスクの処理
エージェントモードは、与えられた要求を達成するために、関連するコンテキストとタスクを自律的に決定します。また、構文エラーやテスト失敗などの中間的な問題を解決するために、複数回繰り返すこともできます。
エージェントモードを使用できるタスクの例
- コードベースの一部をリファクタリングする。「Redisキャッシュを使用するようにアプリをリファクタリングする」など。
- 新しい機能を計画・実装する。「OAuthで認証するログインフォームをアプリに追加する」など。
- コードベースを新しいフレームワークに移行する。「アプリをReactからVue.jsに移行する」など。
- 複雑なタスクの実装計画を生成する。「SwiftフロントエンドとNode.jsバックエンドを使用する献立計画ウェブアプリを作成する」など。
- 高レベルの要件を定義する。「ソーシャルメディア共有機能を追加する」など。
AIを活用した開発を使用する際のセキュリティ上の考慮事項に注意することが重要です。VS CodeでAIを使用するためのセキュリティドキュメントを確認してください。
エージェントモードと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)) を開き、チャットモードセレクターからエージェントを選択します。

-
チャット入力フィールドに編集を行うためのプロンプトを入力し、送信 () を選択して送信します。
高レベルの要件を指定でき、どのファイルを操作するかを指定する必要はありません。エージェントモードでは、AIが関連するコンテキストと編集するファイルを自律的に決定します。
開始するために、いくつかの例のプロンプトを試してみてください。
ReactとNode.jsを使用して献立計画ウェブアプリを作成するソーシャルメディア共有機能を追加する現在の認証をOAuthに置き換える
-
エージェントモードは、さまざまなタスクを達成するために複数のツールを呼び出すことがあります。オプションで、ツールアイコンを選択して、要求に応答するために使用できるツールを構成します。
ヒントまた、
#の後にツール名を入力することで、プロンプト内でツールを直接参照することもできます。これはすべてのチャットモード (質問、編集、エージェントモード) で可能です。 -
ツール呼び出しとターミナルコマンドを承認する。
ターミナルコマンド、
fetchツール、または組み込み以外のツールを実行する前に、VS Codeは続行の確認を求めます。これは、ツールがローカルマシン上で実行され、ファイルやデータを変更するアクションを実行する可能性があるためです。許可ボタンのドロップダウンオプションを使用して、現在のセッション、ワークスペース、または将来のすべての呼び出しに対して特定のツールを自動的に許可します。ツールの承認を管理し、すべてのツール呼び出しを承認する方法について学びます。

プロジェクトに
tasks.jsonでタスクが構成されている場合、エージェントモードは適切なタスクを実行しようとします。たとえば、ビルドタスクを定義している場合、エージェントモードはアプリケーションを実行する前にビルドタスクを実行します。github.copilot.chat.agent.runTasks設定でワークスペースタスクの実行を有効または無効にします。 -
オプションで、ツールを実行する前にツール入力パラメータを確認し、編集します。
ツール名の横にある山括弧を選択して、その詳細と入力パラメータを表示します。ツールを実行する前に、入力パラメータを編集できます。

-
VS Codeはコード編集とターミナルコマンドの課題と問題を検出し、それらを解決するために反復します。
github.copilot.chat.agent.autoFix設定を有効にして、生成されたコード変更の課題を自動的に診断し、修正します。この設定はデフォルトで有効になっています。
たとえば、エージェントモードはコード編集の結果としてユニットテストを実行する場合があります。テストが失敗した場合、テスト結果を使用して問題を解決します。
エージェントモードは、課題や問題を解決するために複数回反復します。chat.agent.maxRequests設定は、エージェントモードが続行してもよいか尋ねる前に作成できる要求の最大数を制御します。
-
チャット要求が処理されると、提案されたコード編集がエディターに直接表示されることに注意してください。
チャットビューで変更されたファイルのリストを表示できます。エディターオーバーレイコントロールを使用すると、提案された編集間を移動できます。
注AIが生成したコード編集は、現在のワークスペース内のファイルに限定されます。
-
提案された編集を確認し、提案された編集を承認または破棄します。
-
コード変更を繰り返し、編集を洗練したり、追加機能を実装したりします。
エージェントモードツール
エージェントモードは、ユーザー要求を処理する際に、専門的なタスクを達成するためにツールを使用します。そのようなタスクの例としては、ディレクトリ内のファイルを一覧表示する、ワークスペース内のファイルを編集する、ターミナルコマンドを実行する、ターミナルから出力を取得する、などがあります。
エージェントモードは以下のツールを使用できます。
組み込みツールは、現在のワークスペース内のファイルのみを読み書きできます。
要求に応答するために使用できるツールを表示および管理できます。チャットビューのツールアイコンを選択して、エージェントモードで利用可能なツールを表示および選択します。

ツールの結果に基づいて、エージェントは全体的な要求を達成するために他のツールを呼び出すことがあります。たとえば、コード編集によってファイルに構文エラーが発生した場合、エージェントは別のアプローチを検討し、異なるコード変更を提案する可能性があります。
チャットリクエストには、一度に最大128個のツールを有効にできます。128個を超えるツールを選択している場合は、ツールピッカーでいくつかのツールを選択解除してツールの数を減らすか、仮想ツールが有効になっていることを確認してください (github.copilot.chat.virtualTools.threshold)。
ターミナルコマンド
チャット用のターミナルプロファイルを構成する
エージェントモードは、要求の処理の一部としてターミナルコマンドを実行できます。たとえば、コード編集の結果を確認するためにビルドコマンドやテストコマンドを実行する場合があります。
以下の設定で、ターミナルコマンドを実行するために使用するターミナルプロファイルを構成できます。
- Windows: chat.tools.terminal.terminalProfile.windows
- Linux: chat.tools.terminal.terminalProfile.linux
- macOS: chat.tools.terminal.terminalProfile.macos
ツールの承認を管理する
エージェントモードがツールまたはターミナルコマンドを実行する前に、その実行の確認を求めます。これは、ファイルやデータを変更したり、破壊的なアクションを実行したりする可能性があるためです。
チャットビューでツールまたはターミナルコマンドの呼び出しが発生した場合、許可ボタンのドロップダウンオプションを使用して、現在のセッション、ワークスペース、または将来のすべての呼び出しに対して特定のツールを自動的に確認します。

コマンドパレットでチャット: ツール確認のリセットコマンドを使用して、ツールの確認をリセットできます。
AIを活用した開発を使用する際のセキュリティ上の考慮事項に注意することが重要です。VS CodeでAIを使用するためのセキュリティドキュメントを確認してください。
すべてのツールとコマンドを自動承認する
chat.tools.global.autoApprove設定を有効にすると、すべてのワークスペースでツールとターミナルコマンドのすべての手動承認を無効にできます。
強化された境界として、リモート環境に接続している場合にのみchat.tools.global.autoApproveを設定することを選択できます。これをユーザーレベルの設定ではなく、リモート設定として設定することをお勧めします。開発コンテナーなどのローカルマシンの一部であるリモート環境や、資格情報にアクセスできるリモート環境は、依然として異なるレベルのリスクをもたらすことに注意してください。
この設定は重要なセキュリティ保護を無効にし、攻撃者がマシンを侵害するのをはるかに容易にします。この設定の意味を理解するために、VS CodeでAIを使用するためのセキュリティドキュメントを読んでください。
ターミナルコマンドを自動承認する
エージェントモードがターミナルコマンドを実行する前に、その実行の確認を求めます。どのターミナルコマンドを自動承認するかをより詳細に制御したい場合は、chat.tools.terminal.autoApprove設定を使用します。
この設定では、単一の構成で許可されたコマンドと拒否されたコマンドの両方を指定できます。
- コマンドを
trueに設定すると、確認なしで自動的に承認されます。 - コマンドを
falseに設定すると、常に明示的な承認が必要になります。 - コマンドを
nullに設定すると、そのコマンドのデフォルトの動作が設定解除されます。 - パターンを
/文字で囲んで正規表現を使用します。
例
{
// Allow the `mkdir` command, regardless of arguments
"mkdir": true,
// Allow `test/scripts.sh`, since this contains a `/` it will also allow `\`
// and an optional `./` or `.\` prefix
"test/scripts.sh": true,
// Allow `git status` and all commands starting with `git show`
"/^git (status|show\\b.*)$/": true,
// Block the `del` command, regardless of arguments
"del": false,
// Block any command containing the text "dangerous"
"/dangerous/": false,
// Unset the default `rm` rule to allow other rules to auto approve `rm`
// commands
"rm": null,
}
デフォルトでは、コマンドと正規表現はコマンドライン全体のすべてのサブコマンドに対して評価されるため、foo && barは、自動承認するには、trueエントリに一致するfooとbarの両方が必要であり、falseエントリに一致してはなりません。
高度なシナリオでは、オブジェクト構文を使用して、パターンが個々のサブコマンドまたはコマンドライン全体に一致するかどうかを制御できます。
{
// Broad rule to block any _command line_ that contains the text ".ps1"
"/\\.ps1\\b/i": { "approve": false, "matchCommandLine": true }
}
matchCommandLineプロパティは、一致動作を決定します。
false(デフォルト): サブコマンドとインラインコマンドに一致します。たとえば、foo && barの場合、fooとbarの両方が一致する必要があります。true: コマンドライン全体に一致します。たとえば、foo && barは単一の文字列として扱われます。
ターミナルコマンドを自動承認するには、サブコマンドとコマンドラインの両方が明示的に拒否されていない必要があり、すべてのサブコマンドまたはコマンドライン全体のいずれかが承認されている必要があります。
ツールセットを定義する
ツールセットは、チャットで使用できるツールのコレクションです。ツールセットは、個々のツールと同じ方法で使用できます。たとえば、エージェントモードのツールピッカーでツールセットを選択するか、#の後にツールセット名を入力してプロンプトでツールセットを直接参照します。

ツールセットを使用すると、関連するツールをグループ化できるため、チャットプロンプト、プロンプトファイル、またはカスタムチャットモードでの使用が容易になります。これは、MCPサーバーや拡張機能から多くのツールがインストールされている場合に特に役立ちます。
ツールセットを作成するには、チャットビューのチャットの構成ボタンを選択し、ツールセットを選択し、新しいツールセットファイルを選択します。または、コマンドパレット (⇧⌘P (Windows, Linux Ctrl+Shift+P)) からチャット: ツールセットの構成コマンドを使用できます。

ツールセットファイルは、ユーザープロファイルに保存され、エージェントモードツールのリストを含む.jsoncファイルです。ツールセットは以下の構造を持ちます。
<tool set name>: ツールセットの名前。ツールピッカーおよびプロンプトでツールセットを参照する際に表示されます。tools: ツールセットに含まれるツール名のリスト。ツールは組み込みツール、MCPツール、または拡張機能によって提供されるツールであることができます。description: ツールセットの簡単な説明。この説明は、ツールピッカーでツールセット名とともに表示されます。icon: ツールセットのアイコン。値は製品アイコンリファレンスで確認できます。
以下のコードスニペットは、readerという名前のツールセットを定義するツールセットファイルの例を示しています。
{
"reader": {
"tools": [
"changes",
"codebase",
"fetch",
"findTestFiles",
"githubRepo",
"problems",
"usages"
],
"description": "description",
"icon": "tag"
}
}
編集を承認または破棄する
VS Codeは、チャットビューの変更されたファイルのリストに、編集されたファイルを一覧表示します。保留中の編集があるファイルには、エクスプローラービューとエディタータブに視覚的なインジケーター (正方形内の点) も表示されます。

エディターオーバーレイコントロールを使用すると、上および下コントロールを使用して、提案された編集間を移動できます。保持または元に戻すボタンを使用して、特定のファイルの編集を承認または拒否します。

ソース管理ビューで変更をステージングすると、保留中の編集は自動的に承認されます。一方、変更を破棄すると、保留中の編集も破棄されます。
VS Codeを閉じると、保留中の編集の状態が記憶され、VS Codeを再度開いたときに復元されます。
特定の遅延後に提案されたすべての編集を自動的に承認するには、chat.editing.autoAccept設定を構成します。エディターオーバーレイコントロールにカーソルを合わせると、自動承認のカウントダウンをキャンセルできます。すべての編集を自動的に承認する場合でも、ソース管理にコミットする前に変更を確認することをお勧めします。
ファイル編集の承認を管理する
AIが明示的なユーザー承認なしに編集を許可されるファイルを、chat.tools.edits.autoApprove設定で管理できます。この設定は、ワークスペース設定や環境設定などの機密情報を含むファイルへの意図しない編集を防ぐのに役立ちます。
chat.tools.edits.autoApprove設定は、編集のために自動的に承認されるファイルを示すglobパターンとブール値のペアを受け入れます。例:
"chat.tools.edits.autoApprove": {
"**/*": true,
"**/.vscode/*.json": false,
"**/.env": false
}
以前のチャットリクエストを編集する
アクティブなチャットセッションで以前のチャット要求を編集できます。これは、プロンプトを洗練したり、間違いを修正したりする場合に役立ちます。チャット要求を編集することは、要求を元に戻し、編集されたプロンプトで新しい要求を送信することと同じです。以前のチャット要求の編集について詳しく学びます。
チェックポイントで編集を元に戻す
チャットチェックポイントは、ワークスペースの状態を以前の時点に復元する方法を提供し、チャットのやり取りが複数のファイルにわたる変更をもたらした場合に特に役立ちます。
チェックポイントが有効になっている場合、VS Codeはチャットのやり取り中の重要なポイントでファイルの自動スナップショットを作成し、チャットリクエストによって行われた変更が期待どおりでなかったり、別のアプローチを試したい場合に、既知の良好な状態に戻ることができます。
チェックポイントを有効にするには、chat.checkpoints.enabled設定を構成します。

チャットのチェックポイントの操作について詳しく学びます。
TODOリストで進捗状況を追跡する(実験的)
エージェントが取り組んでいる個々のタスクの概要をよりよく把握するために、エージェントモードで実験的なTODOリスト機能を有効にできます。この機能は、エージェントが完了しているタスクの進捗状況を追跡するのに役立ちます。また、エージェントが全体的な目標に集中するのにも役立ちます。エージェントがタスクを完了すると、TODOリストを更新して作業の現在の状態を反映します。
TODOリストコントロールの表示と位置は、chat.todoListWidget.position設定で構成できます。
あなたのコーディングスタイルに従う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コーディングエージェントを使用します。開発プロセスに積極的に関与し、変更を迅速に反復したい場合は、エージェントモードを使用します。
エージェントモードで機能の分析と実装アプローチの決定から始め、その後、明確に定義されたタスクをCopilotコーディングエージェントに渡してバックグラウンドで作業させることで、両方の体験を組み合わせて使用できます。
「リクエストごとに128個を超えるツールを持つことはできません。」というエラーが表示されます。
チャットリクエストには、一度に最大128個のツールを有効にできます。128個を超えるツールを選択している場合は、チャットビューのツールピッカーでいくつかのツールを選択解除してツールの数を減らすか、仮想ツールが有効になっていることを確認してください (github.copilot.chat.virtualTools.threshold)。
