VS Codeでエージェントモードを使用する
Visual Studio Codeのチャットエージェントモードでは、自然言語を使って高レベルのタスクを指定し、AIが自律的にリクエストについて推論し、必要な作業を計画し、コードベースに変更を適用することができます。エージェントモードは、指定したタスクを達成するために、コード編集とツール呼び出しの組み合わせを使用します。リクエストを処理する際、編集とツールの結果を監視し、発生する問題を解決するために反復します。
前提条件
- Visual Studio Code の最新バージョンをインストールします
- Copilotへのアクセス。Copilot無料プランでは、月ごとの補完とチャットインタラクションの制限が適用されます。
エージェントモードを使用する理由
エージェントモードは、プロジェクト内の複数のファイルにわたる自律的な編集を行うように最適化されています。コード編集だけでなく、ツールやターミナルコマンドの呼び出しも必要とする複雑なタスクに特に役立ちます。エージェントモードを使用して次のことができます。
- コードベースの一部をリファクタリングする (例: 「アプリをRedisキャッシュを使用するようにリファクタリングする」)
- 新機能を計画および実装する (例: 「認証にOAuthを使用してアプリにログインフォームを追加する」)
- コードベースを新しいフレームワークに移行する (例: 「アプリをReactからVue.jsに移行する」)
- 複雑なタスクの実装計画を生成する (例: 「SwiftフロントエンドとNode.jsバックエンドを使用した食事計画Webアプリを作成する」)
- 高レベルの要件を定義する (例: 「ソーシャルメディア共有機能を追加する」)
エージェントモードは、ターミナルコマンドやツールの実行も必要となる可能性のある、あまり明確に定義されていないコーディングタスクに特に役立ちます。エージェントモードは、リクエストを達成するための関連するコンテキストとタスクを自律的に判断します。また、構文エラーやテスト失敗などの中間的な問題を解決するために、複数回反復することもできます。
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を選択します。
-
チャット入力フィールドに編集を行うためのプロンプトを入力し、送信 (Enter) を選択して送信します。
高レベルの要件を指定でき、作業するファイルを指定する必要はありません。エージェントモードでは、AIが関連するコンテキストと編集するファイルを自律的に判断します。
これらのプロンプト例のいくつかで試してみてください。
ReactとNode.jsを使用して食事計画Webアプリを作成する
ソーシャルメディア共有機能を追加する
現在の認証をOAuthに置き換える
-
エージェントモードは、異なるタスクを達成するために複数のツールを呼び出す場合があります。オプションで、ツールアイコンを選択して、リクエストへの応答に使用できるツールを設定できます。
ヒントプロンプト内でツール名を
#
の後に続けて入力することで、ツールを直接参照することもできます。これは、すべてのチャットモード (ask、edit、agentモード) で実行できます。 -
ツールの呼び出しとターミナルコマンドを確認する。
ターミナルコマンドまたは組み込み以外のツールを実行する前に、Copilotは続行の確認を求めます。これは、ツールがローカルマシン上で実行され、ファイルやデータを変更する可能性のあるアクションを実行するためです。
続行ボタンのドロップダウンオプションを使用して、現在のセッション、ワークスペース、または将来のすべての呼び出しに対して特定のツールを自動的に確認します。ツールの承認を管理し、すべてのツール呼び出しを承認する方法について学習してください。
プロジェクトで
tasks.json
にタスクが構成されている場合、エージェントモードは適切なタスクを実行しようとします。たとえば、ビルドタスクを定義している場合、エージェントモードはアプリケーションを実行する前にビルドタスクを実行します。github.copilot.chat.agent.runTasks 設定を使用して、ワークスペースタスクの実行を有効または無効にできます。 -
オプションで、ツールを実行する前にツールの入力パラメーターを確認し、編集します。
ツール名の横にある山括弧を選択して、その詳細と入力パラメーターを表示します。ツールを実行する前に入力パラメーターを編集できます。
-
Copilotは、コード編集やターミナルコマンドの問題を検出し、それらを解決するために反復して追加のアクションを実行します。
生成されたコード変更の問題を自動的に診断および修正するには、github.copilot.chat.agent.autoFix 設定を有効にします。この設定は既定で有効になっています。
たとえば、エージェントモードはコード編集の結果として単体テストを実行する場合があります。テストが失敗した場合、そのテスト結果を使用して問題を解決します。
Copilot Editsのエージェントモードは、問題や課題を解決するために複数回反復します。chat.agent.maxRequests 設定は、Copilot Editsがエージェントモードで行うことができるリクエストの最大数を制御します。
-
Copilotがリクエストを処理する際、提案されたコード編集がエディターに直接ストリームされることに注目してください。
チャットビューには、編集されたファイルのリストが太字で表示されます。エディターオーバーレイコントロールを使用すると、提案された編集間を移動できます。
-
提案された編集を確認し、提案された編集を承諾または破棄します。
-
コード変更を反復して、編集を洗練したり、追加機能を実装したりします。
エージェントモードのツール
エージェントモードは、ユーザーリクエストを処理しながら、特殊なタスクを達成するためにツールを使用します。そのようなタスクの例としては、ディレクトリ内のファイルをリストする、ワークスペース内のファイルを編集する、ターミナルコマンドを実行する、ターミナルから出力を取得する、などがあります。
エージェントモードは以下のツールを使用できます。
- 組み込みツール
- MCPツール
- 拡張機能によって提供されるツール
リクエストへの応答に使用できるツールを表示および管理できます。チャットビューでツールアイコンを選択して、エージェントモードで利用可能なツールを表示および選択します。
ツールの結果に基づいて、エージェントは全体のリクエストを達成するために他のツールを呼び出す場合があります。たとえば、コード編集によってファイルに構文エラーが発生した場合、エージェントは別のアプローチを検討し、異なるコード変更を提案する場合があります。
チャットリクエストでは、一度に最大128個のツールを有効にできます。128個を超えるツールを選択している場合は、ツールピッカーで一部のツールの選択を解除して、ツールの数を減らしてください。
ツールセットを定義する
ツールセットとは、チャットで使用できるツールのコレクションです。個々のツールを使用するのと同じ方法でツールセットを使用できます。たとえば、エージェントモードでツールピッカーを使用してツールセットを選択したり、プロンプトで#
の後にツールセット名を入力して直接ツールセットを参照したりできます。
ツールセットを使用すると、関連するツールをグループ化でき、チャットプロンプト、プロンプトファイル、またはカスタムチャットモードでの使用が容易になります。これは、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"
}
}
ツール承認の管理
エージェントモードがツールまたはターミナルコマンドを実行する前に、実行の確認を求めます。これは、それらがファイルやデータを変更する可能性のあるアクションを実行したり、破壊的なアクションを実行したりする可能性があるためです。
チャットビューでツールまたはターミナルコマンドの呼び出しが発生した場合、続行ボタンのドロップダウンオプションを使用して、現在のセッション、ワークスペース、または将来のすべての呼び出しに対して特定のツールを自動的に確認します。
コマンドパレットでチャット: ツール確認のリセットコマンドを使用すると、ツールの確認をリセットできます。
すべてのツールとコマンドを自動承認する (実験的)
すべてのツールとターミナルコマンドを自動承認したい場合は、実験的なchat.tools.autoApprove 設定を使用できます。これにより、すべてのツールとコマンドの呼び出しが自動的に承認され、言語モデルがツールを実行したい場合にVS Codeは確認を求めません。
この設定を有効にすると、モデルが実行しようとする潜在的に破壊的なアクションをキャンセルする機会がなくなります。
強化された境界として、chat.tools.autoApprove をリモート環境に接続している場合にのみ設定することを選択できます。これはユーザーレベルの設定ではなく、リモート設定として設定することをお勧めします。ローカルマシンの一部であるリモート環境 (開発コンテナーなど) や、資格情報にアクセスできるリモート環境は、依然として異なるレベルのリスクをもたらすことに注意してください。
ターミナルコマンドを自動承認する (実験的)
エージェントモードがターミナルコマンドを実行する前に、実行の確認を求めます。自動承認が有効になっている場合、すべてのターミナルコマンドは自動的に承認されます。
どのターミナルコマンドを自動承認するかについて、よりきめ細かな制御を行いたい場合は、以下の設定を使用してください。
-
github.copilot.chat.agent.terminal.allowList: 明示的な承認なしに、ターミナルツールのコマンド実行を許可するコマンドまたは正規表現のリストです。これらはコマンドの先頭と照合されます。正規表現は、文字列を
/
文字で囲むことで指定できます。たとえば、すべてのコマンドを許可するには/.*/
を使用します。 -
github.copilot.chat.agent.terminal.denyList: 許可リスト内の一致をオーバーライドし、コマンドラインに明示的な承認を要求させるコマンドまたは正規表現のリストです。これらはコマンドの先頭と照合されます。正規表現は、文字列を
/
文字で囲むことで指定できます。
編集を承諾または破棄する
Copilotは、チャットビューの変更されたファイルのリストに、編集されたファイルを一覧表示します。保留中の編集があるファイルには、エクスプローラービューとエディタータブにもインジケーターが表示されます。
エディターオーバーレイコントロールを使用すると、上 () と 下 () コントロールを使用して、提案された編集間を移動できます。特定のファイルの編集を承諾または拒否するには、保持または元に戻すボタンを使用します。
エディターまたはチャットビューの保持または元に戻すコントロールを使用して、個々の、またはすべての提案された編集を承諾または拒否します。
chat.editing.autoAcceptDelay 設定を使用すると、提案された編集が自動的に承諾されるまでの遅延を設定できます。エディターオーバーレイコントロールにカーソルを合わせると、自動承諾のカウントダウンをキャンセルできます。
VS Codeを閉じると、保留中の編集の状態が記憶されます。VS Codeを再度開くと、保留中の編集が復元され、引き続き編集を承諾または破棄できます。
チャットリクエストの編集 (実験的)
チャットリクエストを編集する機能は、VS Codeバージョン1.102以降で利用可能であり、現在は実験的な機能です。
アクティブなチャットセッションで以前のチャットリクエストを編集できます。これは、プロンプトを洗練したり、間違いを修正したりする場合に役立ちます。以前のチャットリクエストを編集すると、以下の手順が実行されます。
- 編集されたリクエストと、それ以降のすべてのリクエストおよび応答は、会話履歴から削除されます。
- これらのリクエストによって行われた編集は、リクエストが行われる前の状態に復元されます。
- 編集されたリクエストは会話履歴に追加され、新しい応答のために言語モデルに送信されます。
チャットリクエストの編集は、リクエストを元に戻し、編集されたプロンプトで新しいリクエストを送信することと同じです。
チャットリクエストを編集する方法はいくつかあり、chat.editRequests 設定で構成されます。
inline
: チャットビューでリクエストを選択すると、その場で編集可能になります。Escapeを使用して編集モードを終了します。hover
: チャットリクエストにカーソルを合わせ、編集アイコン (鉛筆) を選択すると、その場で編集可能になります。Escapeを使用して編集モードを終了します。input
: チャットリクエストにカーソルを合わせ、編集アイコン (鉛筆) を選択して、チャット入力フィールドでリクエストを編集します。none
: チャットビューでのチャットリクエストの編集を無効にします。
編集を元に戻す
コードの編集をリクエストしているとき、例えば別の実装戦略を使用したい、またはCopilotが編集を生成する際に間違った方向に進み始めたなどの理由で、これらの変更の一部を元に戻したい場合があります。
チャットビューのタイトルバーにある最後の編集を元に戻すコントロールを使用して、最後の編集を元に戻し、最後のリクエストを送信する前の状態に戻すことができます。最後の編集を元に戻した後、チャットビューのタイトルバーにある最後の編集をやり直すコントロールを使用して、それらの編集を再度やり直すことができます。
Copilot Editsビューでリクエストにカーソルを合わせると、編集を元に戻す (削除) コントロール (x アイコン) を使用して、そのリクエスト以降に行われたすべての編集を元に戻すこともできます。
エージェントモードリクエストを中断する
進行中のリクエストを中断するには、一時停止するかキャンセルすることができます。リクエストを一時停止すると、Copilotはそのリクエストの処理を停止し、あなたの入力を待ちます。
リクエストを一時停止すると、現在のリクエストをキャンセルする新しいプロンプトを入力するか、現在のリクエストを再開するかを選択できます。
リクエストをキャンセルすると、Copilotはアクティブなリクエストを中断して終了します。その時点までに行われた変更を、引き続き確認し、承諾または拒否することができます。
指示を使用して、コーディングスタイルに合わせた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 Editsがエージェントモードで行うことができるリクエストの最大数 (既定値: Copilot無料ユーザーは5、その他のユーザーは15)
- github.copilot.chat.agent.runTasks: Copilot Editsでエージェントモードを使用する際にワークスペースタスクを実行する (既定値:
true
) - chat.mcp.discovery.enabled: 他のツールで構成されたMCPサーバーの検出を有効または無効にする (既定値:
true
) - github.copilot.chat.agent.autoFix: 生成されたコード変更の問題を自動的に診断および修正する (既定値:
true
) - chat.tools.autoApprove (実験的): すべてのツールを自動承認する (既定値:
false
)
よくある質問
エディットモードではなくエージェントモードを使用する理由は何ですか?
エディットモードとエージェントモードを選択するための以下の基準を考慮してください。
- 編集範囲: エージェントモードは、関連するコンテキストと編集するファイルを自律的に判断します。エディットモードでは、コンテキストを自分で指定する必要があります。
- タスクの複雑さ: エージェントモードは、コード編集だけでなく、ツールやターミナルコマンドの呼び出しも必要とする複雑なタスクにより適しています。
- 期間: エージェントモードは、リクエストを処理するために複数のステップを伴うため、応答を得るのに時間がかかる場合があります。たとえば、関連するコンテキストと編集するファイルを決定したり、実行計画を決定したりするなどです。
- 自己修復: エージェントモードは、生成された編集の結果を評価し、中間的な問題を解決するために複数回反復する場合があります。
- リクエストクォータ: エージェントモードでは、タスクの複雑さによっては、1つのプロンプトが多くのバックエンドリクエストにつながる可能性があります。
「リクエストごとに128個を超えるツールを持つことはできません」というエラーが表示されます。
チャットリクエストでは、一度に最大128個のツールを有効にできます。128個を超えるツールを選択している場合は、チャットビューのツールピッカーで一部のツールの選択を解除して、ツールの数を減らしてください。