コンテンツにスキップ

copilot 用のプロンプトを git subtree で取り込む

背景

VSCode で Copilot を使うときに、instructionschatmodesprompts を設定できる。これらは、Copilot の動作をカスタマイズするために利用される。 github/awesome-copilotのレポジトリには、これらの設定を事前に定義したものがあり、そのプロンプト集を取り込んで開発に活用できないかと考えた。

取り込む方法の検討

このレポジトリのプロンプトを取り込む方法として、3 つの方法を検討した。1 つ目は curl や wget などを用いて直接ファイルをダウンロードする方法、2 つ目はgit submoduleを利用してレポジトリをサブモジュールとして追加する方法、3 つ目はgit subtreeを利用してレポジトリをサブツリーとして追加する方法。 1 つ目の方法は git を使わないため、プロンプトのバージョン管理がしづらい。2 つ目の方法は、取り込んだプロンプトをカスタマイズできない。取り込んだプロンプトをカスタマイズできて、かつプロンプトのバージョン管理ができる方法として、3 つ目のgit subtreeで取り込むことにした。

取り込み手順

git subtreeを利用して、プロンプトを取り込む手順は以下の通り。

  1. git remote にプロンプト集のレポジトリを追加する。
    git remote add prompts https://github.com/github/awesome-copilot
    
  2. git subtreeを利用して、プロンプト集のレポジトリをサブツリーとして追加する。
    git subtree add --prefix subtree/awesome-copilot prompts main --squash
    
    ここで、--prefixオプションは、サブツリーを追加するディレクトリを指定する。
  3. . git logを利用して、取り込んだプロンプトのコミットログを確認する。
    git log
    
  4. 取り込んだプロンプトを利用できるように、vscode の設定ファイルを更新する。
    .vscode/settings.json
    {
      "chat.promptFilesLocations": {
        ".github/prompts": true,
        "subtree/awesome-copilot/prompts": true
      },
      "chat.instructionsFilesLocations": {
        ".github/instructions": true,
        "subtree/awesome-copilot/instructions": true
      },
      "chat.modeFilesLocations": {
        ".github/chatmodes": true,
        "subtree/awesome-copilot/chatmodes": true
      }
    }
    
  5. 取り込んだプロンプトが copilot の設定で利用できることを確認する。
    • /xxxを入力した時や chatmodes の切り替え時に、取り込んだプロンプトが表示されることを確認する
  6. 必要に応じて取り込んだプロンプトをカスタマイズする。
  7. git pushを利用して、取り込んだプロンプトをリモートリポジトリにプッシュする。
    git push origin main
    

まとめ

git subtreeを利用してプロンプトを取り込むことで、バージョン管理とプロンプトをカスタマイズを両立できる。既存のプロンプト集を活用することで、一からプロンプトを作成する手間を省略できる。

今後、開発組織でベースとなるプロンプト集を作成し、あらゆるプロジェクトで共通して利用できるようにする取り組みが広がっていくのではないかということを、今回の取り組みを通じて思った。

余談

今回 3 つの方法を検討したが、この施策を実施した後にgit-fetch-fileというツールを知った。これを利用すると、特定のファイルだけ取り込むことができる。