はじめに
複数のリポジトリ環境でAIエージェントに読ませるカスタムプロンプト(ルール)を共通管理する方法について説明します。
要約すると
AIが読むルールを管理する場所を作って、色んな開発リポジトリからそこを参照させようって話
この記事は、5分程度で読むことができます。
環境
Github Copilotを対象にします。
他のプロダクトでこの方法を活用する場合は、ルールを保存するパスなどお使いのプロダクトに合わせて適宜変更してください(Coursorなら、./cursor/rules等)。
目次
- どんな課題を解決しているか
- 流れ
- 手順
- tips
1.どんな課題を解決してるか
課題
モノレポの場合、コーディングAIエージェントに食わせるルールはそのプロジェクトのリポジトリで管理すればよいのですが、複数のリポジトリ(ポリレポ)で、1つのプロジェクトが成り立つ場合は、ルールの管理がめんどくさいです。
例えば、ルールを作成したり修正したいときに、1つ1つのリポジトリに変更を適用しなければいけないので、いろいろ問題起きそうですよね。
解決方法
上記の課題を解決するため、ルールを管理するリポジトリを作成し、各々のリポジトリでサブモジュールとして利用することで、複数リポジトリでのルール管理の負荷を削減できます。
補足
他にも解決方法あるかもなのでこれが全てではないです。
2.流れ
以下の流れを実施することで、一元管理されたルールを利用することができます。
- ルール管理リポジトリを作成
- ルールを格納
- 任意のリポジトリからルール管理リポジトリを参照できるようにする
- 任意のリポジトリで特定のルールの実体をみれるようにする
3.手順
初回導入手順
1: github上でルール管理リポジトリを作成し、ローカルにclone
・readme.mdは作成しなくてok
・ルール管理リポジトリをcloneする場所は、サブモジュールとして利用させたいリポジトリがあるworkingディレクトリと同一階層が好ましい(後述されるパスを変更すれば別の場所でもok)
2:cloneしたルール管理リポジトリで、以下のファイル(パス)を作成してリモートにpush
・./github/instructions/general.instructions.md
3: ルール管理リポジトリをサブモジュールとして利用したいリポジトリ(ここではportalリポジトリとする)に移動
4:portalリポジトリで、以下のコマンドを実行
git submodule add -b master https://github.com/xxx/copilot-rules.git .github/copilot-rules
5:Copilotに読ませるルールにリンクを貼る
・.github/instructionsがない場合はmkdirで作る
mkdir -p .github/instructions
・.github/instructions/general.instructions.md という「リンクファイル」を作成し、
その実体を .github/copilot-rules/.github/instructions/ruleA.instructions.mdに向ける
ln -sf ../copilot-rules/.github/instructions/ruleA.instructions.md \ .github/instructions/general.instructions.md
この手順で、portalリポジトリの.github/instructions/にgeneral.instructions.mdが出現するので、Copilotがルールを参照できるようになります。
補足
Copilotがルールを読むのは、instructions直下にあるファイルのみです。
.github/instructions/*.instructions.md
つまり、サブモジュールを追加するだけでは、Copilotの仕様上、ルールファイルが認識されません。
そのため、Copilotがルールを認識できるように ln -sコマンドの実行が必要 です。
ルールの更新手順
- ルールの更新は、ルール管理リポジトリ(ここではcopilot-rules)で実行する
- ルール管理リポジトリが更新された場合、以下のコマンドをルールを利用しているリポジトリ(ここではportal)で実行する
git submodule update --remote .github/copilot-rules
これにより、サブモジュール .github/copilot-rules の内容が最新化されます。
また、この時点で .github/instructions/general.instructions.md の中身も自動で最新になります。
4. tips
submoduleコマンド実行時エラーが起きた場合(existing fileなど)
開発ブランチへの導入時に、間違えてsubmodleコマンド打ったりした時は、自分はキャッシュとか全消ししてやり直してます(ファイルを削除したりするときは、消すべきファイルか注意が必要です)。
複数ルールを管理可能
.github/instructionsでは、ルールを複数管理することができるので、リポジトリAではruleAを利用し、リポジトリBではruleBを利用することができます。
そのため、lnコマンドを叩く際に、よしなに利用したいルールを指定してください。
リモートへのpush時の挙動
- ルールをサブモジュールとして、任意のリポジトリに紐づけてリモートにpushしても、開発リポジトリのGithub上ではルールファイル(.md)の中身は見えない
- 別リポジトリへのポインタ(SHA)だけが記録される
おわりに
本記事では、カスタムルールを一元管理する方法を説明しました。
ちなみに、個人的には Copilot より Cursor の方が使いやすくて好きです。