GitHub Copilot Chatでハッシュ(#)を使ったコンテキスト変数を試してみた

2024.02.09

はじめに

GitHub Copilot Chat で #file, #editorのように # を利用すると、質問と同時に渡したい情報を投げることができる context variables という機能があります。

今回は現在(2024/2/8)までで利用可能な context variables を全て試してみました。

#file : 選択したファイル

チャットプロンプトと共にワークスペース内の指定されたファイルをコンテキストとして含めるために#fileを追加しました。入力の提案コントロールから#fileを選択し、表示されるクイックピックからファイルを選択してください。

可能であれば、ファイルの完全な内容が含まれます。コンテキストウィンドウに収まりきらないほど大きい場合は、実装を除いた関数とその説明を含むファイルのアウトラインが含まれます。アウトラインも大きすぎる場合は、ファイルはプロンプトの一部とはなりません。 https://code.visualstudio.com/updates/v1_86#_github-copilot

選択したファイルの内容をコンテキストに含めることができます。

#file まで入力すると、ファイル選択ダイアログに自動で移ってくれるのは嬉しい。

私が試している限りでは、 @workspace と併用しないとうまく動きませんでした。

@workspace をつけないと、コンテキストで送ってくれない↓

#editor : エディタの表示領域

以前は、アクティブなコードエディターから以下の2種類のコンテキストをデフォルトでチャットリクエストに含めていました:

  • テキストが選択されている場合、その選択範囲が含まれる
  • 選択範囲がない場合、アクティブなエディターの表示領域にあるコード範囲が含まれる

私たちは、一般的な質問をしたい場合に、エディターにあるコードがコンテキストとして含まれていることでLLMがそれをコードに関する質問と解釈してしまい混乱を招くことがあると分かりました。そのため、表示領域にあるコードをデフォルトで含めないように実験していますが、選択されているコードのみを含めるようにしています。

もちろん、エディターで見えるコードについて質問したいことがよくありますので、新しいコンテキスト変数#editorを追加しました。

https://code.visualstudio.com/updates/v1_86#_github-copilot

以前はエディタの表示部分がコンテキストとして送られていたんですね。

現状デフォルトではエディタの表示領域をコンテキストに含めないようになっていて、含めたい場合は #editor を利用すれば良いようです。

#editor を使わない場合

#editor を使う場合

#selection : エディタの選択箇所

#selection コンテキスト変数を使用すると、エディターで選択した特定のテキストにCopilotの提案を集中させることができます。

https://code.visualstudio.com/docs/copilot/prompt-crafting#_use-context-variables

ただ、コンテキスト変数を使わずともエディタで選択した箇所を含めて送ってくれるので、今のところ良い使い方が見つけられていません 👀

#terminalLastCommand : ターミナルで最後に実行したコマンドと結果

名前のままで、ターミナルで最後に実行したコマンドをコンテキストとして送ります。

試しに、package.json が存在しないディレクトリで npm install をしてみます。

エラー内容まで読み取ってくれるのは嬉しいです。

jestのテスト実行時に失敗しているファイルのサマリを見やすく表示する、とかで使うのも良さそう。

#terminalSelection : ターミナルの選択箇所

名前のままで、ターミナルの選択箇所を参照してくれます。

ちなみに、右クリックでも同じことができます。

コマンドの結果で意味がわからない言葉は多いので、意外と使い道が多そうです。

まとめ

コンテキスト変数、いまいち使いこなせていなかったのですが、今回の記事を書いたことで理解が深まりました!

今後もVSCodeのアップデートのたびに増えてきそうなので、次のアップデートが楽しみです。

新しい機能が追加され次第、引き続き試していきたいと思います!

参考