はじめに
こんにちは、ACS事業部の過部です。
皆さま、GitHub Copilot Chatをいかが活用されてますでしょうか。 GitHub Copilot Labsと比べてコード説明機能が格段に向上してこともあり、よわよわエンジニアの自分はソースコードに片っ端から/explainを実行してコードリーディング補助ツールとしてこき使っています。GitHub Copilot Chatは現在、限定パブリックベータ版としてGitHub Copilot for Businessユーザーが利用できます。詳しくはこちらのGitHub日本語ブログを参照してください。また、GitHub Copilot Chatのウェイトリストへの登録はこちらからできます。
GitHub Copilot Chatには日本語でコード説明を行ってくれる /explain-ja という隠し?コマンドがある様で、自分としては有り難い限りです。 ただ、このコマンドは/explainコマンドとは異なり、VSCode向けのコマンドとしては実装されてないため、GUI上でお手軽にキーバインドできません。
※ /explainの場合は上記の様なコマンドが用意されている。
今回は、VSCodeのキーバインディング設定ファイルであるkeybindings.jsonを弄って、/explain-jaをショートカットキーでサクッと実行できる様にする手順をご紹介します。
実行内容の整理
まずは、ショートカットキー押下時に実行したい内容を以下に整理します。
1. GitHub Copilot Chatの画面を開く
2. /explain-jaと入力する
3. 送信する
キーバインディング設定の作成
先ほど挙げた3つの処理を単一キーにバインドする必要があります。 今回はrunCommandsというコマンドを利用して、ショートカットキー押下時に実行する処理を複数指定していきます。
[ { "key": "ctrl+k ctrl+c", // バインドするショートカットキー "command": "runCommands", "args": { "commands": [ { "command": "workbench.panel.chat.view.copilot.focus", // GitHub Copilot Chatの画面を開く }, { "command": "type", // チャット欄に入力する "args": { "text": "/explain-ja" // 入力内容はここで指定 }, "when": "inputFocus" }, { "command": "chat.action.acceptInput", // チャット欄に入力した内容を送信する "when": "inChatInput && textInputFocus" } ] }, }, ]
上記をVSCodeのkeybindings.jsonに記述することで、 Ctrl + K, Ctrl + C を押下した際に、アクティブエディタのコード説明が日本語で表示される様になります。
言わずもがなですが、"/explain-ja"の部分を変更することで、別の定型文をGitHub Copilot Chatで実行させることもできます。
※ when句に関する説明はここでは割愛します。詳しくはこちらをご覧ください。
参考情報:キーにバインドしたいコマンドの調べ方
keybindings.jsonを記述するためには、実行したい処理に対応するコマンドを探す必要があります。(上記Jsonにおける workbench.panel.chat.view.copilot.focus や chat.action.acceptInput等)
公式ドキュメント等に載っているケースもありますが、今回のケースではいくら探せども見つからずとても苦戦してました。
そんな状況を解決してくれたのが、VSCodeのDeveloper: Toggle Keyboard Shortcuts Troubleshooting機能です。こちらをVSCodeのコマンドパレットから起動することで、実行されたコマンドをログ形式で出力してくれます。
下記はGitHub Copilot Chat画面に文章入力した状態でEnterキーを押下した際のログです。Enterキーを押下した際に、 chat.action.acceptInput コマンドが実行されているのが分かります。
2023-07-26 22:53:51.865 [info] [KeybindingService]: | Resolving Enter 2023-07-26 22:53:51.865 [info] [KeybindingService]: \ From 28 keybinding entries, matched chat.action.acceptInput, when: inChatInput && textInputFocus, source: built-in. 2023-07-26 22:53:51.865 [info] [KeybindingService]: + Invoking command chat.action.acceptInput.
これを利用すればキーバインド設定が捗りそうですね。
終わりに
私達ACS事業部はAzure・AKSを活用した内製化のご支援をしております。ご相談等ありましたらぜひご連絡ください。
また、一緒に働いていただける仲間も募集中です!
切磋琢磨しながらスキルを向上できる、エンジニアには良い環境だと思います。ご興味を持っていただけたら嬉しく思います。