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

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

2025年2月24日 Isidor Nikolic

ヒント

エージェントモードは現在VS Code Stableで利用可能で、MCPサーバーもサポートしています。エージェントモードの更新については、ブログ投稿で詳細をご覧ください。

Copilot エージェントモードは、AIによるコーディング支援の次なる進化です。自律的なピアプログラマーとして機能し、コードベースの分析、関連ファイルの読み取り、ファイルの編集提案、ターミナルコマンドやテストの実行など、マルチステップのコーディングタスクをコマンドで実行します。コンパイルエラーやリンターエラーに対応し、ターミナルやテストの出力を監視し、タスクが完了するまでループで自動修正を行います。現在、すべての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に透過的に表示され、ターミナルツールには承認が必要であり、豊富な元に戻す機能がサポートされています。ビューのタイトルバーにある最後の編集を元に戻すコントロールを使用して、最後の編集が適用される前の状態に戻すことができます。完璧な解決策を得るために1つの長く詳細なプロンプトに頼るのではなく、Copilot と反復的に作業するべきです。UIは反復作業のために構築されており、プロセスを完全に制御できるため、最終結果が向上します。

Copilot エージェントモードは、適切なワークスペースツールを呼び出すことで、正確なコンテキストを自動的に見つけ、作業対象ファイルセットを設定します。Copilot をより正確にガイドするには、ドラッグアンドドロップを使用するか、ファイルの追加ボタンをクリックして、#fileでコンテキストを明示的に参照できます。たとえば、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はワークスペースを検索したり、ファイルの内容を読み取ったり、ターミナルでコマンドを実行したり、エディターからコンパイルエラーやリンターエラーを取得したり、投機的デコーダーエンドポイントを介して提案された変更を適用したりできます(パフォーマンス改善が進行中)。エージェントモードでの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のbuilding effective agentsブログでも言及されています。自動評価を行っていますが、プロンプトと記述の更新と、実際の使用例での動作確認の間には、まだ多くの試行錯誤があります。

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 エージェントモードに興奮しています — 今日ぜひお試しいただき、ご意見をお聞かせください。

楽しいコーディングを!

IsidorとVS Codeチーム