LoginSignup
2
2

開発をさらに効率化する VS Code Chat Extensions

Posted at

はじめに

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で作成しました。つぶれて良く見えませんが・・)

image.png

静的解析として、機械的にコード解析できる部分はこれまで通り実施した上で、人間系でチェックしていた独自レビューポイントなんかを生成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をどういう風に何でどう組み合わせて使うと良いのか、という観点で今後も抑えていきたいと思います。

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2