🗣️

VS CodeでGitHub Copilotに質問する方法まとめ

2024/09/11に公開

はじめに

GitHub Copilotは、VS Codeでコーディングしたりコマンドを実行したりする際に便利な存在です。コード補完やテストの生成など、様々な利用方法がありますが、本記事では「質問」にフォーカスして整理し、具体的な活用例について検討しました。

なお、GitHub Copilotの導入方法については触れません。詳しくは公式ドキュメントを参照ください。

動作環境

  • Windows 11
  • VS Code v1.93.0
  • GitHub Copilot v1.229.0
  • GitHub Copilot Chat v0.20.0(特記のない場合)

チャットの種類

GitHub Copilotでは、質問を投げかける方法がいくつか存在します。

右クリックメニュー

一番シンプルなのが右クリックメニューからコードを説明してもらうものです。ただし、質問する際にカスタマイズすることはできません。公式ドキュメントではチャットの分類に含めておらず、質問というよりも「説明の指示」だけができる機能といったほうが正確かもしれません。

インラインチャット

インラインチャットは、その名のとおりインラインで質問に回答してくれるものです。ショートカットはCtrl+i(MacではCommand+i)です。

クイックチャット

クイックチャットでは、より広い表示領域で質問に回答してくれます。ショートカットはShift+Ctrl+i(MacではShift+Command+i)です。

チャットビュー

チャットビューは、コードの表示領域とは別のビューで質問や回答ができます。最も広い領域をチャットに使用できます。ショートカットはAlt+Ctrl+i(MacではControl+Command+i)です。サイドバー(アクティビティバー)からも起動できます。

参加者とコンテキスト

質問をする際、特定のコードやコマンドなどを参照して回答してほしい場合が多くあります。そこで重要になるのが、チャット参加者(Chat participants)とチャットコンテキスト(Chat context)です。

チャット参加者はユーザーを助ける専門家のような存在で、3種類あります。

@workspace has context about the code in your workspace and can help you navigate it, finding relevant files or classes.
@vscode knows about commands and features in the VS Code editor itself, and can help you use them.
@terminal has context about the integrated terminal shell and its contents.

チャットに@から始まる変数を追加することで呼び出すことができます。

実験的な機能として、参加者の自動検出が提供されています。この機能を有効にすると、ユーザーが入力した文章から自動的に適当な参加者を呼び出してくれます。現状では、精度はそこまで高くない印象を受けましたが、今後改善されていくかもしれません。

また、チャット参加者はドメイン固有のコンテキストを提供することができます。コンテキストの提供方法は後述のようにいくつかありますが、チャットに#から始まる変数を追加することで可能です。チャット参加者と同時に呼び出す必要はありません(呼び出すこともできます)。

#codebase: the contents of the current workspace. It includes information about the files and folders in your workspace, as well as any settings or configurations specific to that workspace.
#editor: the code in the active editor. The editor content is implicitly included in the Chat view context.
#file: include a specified file in your workspace as context with your chat prompt.
#selection: the visible source code in the active editor.
#terminalLastCommand: the active terminal's last run command.
#terminalSelection: the active terminal's selection.
#vscodeAPI: use VS Code API references to answer questions about VS Code extension development.

ワークスペース全体のコンテキストを持っている#codebaseは便利な変数ですが、v0.20.0では利用できないようです。v0.21.2024091002 (pre-release)では利用できることを確認しました。なお、プレリリースバージョンへの切り替えは、拡張機能の画面から可能です。

参加者とコンテキストについて紹介してきましたが、参加者がコンテキストを持っていて、@から始まる変数と#から始まる変数が存在しているというのは分かりづらい側面もあると感じています。以降の節では、公式ドキュメントの「参加者」と「コンテキスト」という表現にとらわれず、自分の書いたコードなどのコンテキストを参照してもらう方法と、特定の専門分野について質問するときに役立つ変数について説明します。

コンテキストの指定

自分の書いたコードや、ターミナルに入力したコマンドなどについて参照してもらいたいとき、チャットの種類によって対応可能かどうかが異なります。その対応をまとめたのがこちらの表です。

参照先 右クリックメニュー インラインチャット クイックチャット チャットビュー
選択範囲
表示範囲
指定ファイル
最近表示または編集したファイル
ワークスペース △(v0.20.0では不可)
ターミナルで最後に実行したコマンド
ターミナルでの選択範囲
指定しない

選択範囲

前述のとおり、右クリックメニュー>Copilot>これを説明する と選択すると、選択範囲について説明してもらうことができます。それ以外の方法では質問をカスタマイズすることができます。

カーソルで選択する以外にも、下記の方法で指定することもできます。

  • 右クリック>Copilot>選択内容をチャットに追加
  • チャットでクリップアイコン>Selection(インラインチャットでは不可)
  • チャットで#selectionと入力

表示範囲

クイックチャットやチャットビューの場合は、自動で表示範囲を参照します。それ以外には、下記の方法でも参照可能です。

  • チャットでクリップアイコン>Current Editor(インラインチャットでは不可)
  • チャットで#editorと入力

指定ファイル

下記の方法で選択できます。

  • 右クリック>Copilot>ファイルをチャットに追加
  • チャットでクリップアイコン>(任意のファイルを選択)
  • チャットで#fileと入力

ただし現在表示しているファイルを選択する場合、個人的には上記方法によらず、全選択して質問することが多いです。

最近表示または編集したファイル

実験的な機能を有効にすると、最近表示または編集したコードを自動的にコンテキストとして使用されます。現在は、インラインチャットでのみ有効です。

ワークスペース

従来はチャットで@workspaceとすることでのみコンテキストを追加可能でしたが、GitHub Copilot Chatのv0.21.2024091002 (pre-release)では、下記の方法で指定できるようになっています。

  • チャットでクリップアイコン>Codebase
  • チャットで#codebaseと入力

これに伴い、インラインチャットでもワークスペース全体を踏まえた質問ができるようになります。

ターミナルで最後に実行したコマンド

下記の方法で選択できます。

  • チャットでクリップアイコン>Terminal Last Command
  • チャットで#terminalLastCommandと入力

ターミナルでの選択範囲

下記の方法で選択できます。

  • チャットでクリップアイコン>Terminal Selection
  • チャットで#terminalSelectionと入力

指定しない

表示しているコードなどについて全く関係のない質問をするには、空のファイルを作成して質問するしかなさそうです。

専門分野の指定

ターミナルやVS Codeに関連した質問をしたいときは、下記を含めて質問することでより精度の高い回答を期待できます。

@terminal

統合ターミナルシェルとその内容に関するコンテキストをもっています。

@vscode

VS Codeについて質問したいときに有用です。

#vscodeAPI

VS Code拡張機能の開発に関連した質問をする際に役立ちます。

質問の例

これまでの整理を踏まえて、具体的な活用例について検討してみます。

コード全体を踏まえて質問したい

@workspaceもしくは#codebase(pre-releaseバージョンのみ)を使用することができます。
こちらはチャットビューで@workspaceに質問してみた例です。

一方で、同じくチャットビューで#codebaseを追加した場合では、特定のコードについて焦点を当てて説明しているように見えます。チャットビューでは、自動で表示範囲も参照するためだと思われます。

したがって、コード全体の概要を知りたい場合は、@workspaceを使用し、コード全体を踏まえて特定のコードについて質問したい場合は#codebaseを使用するのが良いかもしれません。

選択範囲のコードを説明してほしい

コードを選択してから、好きな種類のチャットを起動して質問するのが手軽です。ここでは、コード選択後にAlt+Ctrl+iでチャットビューを開いて質問しています。

ターミナルのコマンドを調べたい

ターミナルでCtrl+i(MacではCommand+i)を押下するとターミナルインラインチャットと呼ばれるインラインチャットのターミナル版のようなものが開始され、@terminalが自動的に適用されます。必要に応じてそのままコマンドを実行することもできます。

ターミナルでの実行結果を説明してほしい

コマンドの実行がなぜ失敗したのかを知りたいとします。クイックチャットかチャットビューを開いて#terminalLastCommandと入力すると、失敗の原因を考察してもらうことができます。詳しく質問したい場合は、あわせて具体的な質問内容も入力すると良いでしょう。

VS Codeの操作方法を調べたい

好きなチャット画面を起動して@vscodeを使用して質問するのが良さそうです。

おわりに

この記事では、VS CodeでGitHub Copilotに質問する方法を整理しました。GitHub Copilotは今後さらに強化されていくことが期待されます。特に「チャット参加者の自動検出」の精度が高くなれば、チャット参加者の指定が不要になり、より便利になるかもしれません。

この記事が参考になれば幸いです。もし、他に良い質問方法をご存知の方がいらっしゃいましたら、ぜひコメントで教えてください。

参考資料

https://code.visualstudio.com/docs/copilot/copilot-chat
https://docs.github.com/ja/copilot/using-github-copilot/asking-github-copilot-questions-in-your-ide

更新履歴

  • 2024/10/04 「質問の例」を加筆
レスキューナウテックブログ

Discussion