VS Codeのエージェントモードを拡張するには、を試してください!

GitHub Copilot エージェントモード (プレビュー) のご紹介

2025年2月24日 Isidor Nikolic

ヒント

エージェントモードがVS Code Stableで利用可能になり、MCPサーバーをサポートしました。エージェントモードの更新については、こちらのブログ記事で詳しくご覧いただけます。

Copilot のエージェントモードは、AI支援コーディングの次なる進化です。自律的なピアプログラマーとして機能し、あなたの指示で複数ステップのコーディングタスクを実行します。コードベースを分析し、関連ファイルを読み込み、ファイルの編集を提案し、ターミナルコマンドやテストを実行します。コンパイルエラーやLintエラーに対応し、ターミナルやテストの出力を監視し、タスクが完了するまでループで自動修正を行います。本日よりすべての VS Code Insiders ユーザーにご利用いただけ、まもなく VS Code Stable でも提供される予定です。

Copilot エージェントモードの使い方

VS Code Insiders で、Copilot Edits ビュー () を開き、モードのドロップダウンから Agent を選択し、プロンプトを入力します。

Copilot エージェントモードは、ゼロからアプリを作成したり、複数のファイルにまたがるリファクタリングを実行したり、テストを作成して実行したり、レガシーコードを最新のフレームワークに移行したりできます。ドキュメントの自動生成、新しいライブラリの統合、複雑なコードベースに関する質問への回答も可能です。Copilot エージェントモードは、ワークスペースを理解する AI コラボレーターを持つことで、あなたの生産性を飛躍的に向上させます。あなたがコントロールを維持しながら、内部の開発フローを調整してくれます。

Copilot エージェントモードは、望ましい結果を達成するために、より自律的かつ動的な方法で動作します。リクエストを処理するために、Copilot は以下のステップをループし、必要に応じて複数回反復します。

  • 関連するコンテキストと編集するファイルを自律的に判断します。
  • タスクを完了するために、コード変更とターミナルコマンドの両方を提案します。例えば、Copilot はコードのコンパイル、パッケージのインストール、テストの実行などを行うことがあります。
  • コード編集とターミナルコマンド出力の正しさを監視し、問題を修正するために反復します。

Copilot エージェントモードは、これらのタスクを達成するために一連のツールを使用します。

Screenshot of the Copilot agent mode, and the proposed inline changes

理想的な世界では、Copilot エージェントモードの最終的な出力だけを気にすればよいのですが、時には間違いを犯したり、脱線したりすることがあります。そのような状況で簡単に介入して元に戻せるように、すべてのツールの呼び出しはUIに透過的に表示され、ターミナルツールの使用には承認が必要で、豊富な元に戻す機能をサポートしています。ビューのタイトルバーにある Undo Last Edit (最後の編集を元に戻す) コントロールを使用して、最後の編集が適用される前の状態に戻すことができます。完璧な解決策を得るために一つの長く詳細なプロンプトに頼るのではなく、Copilot と反復的に作業すべきです。UIは反復作業のために作られており、プロセス全体を完全に制御できるため、最終的な結果がより良いものになります。

Copilot エージェントモードは、適切なワークスペースツールを呼び出すことで、正確なコンテキストを自動的に見つけ、作業対象のファイルセットを設定します。Copilot をより正確にガイドするために、#file を使ってコンテキストを明示的に参照したり、ドラッグ&ドロップしたり、Add Files (ファイルを追加) ボタンをクリックしたりすることもできます。例えば、specifications.md ファイルを作成し、それをコンテキストとして追加して Copilot をより良く制御したり、カスタム指示を設定して、Copilot があなたのコーディングガイドラインやその他の好みを尊重するようにしたりできます。

Copilot エージェントモードはプロンプトごとに複数のリクエストを送信する可能性があるため、通常のエディットモードほど速くはなく、無料のCopilotクォータをすぐに使い切ってしまう可能性があることに留意してください。明確に定義され、スコープが限定されたタスクにはエディットモードを使い続け、複数の編集やより自由なタスクが必要な場合はエージェントモードに切り替えてください。

仕組み

Diagram showing the inner works of agent mode and how it interacts with context, LLM and tools

エージェントモードで Copilot にリクエストを送信すると、モデルのドロップダウンから選択した LLM に対してプロンプトが作成されます。このプロンプトには以下が含まれます。

  • あなたのクエリ
  • ワークスペースの要約された構造 (トークンを節約するため、完全なコードベースの代わり)
  • マシンコンテキスト (例: 使用している OS)
  • ツールの説明 (オプションでツールの呼び出し結果)

私たちは LLM が呼び出すための一連のツールを定義しており、各ツールには Copilot が仕事を成し遂げるのを助ける独自の機能があります。これらのツールを使用して、Copilot はワークスペースを検索し、ファイルの内容を読み、ターミナルでコマンドを実行し、エディターからコンパイルエラーやLintエラーを取得し、投機的デコーダーエンドポイントを介して提案された変更を適用できます (パフォーマンスは改善中です)。エージェントモードでの Copilot の能力を向上させる他のツールは何かを実験しているため、ツールのリストは常に拡大しています。

Screenshot Copilot agent mode proposing a terminal tool to "npm run dev"

各ツールには、LLM がいつどのように使用するかについての詳細な指示があります。以下は read_file ツールの説明の例です。

{
  "name": "read_file",
  "description": "Read the contents of a file. You must specify the line range you're interested in, and if the file is larger, you will be given an outline of the rest of the file. If the file contents returned are insufficient for your task, you may call this tool again to retrieve more content.",
  "parameters": {
    "type": "object",
    "properties": {
      "filePath": {
        "description": "The absolute paths of the files to read.",
        "type": "string"
      },
      "startLineNumberBaseZero": {
        "type": "number",
        "description": "The line number to start reading from, 0-based."
      },
      "endLineNumberBaseZero": {
        "type": "number",
        "description": "The inclusive line number to end reading at, 0-based."
      }
    },
    "required": ["filePath", "startLineNumberBaseZero", "endLineNumberBaseZero"]
  }
}

LLMがツールを正確に使用するように、これらのツールの説明とシステムプロンプトの改良に多くの開発時間を費やしました。これは、Anthropic が効果的なエージェントの構築に関するブログで指摘していることでもあります。私たちは自動評価を行っていますが、プロンプトや説明を更新し、実際のユースケースでそれらがどのように動作するかを確認するという試行錯誤がまだ多く残っています。

GPT 4o と Claude Sonnet では異なる動作が見られますが、今のところ、これらのモデルには同様のシステムプロンプトを送信しています。将来的には、Copilot エージェントモードのサポートをより多くの LLM に拡大するにつれて、各モデルに特化したプロンプトを調整していく予定です。

私たちはセルフホスティングが大好きです

VS Code の初日から、私たちはセルフホスティングを強く信じてきました。チームが新機能を本番環境に対応した変更を行うために使用していないのであれば、その機能には何か問題があるということです。私たちにとっては、それほど単純なことなのです。

私たちのチームは 200 以上の GitHub リポジトリを所有しており、Copilot エージェントモードが小規模なリポジトリで優れた性能を発揮し、すでに生産性の向上をもたらしているのを見てきました。Copilot に自由形式の質問をする機能は、あらゆるサイズのリポジトリでうまく機能します。例えば、特定の機能がどこでどのように実装されているか、などです。vscode のような大規模なコードベースで複数のファイルにまたがるリファクタリングは、今日のどのソフトウェアエンジニアリングエージェントにとっても難しい課題です。複雑なリポジトリで Copilot エージェントモードを改善することは、私たちのチームにとってより多くのセルフホスティングの機会を解放し、皆さんにとっても有用なインタラクションを可能にするでしょう。

セルフホスティングとは別に、VS Code のチームメンバーは、天気予報、食事計画、コーヒー消費量ジムでのワークアウトなどのアプリといった、趣味のプロジェクトで Copilot エージェントモードを楽しんで使っています。

現在、VS Code チームは、Copilot エージェントモードのユースケースにおいて、GPT-4o よりも Claude Sonnet を好んで使用しています。Claude 3.7 Sonnet の初期テストでは、Copilot エージェントモードの機能が大幅に改善されていることが確認されています。

本日より利用可能

Copilot エージェントモードはプレビュー版であり、本日よりすべての VS Code Insiders ユーザーにご利用いただけます。私たちは文字通り毎日コードをプッシュして Copilot を改善しているため、VS Code Insiders での体験は日々向上しています (例: 本日、提案されたターミナルコマンドを編集する機能をプッシュしました)。私たちのリポジトリで皆さんのフィードバックをお待ちしています。Copilot エージェントモードをどのように使いたいかをお知らせください。私たちが提供する機能が皆さんにとってインパクトのあるものになるようにします。

次に、以下の作業を計画しています。

  • きめ細かい元に戻す機能
  • コンテキストUI (作業セット) の簡素化
  • ノートブックのサポート (現在、編集セッションはテキストエディターでのみ機能します)
  • 特定のターミナルコマンドを自動承認する機能
  • ターミナルツールのUI改善 (例: ターミナルコマンドの出力をインラインで表示)
  • エージェントモードのツールとして、ツールの拡張性MCPサーバーの活用を模索しています。拡張機能のアイデアがあれば教えてください
  • チャットと編集体験の統合
  • 並行して、すべての VS Code Stable ユーザーに Copilot エージェントモードを提供することを目標に、品質とパフォーマンスの向上に取り組んでいます。

Copilot エージェントモードの詳細な概要については、公式ドキュメントをお読みください。

私たちは Copilot エージェントモードに大きな期待を寄せています。ぜひ今日から試してみて、ご意見をお聞かせください。

Happy vibe coding!

IsidorとVS Codeチーム