チャットをワークスペースのエキスパートにする
チャットは、個別のファイルだけでなく、コードベース全体を深く理解している場合に、格段に役立つようになります。ワークスペースコンテキストは、AIがプロジェクト全体を検索し、コンポーネントがどのように接続されているかを理解し、実際のコードに基づいた回答を提供する基盤となるメカニズムです。これにより、「認証はどこで処理されていますか?」や「新しいAPIエンドポイントを追加するにはどうすればよいですか?」のような幅広い質問をし、特定のコードベースに基づいた正確な回答を得ることができます。
この記事では、ワークスペースコンテキストの仕組み、最適な結果を得るためのワークスペースインデックスの管理方法、そしてプロンプトで@workspaceと#codebaseを活用する方法について説明します。
ワークスペースコンテキストの背後にあるインテリジェンスは、プロジェクトのサイズと設定に基づいて自動的に調整されるため、小規模な個人プロジェクトでも大規模な企業コードベースでも正確な結果が得られます。
ワークスペースコンテキストの仕組み
VS Codeは、質問に関連する最も適切なコードを見つけるために、インテリジェントな検索戦略を使用します。単一のアプローチを使用するのではなく、プロジェクトのサイズと利用可能なリソースに基づいて最適な方法を自動的に選択します。VS Codeは複数の戦略を並行して実行し、最も速く最良の結果を生成するものを選択する場合があります。
コンテキストにはどのようなソースが使用されますか?
ワークスペースコンテキストは、開発者がVS Codeでコードベースをナビゲートする際に使用するのと同じソースを検索します。
.gitignoreファイルによって無視されるものを除く、ワークスペース内のすべてのインデックス可能なファイル(ワークスペースインデックス)- ネストされたフォルダとファイル名を持つディレクトリ構造
- コードシンボルと定義(クラス、関数、変数)
- 現在選択されているテキスト、またはアクティブエディタ内の表示されているテキスト
ワークスペースインデックスは、GitHubによってリモートで管理することも、マシンにローカルに保存することもできます。詳細については、ワークスペースインデックスのセクションを参照してください。
ファイルが開いているか、無視されたファイル内でテキストが選択されている場合、.gitignoreはバイパスされます。
検索戦略
小規模なプロジェクトの場合、ワークスペース全体をチャットコンテキストに直接含めることができます。大規模なプロジェクトの場合、VS Codeはさまざまな戦略を使用して、プロンプトのチャットコンテキストに含める最も関連性の高い情報を見つけます。
以下の手順は、VS Codeがワークスペースコンテキストを構築する方法を概説しています。
-
会話履歴、ワークスペース構造、および現在のエディタ選択を含む、質問に答えるためにワークスペースから必要な情報を決定します。
-
さまざまなアプローチを使用して、ワークスペースインデックスから関連するコードスニペットを収集します。
- GitHubのコード検索
- 正確なキーワードだけでなく、質問の意味に一致するコードを見つけるためのローカルセマンティック検索
- テキストベースのファイル名とコンテンツ検索
- VS Codeの言語IntelliSenseを使用して、関数のシグネチャ、パラメーターなどの詳細を追加します。
-
結果のコンテキストがコンテキストウィンドウに収まらないほど大きい場合、最も関連性の高い部分のみが保持されます。
ワークスペースインデックス
VS Codeのチャットは、関連するコードスニペットをコードベースから迅速かつ正確に検索するためにインデックスを使用します。このインデックスは、GitHubによって管理することも、マシンにローカルに保存することもできます。
使用されているインデックスの種類とそのインデックス作成ステータスは、VS CodeステータスバーのCopilotステータスダッシュボードで確認できます。

リモートインデックス
VS Codeは、リモートコード検索インデックスを使用して、大規模なコードベースであってもAIがコードベースを迅速に検索できるようにします。リモートコード検索は現在、GitHubまたはAzure DevOpsリポジトリを使用するワークスペースで利用できます。
GitHubリモートインデックス作成
VS Codeは、ワークスペース内のGitHubがバックアップするリポジトリに対して、リモートコード検索インデックスを自動的に構築および使用します。VS CodeでGitHubアカウントでサインインすると、チャットは利用可能なリモートコード検索インデックスを自動的に使用し始めます。
リポジトリは、チャットで@workspaceまたは#codebaseが初めて使用されたときに自動的にインデックスが作成されます。コマンドパレット(kb(workbench.action.showCommands)))でリモートワークスペースインデックスの構築コマンドを実行して、強制的にインデックスを作成することもできます。
インデックスはリポジトリごとに1回構築するだけで済みます。その後、インデックスは自動的に最新の状態に保たれます。インデックスの構築は、小規模および中規模のプロジェクトでは高速ですが、リポジトリに数十万のファイルが含まれている場合は時間がかかる場合があります。リモートインデックスは、GitHubが比較的最新のコードバージョンを持っている場合に最適に機能するため、コードを定期的にGitHubにプッシュするようにしてください。
現在、リモートインデックス作成はGitHub.comまたはGitHub Enterprise CloudでホストされているGitHubリポジトリで機能します。GitHub Enterprise Serverを使用するリポジトリはサポートされていません。
Azure DevOpsリモートインデックス作成
VS Codeは、Azure DevOpsリポジトリのリモートインデックスも使用できます。これらのインデックスは自動的に構築および管理されます。VS CodeでMicrosoftアカウントでサインインすると、チャットはリモートインデックスの使用を開始します。アカウントにAzure DevOpsリポジトリにアクセスするための適切な権限がない場合は、Copilotステータスバー項目で現在のインデックスステータスを確認し、サインインリンクを取得してください。
ローカルインデックス
たとえば、GitHubまたはAzure DevOpsリポジトリを使用していないため、リモートインデックスを使用できない場合、VS Codeはマシンにローカルに保存されている高度なセマンティックインデックスを使用して、高速で高品質な検索結果を提供できます。現在、ローカルインデックスは2500個のインデックス可能なファイルに制限されています。
ローカルインデックスを構築するには
-
プロジェクトにインデックス可能なファイルが750個未満の場合:VS Codeは高度なローカルインデックスを自動的に構築します。
-
プロジェクトにインデックス可能なファイルが750〜2500個の場合:コマンドパレット(
kb(workbench.action.showCommands)))でローカルワークスペースインデックスの構築コマンドを実行します。これは1回だけ実行してください。 -
プロジェクトにインデックス可能なファイルが2500個を超える場合:基本インデックスを使用します。
最初のローカルインデックスの構築や、多くのファイルが変更された場合(gitブランチの切り替え時など)のインデックスの更新には時間がかかる場合があります。現在のローカルインデックスのステータスは、ステータスバーのCopilotステータスダッシュボードで監視できます。
基本インデックス
プロジェクトにリモートインデックスがなく、2500個以上のインデックス可能なファイルがある場合、VS Codeはコードベースを検索するために基本インデックスを使用します。このインデックスは、コードベースを検索するためにシンプルなアルゴリズムを使用し、大規模なコードベースでローカルに機能するように最適化されています。
基本インデックスは、多くの種類のチャットプロンプトで問題なく機能するはずです。ただし、チャットがコードベースに関する質問に対して関連する回答を提供できないと感じる場合は、リモートインデックスへのアップグレードを検討してください。
ワークスペースインデックスに含まれるコンテンツ
VS Codeは、現在のプロジェクトの一部である関連するテキストファイルをインデックス化します。これは特定のファイルタイプやプログラミング言語に限定されませんが、VS Codeは通常ワークスペースの質問に関連しない一般的なファイルタイプ(例:.tmpや.outファイル)を自動的にスキップします。
ワークスペースインデックスには、files.exclude設定を使用してVS Codeから除外されたファイルや、.gitignoreファイルの一部であるファイルも除外されます。
VS Codeは現在、画像やPDFなどのバイナリファイルもインデックス化しません。
チャットでワークスペースコンテキストを使用する
チャットでワークスペース関連の質問をする場合、ワークスペースコンテキストを決定する動作は、使用しているチャットモードによって異なります。
-
エージェントモード
エージェントモードでは、エージェントはプロンプトに基づいてエージェント的なコードベース検索を自動的に実行します。これは、ワークスペースコンテキストを決定するための初期検索を実行した後、結果に応じて、質問に答えるために必要な情報を収集するために、より的を絞った追加検索を実行することをエージェントが決定する可能性があることを意味します。
プロンプトで
#codebaseツールを明示的に参照する必要はありませんが、ワークスペースコンテキストが質問に使用されることを確認したい場合は、そうすることができます。これは、プロンプトがあいまいであり、ワークスペースコンテキストを必要としないと解釈される可能性がある場合に役立ちます。 -
質問/編集モード
質問モードおよび編集モードでは、VS Codeはプロンプトに対して意図検出を実行し、ワークスペースコンテキストが必要かどうかを判断します。ワークスペースコンテキストが必要な場合、VS Codeはコードベース検索を実行し、関連するコードスニペットをチャットコンテキストに追加します。エージェントモードとは異なり、後続の検索は実行されません。
プロンプトで
#codebaseツールを明示的に参照する必要はありませんが、ワークスペースコンテキストが質問に使用されることを確認したい場合は、そうすることができます。これは、プロンプトがあいまいであり、ワークスペースコンテキストを必要としないと解釈される可能性がある場合に役立ちます。
ワークスペースコンテキストを使用するためのヒント
質問の表現方法は、コンテキストの質と回答の精度に大きく影響します。結果を最適化するために、次のヒントを考慮してください。
- 質問は具体的かつ詳細にし、「これは何をするのか」のように、「これ」が最後の回答、現在のファイル、またはプロジェクト全体と解釈される可能性があるあいまいな用語を避けてください。
- コードやそのドキュメントに表示される可能性のある用語や概念をプロンプトに組み込みます。
- コードを選択したり、ファイルを参照したり、デバッグコンテキスト、ターミナル出力などの#-メンションコンテキスト項目を使用して、関連するコンテキストを明示的に含めます。
- 応答は、「catchブロックのない例外を見つける」や「handleErrorがどのように呼び出されるかの例を提供する」など、複数の参照から情報を得ることができます。ただし、「この関数は何回呼び出されますか?」や「このプロジェクトのすべてのバグを修正する」のような、コードベース全体にわたる包括的なコード分析を期待しないでください。
- コード以外の情報について質問する場合、たとえば「このファイルに貢献したのは誰ですか?」や「このフォルダのレビューコメントを要約してください」のような場合は、エージェントモードで関連するツールまたはMCPサーバーを構成してください。
よくある質問
@workspaceと#codebaseの違いは何ですか?
概念的に、@workspaceと#codebaseは両方ともコードベース全体に関する質問を可能にします。ただし、それらの使用方法にはいくつかの違いがあります。
-
@workspaceはチャット参加者です。@workspace参加者は、コードベースに関する質問に特化した主題のエキスパートです。言語モデルはチャットプロンプト全体を参加者に渡し、参加者はコードベースの知識を使用して回答を提供します。チャット参加者を使用する場合、言語モデルは追加の処理を実行したり、他のツールを呼び出したりすることはできません。チャットプロンプトには1つのチャット参加者のみを含めることができます。 -
#codebaseはチャットツールです。#codebaseツールは、コードベースから関連情報を検索することに特化しています。これは、言語モデルがチャットプロンプトに答えるときに呼び出すことができる多くのツールの1つです。言語モデルは、#codebaseツールを複数回、他のツールと組み合わせて呼び出すことを決定し、質問に答えるために必要な情報を収集することができます。チャットプロンプトには複数のツールを含めることができます。
より柔軟性があるため、チャットプロンプトで#codebaseを使用することをお勧めします。