Copilot Chat をワークスペースのエキスパートにする
Copilot Chat で @workspace
を参照すると、コードベース全体について質問できます。質問に基づいて、Copilot は関連するファイルとシンボルをインテリジェントに取得し、それらをリンクとコード例として回答内で参照します。@workspace
参照に基づいて、Copilot Chat は次のようなタスクのドメインエキスパートになります。
- コードベース内の既存のコードを見つける
"@workspace データベースの接続文字列はどこに設定されていますか?"
- データベース接続がどこでどのように設定されているかを説明します"@workspace 日付を検証するにはどうすればよいですか?"
- コードベース内の既存の日付検証ヘルパーを見つけます"@workspace テストはどこで定義されていますか?"
- テストスイート、ケース、および関連する参照と構成の場所を提供します
- 複雑なコード編集の計画を立てる
"@workspace ボタンにリッチツールチップを追加するにはどうすればよいですか?"
- 既存のツールチップコンポーネントをボタン要素で使用するための計画を提供します"@workspace #selection に日付検証を追加"
- 選択したコードに既存の日付検証を適用する方法を計画します"@workspace パスワード忘れフォーム用の新しい API ルートを追加"
- 新しいルートを追加する場所と、既存のコードに接続する方法の概要を示します
- コードベース内のより高度な概念を説明する
"@workspace 認証はどのように実装されていますか?"
- 認証フローの概要と、関連するコードへの参照"@workspace どの API ルートがこのサービスに依存していますか?"
- 選択したコード内のサービスを使用するルートをリストします"この #codebase をビルドするにはどうすればよいですか?"
- ドキュメント、スクリプト、および構成に基づいてプロジェクトをビルドする手順をリストします
@workspace
はコンテキストにどのソースを使用しますか?
ご質問にお答えするために、@workspace
は、開発者が VS Code でコードベースをナビゲートするときに使用するのと同じソースを検索します。
- ワークスペース内のインデックス可能なすべてのファイル。ただし、
.gitignore
ファイルで無視されるファイルは除きます。 - ネストされたフォルダーとファイル名を含むディレクトリ構造
- ワークスペースが GitHub リポジトリであり、コード検索によってインデックスされている場合、GitHub のコード検索インデックス
- ワークスペース内のシンボルと定義
- 現在選択されているテキストまたはアクティブエディターに表示されているテキスト
無視されたファイル内でファイルを開いているか、テキストを選択している場合、.gitignore
はバイパスされます。
@workspace
はどのようにして最も関連性の高いコンテキストを見つけますか
完全な VS Code ワークスペースは、GitHub Copilot に渡してチャットプロンプトに応答するには大きすぎる可能性があります。代わりに、@workspace
は、Copilot の回答の根拠とするために、さまざまなコンテキストソースから最も関連性の高い情報を抽出します。
まず、@workspace
は、会話履歴、ワークスペース構造、および現在選択されているコードを含め、質問に答えるためにどの情報が必要かを判断します。
次に、ローカル検索または GitHub のコード検索 を使用して関連するコードスニペットを見つけたり、VS Code の言語 IntelliSense を使用して関数シグネチャ、パラメーターなどの詳細を追加したりするなど、さまざまなアプローチを使用してコンテキストを収集します。
最後に、このコンテキストは GitHub Copilot によって質問に回答するために使用されます。コンテキストが大きすぎる場合は、コンテキストの最も関連性の高い部分のみが使用されます。応答には、ファイル、ファイル範囲、およびシンボルへの参照がマークアップされています。これにより、チャット応答からコードベース内の対応する情報に直接リンクできます。Copilot に提供されたコードスニペットは、応答の参照としてリストされます。
@workspace
スラッシュコマンドのコンテキスト
@workspace
は、一般的に使用されるタスクのショートカットとして、いくつかのスラッシュコマンドを提供し、時間と入力の手間を省きます。各コマンドは、独自の最適化されたコンテキストを定義するため、追加のプロンプトまたはチャット変数の必要性を排除することがよくあります。利用可能なスラッシュコマンドとそのコンテキストを以下に示します。
コマンド | コンテキスト |
---|---|
/explain |
|
/tests |
|
/fix |
|
/new |
|
/newNotebook |
|
チャットプロンプトで #editor
、#selection
、#file
などのチャット変数を使用することにより、コンテキストを明示的に拡張できます。たとえば、別のファイルのパターンに基づいて現在のファイルのエラーを修正するには、次のチャットプロンプトを使用します。@workspace /fix linting error in the style of #file:form.ts
。
ワークスペースインデックスの管理
Copilot は、インデックスを使用して、コードベースから関連するコードスニペットを迅速かつ正確に検索します。このインデックスは、GitHub によって維持されるか、ローカルマシンに保存されます。このセクションでは、Copilot が使用できるさまざまなタイプのインデックス (リモート、ローカル、および 基本) について説明し、それぞれがいつ使用され、どのように切り替えることができるかを説明します。
Copilot が現在使用しているインデックスのタイプを確認するには、ステータスバーの {}
アイコンを選択して、言語ステータス UI を確認します。Copilot ワークスペースインデックスエントリには、インデックスタイプと、再インデックスされているファイル数など、このインデックスに関する関連情報が表示されます。
リモートインデックス
GitHub リポジトリの場合、Copilot は GitHub コード検索 を使用して、コードベースのリモートインデックスを構築できます。これにより、コードベースが非常に大きい場合でも、Copilot はコードベース全体を非常に迅速に検索できます。
リモートインデックスを使用するには
-
VS Code で GitHub アカウントでサインインします。
-
GitHub git リモートを使用してプロジェクトを開きます。コードを GitHub にプッシュしたことも確認してください。
リモートインデックスは、GitHub に比較的最新バージョンのコードがある場合に最適に機能するため、コードを定期的に GitHub にプッシュしてください。
-
リモートワークスペースインデックスを構築コマンドを実行するか、ワークスペースインデックスステータス UI の [インデックスを構築] ボタンを選択して、リモートインデックスを構築します。
リモートインデックスの構築には時間がかかる場合があります。特に大規模なコードベースの場合は時間がかかります。ワークスペースインデックスステータス UI でリモートインデックスのステータスを監視できます。
リモートインデックスが構築されると、GitHub はコードの変更をプッシュするたびに自動的に最新の状態に保ちます。リポジトリごとに リモートワークスペースインデックスを構築 コマンドを 1 回だけ実行する必要があります。
ローカルインデックス
リモートインデックスを使用できない場合、Copilot は代わりにローカルマシンに保存される高度なセマンティックインデックスを使用できます。このインデックスは、高速で高品質の検索結果を提供することもできます。ただし、現在インデックス可能なファイルは 2500 ファイルに制限されています。リモートインデックスとは異なり、ローカルインデックスはユーザーごと、マシンごとに 1 回構築する必要があります。リモートインデックスを使用すると、特定のリポジトリのすべてのユーザーが同じインデックスを使用できます。
Copilot は、プロジェクトにインデックス可能なファイルが 750 未満の場合、高度なローカルインデックスを自動的に構築します。750 ~ 2500 ファイルのプロジェクトの場合は、ローカルワークスペースインデックスを構築コマンドを実行してインデックス作成を開始できます。このコマンドは 1 回だけ実行する必要があります。
最初のローカルインデックスの構築や、多くのファイルが変更された場合 (git ブランチの切り替え時など) のインデックスの更新には時間がかかる場合があります。ワークスペースインデックスステータス UI で現在のローカルインデックスのステータスを監視できます。
基本インデックス
プロジェクトにリモートインデックスがなく、インデックス可能なファイルが 2500 を超える場合、Copilot は基本インデックスにフォールバックしてコードベースを検索します。このインデックスは、より単純なアルゴリズムを使用してコードベースを検索し、より大きなコードベースに対してローカルで動作するように最適化されています。
基本インデックスは、多くの質問に対して正常に機能するはずです。ただし、Copilot がコードベースに関する質問に苦労している場合は、リモートインデックスへのアップグレードを試してください。
ワークスペースインデックスに含まれるコンテンツ
Copilot は、現在のプロジェクトの一部である関連するテキストファイルをインデックス化します。これは、特定のファイルタイプまたはプログラミング言語に限定されませんが、Copilot は通常 @workspace
の質問に関連しない一般的なファイルタイプ (.tmp
ファイルや .out
ファイルなど) を自動的にスキップします。Copilot は、files.exclude 設定を使用して VS Code から除外されているファイル、または .gitignore
ファイルの一部であるファイルも除外します。
Copilot は現在、画像や PDF などのバイナリファイルをインデックス化しません。
@workspace
を使用するためのヒント
質問の言い方によって、@workspace
が提供する参照の品質と応答の精度が大きく左右される可能性があります。結果を最適化するために、次のヒントを考慮してください。
- 「これは何をするのですか」 (「これ」は、最後の回答、現在のファイル、またはプロジェクト全体などと解釈される可能性があります) のようなあいまいまたは不明確な用語を避け、質問では具体的かつ詳細にしてください。
- コードまたはそのドキュメントに現れる可能性が高い用語と概念をプロンプトに組み込みます。
- 応答で使用された参照を確認して、ファイルが関連していることを確認します。必要に応じて質問を反復処理します。
- コードを選択するか、
#editor
、#selection
、#file
などのチャット変数を記述して、関連するコンテキストを明示的に含めます。 - 応答は、「catch ブロックのない例外を見つける」や「handleError がどのように呼び出されるかの例を提供する」など、複数の参照から引用できます。ただし、「この関数は何回呼び出されますか?」や「このプロジェクトのすべてのバグを修正する」など、コードベース全体の包括的なコード分析を期待しないでください。
- 「誰がこのファイルに貢献しましたか?」や「このフォルダーのレビューコメントを要約する」など、(今のところ) コードを超えた情報を想定することは避けてください。