チャットをワークスペースのエキスパートにする
コードベース全体に関する質問をチャットで行うには、チャット プロンプトで @workspace
または #codebase
を参照します。質問に基づいて、チャットは関連するファイルとシンボルをインテリジェントに取得し、回答内でリンクやコード例として参照します。
@workspace
と #codebase
の違いは何ですか?
概念的には、@workspace
と #codebase
の両方で、コードベース全体に関する質問ができます。ただし、使用方法にはいくつかの違いがあります。
-
@workspace
- コードベースに関する質問に答えることに特化したチャット参加者。
- ユーザープロンプトを制御し、コードベースを使用して回答を提供します。
- 他のツールを呼び出すことはできません。
- ask モードでのみ使用できます。
- 例:
"@workspace 日付を検証する方法は?"
-
#codebase
- ユーザー プロンプトに基づいてコードベース検索を実行し、関連するコードをコンテキストとしてチャット プロンプトに追加するツール。
- LLM が制御を維持し、編集シナリオで他のツールと組み合わせることができます。
- すべてのチャット モード (ask、edit、agent) で使用できます。
- 例:
"このボタンに、他のボタンと一貫性のあるツールチップを追加して #codebase"
、"単体テストを追加して実行して #codebase"
より柔軟性があるため、チャット プロンプトでは #codebase
を使用することをお勧めします。
#codebase
が関連するコード スニペットをより効果的に見つけられるようにするには、github.copilot.chat.codesearch.enabled を有効にします。この設定はデフォルトで有効です。
プロンプトの例
- コードベース内の既存コードの検索
"@workspace データベース接続文字列はどこで設定されていますか?"
- データベース接続がどこで、どのように設定されているかを説明します"@workspace 日付を検証するにはどうすればよいですか?"
- コードベース内の既存の日付検証ヘルパーを検索します"@workspace テストはどこで定義されていますか?"
- テストスイート、テストケース、および関連する参照と構成の場所を提供します
- 複雑なコード編集の計画
"@workspace ボタンにリッチなツールチップを追加するにはどうすればよいですか?"
- 既存のツールチップ コンポーネントをボタン要素で使用するための計画を提供します"@workspace パスワードを忘れた場合のフォーム用の新しい API ルートを追加してください"
- 新しいルートを追加する場所と、それを既存のコードに接続する方法の概要を示します
- コードベース内の高レベルな概念の説明
"@workspace 認証はどのように実装されていますか?"
- 認証フローの概要と関連コードへの参照"@workspace どの API ルートがこのサービスに依存していますか?"
- 選択したコード内のサービスを使用するルートを一覧表示します"この #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 ステータス ダッシュボードで、インデックスの種類とそのステータスを表示できます。
リモートインデックス
コードが GitHub リポジトリでホストされている場合は、GitHub コード検索を使用してリモート インデックスを構築し、大規模なコードベースであっても AI がコードベースを迅速に検索できるようにすることができます。
ワークスペースのリモートインデックスを構築するには
-
VS Code で GitHub アカウントを使用してサインインします。
-
コマンド パレット (
kb(workbench.action.showCommands))
) で Build Remote Workspace Index コマンドを実行します。リモートインデックスの構築には、特に大規模なコードベースの場合、時間がかかることがあります。ステータスバーの Copilot ステータス ダッシュボードでリモートインデックスのステータスを監視できます。
リモートインデックスを構築する必要があるのは 1 回だけです。コードの変更をプッシュするたびに、GitHub が自動的に最新の状態に保ちます。
リモートインデックスの作成には、GitHub 上に git リモートを持つプロジェクトが必要です。コードを GitHub にもプッシュしたことを確認してください。リモートインデックスは、GitHub が比較的新しいバージョンのコードを持っている場合に最も効果的に機能するため、定期的にコードを GitHub にプッシュするようにしてください。
ローカルインデックス
リモートインデックスを使用できない場合、Copilot はローカルマシンに保存されている高度なセマンティックインデックスを使用して、高速で高品質な検索結果を提供できます。現在、ローカルインデックスは 2500 のインデックス可能ファイルに制限されています。
ローカルインデックスを構築するには
-
プロジェクトのインデックス可能ファイルが 750 未満の場合: Copilot は自動的に高度なローカルインデックスを構築します。
-
プロジェクトのインデックス可能ファイルが 750 ~ 2500 の場合: コマンドパレット (
kb(workbench.action.showCommands))
) で Build local workspace index コマンドを実行します。このコマンドは一度だけ実行する必要があります。 -
プロジェクトのインデックス可能ファイルが 2500 を超える場合: 以下の基本インデックスセクションを参照してください。
最初のローカルインデックスを構築したり、多くのファイルが変更された場合 (git ブランチを切り替えたときなど) にインデックスを更新したりするには、時間がかかることがあります。現在のローカルインデックスのステータスは、ステータスバーの Copilot ステータス ダッシュボードで監視できます。
基本インデックス
プロジェクトにリモートインデックスがなく、インデックス可能なファイルが 2500 を超える場合、Copilot は基本インデックスを使用してコードベースを検索します。このインデックスは、より単純なアルゴリズムを使用してコードベースを検索し、大規模なコードベースでローカルに動作するように最適化されています。
基本インデックスは多くの質問に対して問題なく機能するはずです。ただし、Copilot がコードベースに関する質問に答えるのに苦労している場合は、リモートインデックスへのアップグレードを試してください。
ワークスペース インデックスにはどのようなコンテンツが含まれますか
Copilot は、現在のプロジェクトの一部である関連するテキスト ファイルをインデックス付けします。これは特定のファイルの種類やプログラミング言語に限定されませんが、Copilot は .tmp
や .out
ファイルなど、通常 @workspace
の質問に関連しない一般的なファイルの種類を自動的にスキップします。また、Copilot は、files.exclude 設定を使用して VS Code から除外されているファイルや、.gitignore
ファイルの一部であるファイルも除外します。
Copilot は現在、画像や PDF などのバイナリファイルもインデックスに含めません。
ワークスペース コンテキストを使用するためのヒント
質問の表現方法は、コンテキストの質と応答の正確さに大きく影響します。結果を最適化するには、次のヒントを考慮してください。
- 質問は具体的かつ詳細にし、「これは何をするものですか」のような曖昧な用語は避けてください (「これ」は最後の回答、現在のファイル、プロジェクト全体などと解釈される可能性があります)。
- コードやドキュメントに現れそうな用語や概念をプロンプトに組み込みます。
- 応答の使用された参照を確認して、ファイルが関連性のあるものであることを確認します。必要に応じて質問を繰り返します。
- コードを選択したり、
#editor
、#selection
、#<ファイル名>
などのチャット変数を指定したりして、関連するコンテキストを明示的に含めます。 - 「catch ブロックのない例外を見つける」や「handleError がどのように呼び出されるかの例を示す」など、応答は複数の参照から引き出すことができます。ただし、「この関数は何回呼び出されますか?」や「このプロジェクトのすべてのバグを修正してください」など、コードベース全体にわたる包括的なコード分析は期待しないでください。
- 今のところ、「このファイルに貢献したのは誰ですか?」や「このフォルダーのレビューコメントを要約してください」など、コードを超える情報を想定することは避けてください。
関連リソース
- チャットプロンプトへのコンテキストの追加についてさらに学ぶ
- Copilot チャットチュートリアルを始める
- Copilot チャットについてさらに学ぶ