はじめに
AIツールとしてGithub CopilotとKiroを両方使うプロジェクトも世の中にあります。
ですが、CoplilotとKiroではskill(steering)の互換性がありません。
Copilot 用に書いた Skill を Kiro 側でも活かしたいが二重管理はしたくない。
そこで、Copilotの Skill を Kiro でも自動で使えるようにする仕組みをスクリプト + GitHub Actions で構築した方法を紹介します。
前提となる2つの仕組み
GitHub Copilot の Skill
.github/skills/<skill-name>/SKILL.md に配置。frontmatter にメタ情報を持ちます。
---
name: my-review-skill
description: "コードレビューを行う。正確性・再利用・設計品質の3観点。"
---
# コードレビュースキル
(以下、レビュー手順などの本文)
Copilot は会話の文脈と description を見て、関連しそうな Skill を自動で取り込みます。
Kiro の Steering
.kiro/steering/<name>.md に配置。frontmatter の inclusion で取り込み方法を指定します。
| モード | 動作 |
|---|---|
inclusion: always |
毎回すべてのプロンプトに自動注入 |
inclusion: manual |
ユーザーが #ファイル名 で明示的に呼び出した時だけ |
inclusion: fileMatch |
指定パターンのファイルがコンテキストに入った時に自動注入 |
Kiro の Steering 取り込みは決定的(deterministic)です。Copilot のように「モデルが空気を読んで取り込む」のではなく、ルールで取り込みの可否が確定します。
ボツ案
今回いくつか方法を検討しましたが、先にボツ案を書きます。
私はGithub Copilotを先に使っていたので、「モデルが空気を読んで取り込む」部分が非常に便利であり、この機能に依存したSkillの書き方をしている箇所もありました。
この機能をkiroでも再現する方向で方針を考えた結果、以下の方針はボツとなりました。
-
(ボツ)Skill ごとに Steering ファイルを生成し全部常に読み込む
→ コンテキストを圧迫する。Skill が大量にあると非現実的 -
(ボツ)Skill ごとに
fileMatchで生成
→ fileMatchなので空気を読んで取り込みはしてくれない
インデックス方式の採用
最終的に、マスターファイルはGithub Copilot用のSkillで作成し、Skill 名と description の一覧だけを常時読み込み設定にしたKiro用の Steering ファイルを作成。
Kiro のモデルが必要に応じて該当 SKILL.md を読みに行く、という方式をとりました。
「目次だけ常に見せておき、本文はオンデマンドで読みに行かせる」 という発想です。
以下はGithub CopilotのskillをインデックスしたKiro Steeringファイルの例です。
---
inclusion: always
---
<!-- AUTO-GENERATED - DO NOT EDIT -->
# 利用可能なスキル一覧
以下は GitHub Copilot 用に定義されたスキルです。
ユーザーのリクエストに関連するスキルがある場合、該当する SKILL.md を読み込んで指示に従ってください。
## my-review-skill
name: my-review-skill
description: "コードレビューを行う。正確性・再利用・設計品質の3観点。"
ファイル: `.github/skills/my-review-skill/SKILL.md`
## my-deploy-skill
name: my-deploy-skill
description: "開発環境へのデプロイを実行する。"
argument-hint: "デプロイ先の環境名を指定してください"
ファイル: `.github/skills/my-deploy-skill/SKILL.md`
---
スキルの詳細が必要な場合は、上記ファイルパスの SKILL.md を読み込んでください。
生成スクリプト
やっていることはシンプルです。
-
.github/skills/*/SKILL.mdを全走査 - 各ファイルから frontmatter を正規表現で抽出
-
inclusion: alwaysの Steering ファイルとして.kiro/steering/skills-index.mdを上書き生成
冪等な処理なので、毎回全 Skill を走査して上書きし、削除された Skill の残骸も自動で消えます。
スクリプト本体は省略しますが、この記事をAIに読ませれば読者の環境でも再現できるはずです。
GitHub Actions で自動化する
Skill を変更するたびに手動でスクリプトを叩くのは忘れがちなので、GitHub Actions で自動化しました。
やったこと:
- トリガー:
.github/skills/**に変更がある PR が作成/更新された時 - 処理: Node.js で上記スクリプトを実行してインデックスを再生成
- コミット: 差分があれば同じ PR ブランチに自動コミット&プッシュ
こちらもスクリプト本体は省略しますが、AIを使えば再現できるはずです。
結果
KiroでもGithub Copilotと同じ使用感でSkillが使用できるようになりました。
多少トークン消費は増えます。詳細まで調査していないので体感レベルですが、プロジェクトとしては許容範囲内です。
まだスキル数が十数個なので、今後もっと大規模に運用しても成立するかは確認していかないといけない所です。
本ブログに掲載している内容は、私個人の見解であり、所属する組織の立場や戦略、意見を代表するものではありません。