はじめに
GitHub Copilotで相当開発が効率化できるようになりました。各種データや体験ブログなんかもたくさんありますが、個人的にはGitHub Copilot Chat無しの開発はもうあまり考えられません。同じIDE上でシームレスにサポートしてもらえるのって本当に良いですよね。
と、先日の以下の情報がでてきました。VS Code Chat Extensionsを使うことで、GitHub Copilot Chatをさらに拡張できるとのこと。今回は自前のChatアシスタントを作って、こういう風に使えるのでは、という話を書きたいと思います。
注意
VS Code Extensionの Chat API と Language Model APIは、2024 年 7 月の VS Code 安定版リリースで完成する予定とのことです。そのため、本記事の実装コード部分については変更が発生する/している可能性があります。またそれまではVS Code Insider版を使わないと動作確認もできません。
できるようになること
プロジェクト標準などの独自のチェックシートをもとにした実装レビューを、自前で用意したChatアシスタントに随時レビューさせることができるようになります。もちろん他にもWebベースのRAGだとかにも使えたりと、色々と使い道はあるかと思いますが、まず思いついたのがこれです。
チェックの内容自体はとりあえずの動作確認のために超適当です。こんなチェックはないだろ…、っていうのはご愛敬として、コードを実装中に任意のタイミングで GitHub Copilot にチェックシートベースのレビューを実施させることができます。
以下の通り @iruka で独自のアシスタントを呼び、/review でレビューを依頼、 #file: を使ってチェックしたい開発中のソースコードを指定しています。(アイコンはDALLEで作成しました。つぶれて良く見えませんが・・)
静的解析として、機械的にコード解析できる部分はこれまで通り実施した上で、人間系でチェックしていた独自レビューポイントなんかを生成AIにまかせられるのはとても良いですよね。
実装にあたって
サンプルで公開されている @cat のアシスタントをベースにしました。このサンプルは @cat とコマンドの使い方、初期設定など必要なものが大体入っていますので、これをもとに改造していきます。
例えば /review というキーワードが欲しければ、request.commandで判別します。
if (request.command == 'review') {
stream.progress('実装チェックリストを確認しています。');
また #file: でのファイル指定からファイルの内容を取得するためには、request.referencesを使います。reference.id が 'vscode.file'であることを確認したうえで、テキスト情報を読み込むことができます。以下の例ではfileで指定された複数データを1つのtexts配列に入れていますが、この辺はお好きなようにという感じです。
const references = request.references
const texts = [];
for (const reference of references) {
// #fileの場合
if(reference.id === 'vscode.file'){
// ファイルの内容を取得
const value = reference.value as vscode.Uri;
const path = value.path;
const file = vscode.Uri.file(path);
const document = await vscode.workspace.openTextDocument(file);
const text = document.getText();
// 内容をつめる(本当はファイル名とかも入れたほうがよい)
texts.push(text);
}
}
その上で、システムプロンプトでチェックする内容をいれていきます。
const system_pronpt = `\
あなたはプロジェクト標準化エンジニアです。入力されるユーザコードに対して、以下のチェックシート内容の各項目についてレビューし回答してください。
### チェックシート
1. ほげほげ
2. ふがふが
このあたりは通常のプロンプトです。サンプル回答とかもいれて精度をあげていきます。
ちなみに実装チェックリストの情報それ自体は、上述みたいにChat Extension の内部に包含してしまってもいいですが、やっぱりサーバサイドにおいて取得する方法の方がベターかなと思います。なお、サーバサイドに置く場合は認証も重要なポイントかと思います。VSCode Extensionsで認証情報を扱う場合は以下も参考にしてください。
おわりに
本記事では、VS Code Chat ExtensionsをつかってGitHub Copilot Chatを拡張し、レビューチェックシートをベースにプログラムをレビューさせる独自アシスタントについて紹介しました。
プルリクエストのタイミングなどで生成AIにレビューさせるのももちろんアリだと思いますが、今回のようにChat形式で任意のタイミングで実装レビューをかけることで、さらに品質向上に貢献するんじゃなかろうかと思います。
他にも色々な用途が考えられそうですが、取り急ぎ自前のCopilot ChatアシスタントがVS Code上で動くようになりましたということでまずはの1パターンのご紹介でした。
開発業務において、生成AIをどういう風に何でどう組み合わせて使うと良いのか、という観点で今後も抑えていきたいと思います。