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

チャットをワークスペースのエキスパートにする

チャットでコードベース全体について質問するには、チャットプロンプトで @workspace または #codebase を参照します。質問に基づいて、チャットは関連するファイルとシンボルをインテリジェントに取得し、回答内でリンクやコード例として参照します。

@workspace#codebase の違いは何ですか?

概念的には、@workspace#codebase の両方で、コードベース全体について質問できます。ただし、それらの使用方法にはいくつかの違いがあります。

  • @workspace

    • コードベースに関する質問に答えるための専用チャット参加者。
    • ユーザープロンプトを制御し、コードベースを使用して回答を提供します。
    • 他のツールを呼び出すことはできません。
    • 質問モードでのみ使用できます。
    • 例: "@workspace how can I validate a date?"
  • #codebase

    • ユーザープロンプトに基づいてコードベース検索を実行し、関連するコードをチャットプロンプトにコンテキストとして追加するツール。
    • LLMは制御を維持し、編集シナリオのために他のツールと組み合わせることができます。
    • すべてのチャットモード (質問、編集、エージェント) で使用できます。
    • 例: "add a tooltip to this button, consistent with other button #codebase""add unit tests and run them #codebase"

#codebase はより柔軟性があるため、チャットプロンプトで使用することをお勧めします。

ヒント

#codebase が関連するコードスニペットを見つけるのにさらに効果的になるように、github.copilot.chat.codesearch.enabled を有効にしてください。この設定は既定で有効になっています。

プロンプトの例

  • コードベース内の既存のコードを見つける
    • "@workspace where is database connecting string configured?" - データベース接続の構成場所と方法を説明します
    • "@workspace how can I validate a date?" - コードベースで既存の日付検証ヘルパーを見つけます
    • "@workspace where are tests defined?" - テストスイート、ケース、および関連する参照と構成の場所を提供します
  • 複雑なコード編集の計画を立てる
    • "@workspace how can I add a rich tooltip to a button?" - 既存のツールチップコンポーネントをボタン要素で使用するための計画を提供します
    • "@workspace add a new API route for the forgot password form" - 新しいルートを追加する場所と、既存のコードに接続する方法を概説します
  • コードベース内の上位レベルの概念を説明する
    • "@workspace how is authentication implemented?" - 認証フローの概要と関連コードへの参照
    • "@workspace which API routes depend on this service?" - 選択したコードでサービスを使用するルートをリストアップします
    • "How do I build this #codebase?" - ドキュメント、スクリプト、構成に基づいてプロジェクトをビルドする手順をリストアップします

コンテキストにはどのようなソースが使用されますか?

質問に答えるために、ワークスペースコンテキストは、開発者がVS Codeでコードベースをナビゲートする際に使用するのと同じソースを検索します。

  • ワークスペース内のすべてのインデックス可能なファイル。ただし、.gitignore ファイルによって無視されるファイルは除きます。
  • ネストされたフォルダー名とファイル名を含むディレクトリ構造
  • ワークスペースがGitHubリポジトリであり、コード検索によってインデックス化されている場合のGitHubのコード検索インデックス。
  • ワークスペース内のシンボルと定義
  • アクティブエディターで現在選択されているテキストまたは表示されているテキスト

無視されたファイルが開いているか、そのファイル内でテキストが選択されている場合、.gitignore はバイパスされます。

@workspace は最も関連性の高いコンテキストをどのように見つけますか?

VS Codeワークスペース全体をGitHub Copilotに渡してチャットプロンプトに応答させるには大きすぎる場合があります。代わりに、@workspace は、Copilotの回答の根拠となる最も関連性の高い情報をさまざまなコンテキストソースから抽出します。

まず、@workspace は、会話履歴、ワークスペース構造、現在選択されているコードを含め、質問に答えるために必要な情報を決定します。

次に、ローカルでの検索やGitHubのコード検索の使用など、さまざまなアプローチで関連するコードスニペットを見つけ、VS Codeの言語IntelliSenseを使用して関数シグネチャ、パラメーターなどの詳細を追加することで、コンテキストを収集します。

最後に、このコンテキストはGitHub Copilotによって質問に答えるために使用されます。コンテキストが大きすぎる場合は、コンテキストの最も関連性の高い部分のみが使用されます。応答はファイル、ファイル範囲、シンボルへの参照でマークアップされます。これにより、チャット応答からコードベース内の対応する情報に直接リンクできます。Copilotに提供されたコードスニペットは、応答内で参照としてリストされます。

ワークスペースインデックスの管理

Copilotは、コードベース内の関連するコードスニペットをすばやく正確に検索するためにインデックスを使用します。このインデックスは、GitHubによって管理されるか、マシンにローカルに保存されます。

インデックスの種類とそのステータスは、ステータスバーのCopilotステータスダッシュボードで確認できます。

Screenshot showing the workspace index status in the Copilot status menu.

リモートインデックス

コードがGitHubリポジトリでホストされている場合、GitHubコード検索を使用してリモートインデックスを構築することで、大規模なコードベースでもAIがコードベースを迅速に検索できるようになります。

ワークスペースのリモートインデックスを構築するには

  1. VS CodeでGitHubアカウントにサインインします。

  2. コマンドパレット (kb(workbench.action.showCommands))) でリモートワークスペースインデックスの構築コマンドを実行します。

    リモートインデックスの構築には、特に大規模なコードベースの場合、時間がかかることがあります。ステータスバーのCopilotステータスダッシュボードでリモートインデックスのステータスを監視できます。

    リモートインデックスは一度構築するだけで済みます。GitHubはコード変更をプッシュするたびに自動的に最新の状態に保ちます。

重要

リモートインデックス作成には、GitHub上のGitリモートを持つプロジェクトが必要です。コードもGitHubにプッシュしていることを確認してください。GitHubが比較的新しいバージョンのコードを持っている場合、リモートインデックスは最適に機能するため、定期的にコードをGitHubにプッシュするようにしてください。

ローカルインデックス

リモートインデックスを使用できない場合、Copilotはローカルマシンに保存された高度なセマンティックインデックスを使用して、高速で高品質な検索結果を提供できます。現在、ローカルインデックスは2500のインデックス可能なファイルに制限されています。

ローカルインデックスを構築するには

  • プロジェクトにインデックス可能なファイルが750未満の場合: Copilotは自動的に高度なローカルインデックスを構築します。

  • プロジェクトにインデックス可能なファイルが750〜2500の場合: コマンドパレット (kb(workbench.action.showCommands))) でローカルワークスペースインデックスの構築コマンドを実行します。このコマンドは一度実行するだけで済みます。

  • プロジェクトにインデックス可能なファイルが2500を超える場合: 下記の基本インデックスセクションを参照してください。

最初のローカルインデックスの構築や、多くのファイルが変更された場合 (Gitブランチを切り替える場合など) のインデックスの更新には時間がかかる場合があります。ステータスバーのCopilotステータスダッシュボードで現在のローカルインデックスの状態を監視できます。

基本インデックス

プロジェクトにリモートインデックスがなく、2500を超えるインデックス可能なファイルがある場合、Copilotはコードベースを検索するために基本インデックスにフォールバックします。このインデックスは、よりシンプルなアルゴリズムを使用してコードベースを検索し、大規模なコードベースでローカルに動作するように最適化されています。

基本インデックスは多くの質問に対して問題なく機能するはずです。ただし、Copilotがコードベースに関する質問に答えるのに苦労している場合は、リモートインデックスにアップグレードしてみてください。

ワークスペースインデックスに含まれるコンテンツ

Copilotは、現在のプロジェクトの一部である関連するテキストファイルをインデックス化します。これは特定のファイルタイプやプログラミング言語に限定されませんが、Copilotは通常、.tmp.out ファイルなど、@workspace の質問に通常関連しない一般的なファイルタイプを自動的にスキップします。Copilotはまた、files.exclude 設定を使用してVS Codeから除外されたファイルや、.gitignore ファイルの一部であるファイルも除外します。

Copilotは現在、画像やPDFなどのバイナリファイルはインデックス化しません。

ワークスペースコンテキストを使用するためのヒント

質問の表現方法は、コンテキストの質と回答の正確さに大きく影響します。結果を最適化するために、次のヒントを考慮してください。

  • 「これ」が最後の回答、現在のファイル、プロジェクト全体などと解釈される可能性がある「これは何をするのか」のような曖昧な表現を避け、質問を具体的かつ詳細にしてください。
  • プロンプトには、コードまたはそのドキュメントに表示される可能性のある用語や概念を組み込んでください。
  • 応答の使用された参照を確認して、ファイルが関連していることを確認します。必要に応じて質問を修正してください。
  • コードを選択するか、#editor#selection#<ファイル名> などのチャット変数を言及することで、関連するコンテキストを明示的に含めます。
  • 「catchブロックのない例外を見つける」や「handleErrorがどのように呼び出されるかの例を提供する」など、複数の参照から回答を得ることができます。ただし、「この関数は何回呼び出されますか?」や「このプロジェクトのすべてのバグを修正する」のような、コードベース全体にわたる包括的なコード分析は期待しないでください。
  • 「このファイルに貢献したのは誰ですか?」や「このフォルダーのレビューコメントを要約してください」など、コード以外の情報 (今のところ) を仮定しないでください。