Claude CodeからGitHub Copilotへ移植したらAgent Skillsが動かない?原因と解決策

Claude CodeのSkillsがCopilotで発火しない・読み込まれない原因は発火メカニズムの違い。description強化、トークン予算、Instructionsルーティングで解決。

はじめに

ども!GitHub Copilotが徐々に育ってきて、ニコニコな龍ちゃんです。1月後半から2月にかけてGitHub Copilot関連のブログが多めに出ています。ブログが出ているということは育っている証拠ですね。

今回は、前回紹介していた Agent Skills の話題です。「網羅5種ブログ」と「Claude Code→GitHub Copilot移行」では補足として触れていた Agent Skills を、Claude Code から実際に移植したという部分にフォーカスしていきます。

「Claude Code で使っていた Skills をそのまま GitHub Copilot に移植したら、まったく発火しない…」

同じ SKILL.md 形式なのに、なぜ動かないのか?本記事では、発火しない根本原因と3つの解決策を解説します。

検証環境


前提:Agent Skills の基本

Agent Skills の基本(ディレクトリ構造、SKILL.md の書き方)は「【2026年版】Agent Skills 入門:SKILL.md の基本から実践まで」を参照してください。

本記事では「発火しない」問題と解決策に特化します。


発火しない原因:Claude Code との根本的な違い

結論から言うと、Claude Code と GitHub Copilot ではスキルの発火メカニズムが根本的に異なります

: 以下は4つのスキルを実際に移植した際の動作検証から分析した内容です。公式ドキュメントで詳細が公開されていない部分は推測を含みます。

決定的 vs 確率的

観点Claude CodeGitHub Copilot
スキル把握全スキルを起動時に把握relevance に基づき選択的に読み込み
判断方式全情報を元に内部判断(情報完全)確率的な判定(事前フィルタリングあり)
description の役割発火判定に使用(全メタデータ把握後に判断)発火判定に使用(事前フィルタリングで判断)

GitHub Copilot も Claude Code も、Agent Skills には「Progressive Disclosure」という設計思想を採用しています。全スキルを事前に読み込むのではなく、関連度に基づいて必要なスキルのみを読み込む仕組みです。

違いは「どの段階で絞り込むか」にあります。

Claude Code は全スキルを把握した上で内部判断で選択するのに対し、Copilot は事前に絞り込んでから選択するため、description の書き方次第で「漏れ」が発生するのです。

: GitHub 公式では関連度スコアリングの詳細な実装方法は公開されていません。本記事の説明は動作検証からの推測を含みます。


Claude Code も Progressive Disclosure を採用していますが、その実装方法が異なります。

  1. メタデータ把握: 全スキルの Name + Description を起動時に把握
  2. 本体読み込み: 発火時に SKILL.md 本体を読み込み
  3. 参照ファイル: 必要に応じて references/ を参照

重要な違い: Claude Code は「全スキルのメタデータを把握した上で選択」するため、description が多少雑でも適切なスキルを選べます。一方 Copilot は「事前フィルタリング後に選択」するため、description の書き方次第で「漏れ」が発生します。

参考: Anthropic Engineering Blog – Agent Skills


description の設計思想が違う

ここが核心です。

Claude Code では「何をするか」をベースで書けばOKです。

description: ブログ記事をスクレイピングしてMarkdownに変換

内部ルーティングが賢いので、この程度の説明でも意図を理解してくれます。

GitHub Copilot では「スキルの機能と発火条件の両方」を書く必要があります。公式ガイドラインでは「describe BOTH what the skill does AND when to use it」と明記されています。

description: |
  ブログ記事をスクレイピングしてMarkdownに変換するスキル。
  Use when: ブログを取得したい、記事を保存したい、tech-lab.sios.jp の内容を取得したい。
  Triggers on: scrape blog, fetch article, ブログ取得, 記事取得.

関連度スコアリングではユーザーが実際に使う言葉を埋め込まないとスコアが上がりません。

核心の一文: Claude Code と同じ感覚で作ると発火しない。「技術的な説明」ではなく「ユーザーの発話」を埋め込む必要がある。

雑に作ると動かない理由

まとめると、こういうことです。

項目Claude CodeGitHub Copilot
設定の厳密さ雑でも動く厳密に作る必要あり
トークン予算気にしなくてOK500トークン以下推奨(上限5,000トークン)
結果同等の機能を実現可能(作法に従えば)

Claude Code のノリで雑にぶち込むと動きません。ただし、作法に従って厳密に作れば、Claude Code と同等の機能を実現できます

公式が推奨するベストプラクティスに盲目的に従う必要はないですが、一度は目を通しておいたほうがよい!という感じですね。Microsoftが公開しているリポジトリに含まれているGitHub Copilot Agent Skillsのガイドラインです。

補足: 比較のために大げさに書いていますが、Claude Code の Skills もちゃんと設計したほうが良いです!


解決策①:description を強化する

落とし穴:「英語で書くべき」Tips が逆効果になる場合

よく「システムプロンプトは英語で書くべき」というTipsがありますよね。GitHub Copilot Agent Skills では、これが逆効果になる可能性があります

Copilot の関連度判定は文字列の類似度で判断していると推測されます。ユーザーの発話と description の言葉が近いほどスコアが上がります。日本語でプロンプトを書くユーザーには、日本語の発火キーワードが必要になります。英語だけで書くと、日本語クエリとの類似度が低くなり、発火しにくくなります。

結論: description には日本語・英語両方の発火キーワードを列挙しましょう。

推奨フォーマット

description: |
  [機能の簡潔な説明(何をするスキルか)].
  Use when: [どんな時に使うか(ユーザーの意図)].
  Triggers on: [発火キーワード(日本語・英語)].

Before / After

Before(発火しない):

description: HTMLをPlaywrightでレンダリングしてPNG画像に変換

After(発火する):

description: |
  HTMLファイルをPlaywrightでレンダリングしてPNG画像に変換するスキル。
  Use when: HTMLを画像化したい、スクリーンショットを撮りたい。
  Triggers on: HTMLをPNGに変換, HTML to PNG, 画像に変換, HTMLを画像に, screenshot HTML, HTMLをキャプチャ.

ポイントは「技術的に何をするか」ではなく、「ユーザーがどう言うか」を想像して書くことです。


解決策②:トークン予算を守る

Copilot はトークン効率を重視する設計です。SKILL.md が長すぎると、そもそも読み込まれない可能性があります。

ファイル推奨上限
SKILL.md500トークン以下(約60行目安)5,000トークン
references/*.md1,000トークン2,000トークン

分割パターン

長くなりそうな場合は、詳細を references/ に分割しましょう。

.github/skills/my-skill/
├── SKILL.md              # 概要 + Quick Start(〜60行)
└── references/
    ├── commands.md       # コマンド詳細
    └── troubleshooting.md

SKILL.md は「ルーター役」に徹して、詳細は必要な時だけ読み込まれるようにします。


解決策③:Instructions ルーティング(力技)

正直、関連度スコアリングは不安定です。description を強化しても、発火したりしなかったりすることがあります。

そこで最終手段として、copilot-instructions.md に明示的なルーティングテーブルを追加する方法があります。

## Agent Skills Routing

| キーワード                             | スキル       | パス                                   |
|----------------------------------------|--------------|----------------------------------------|
| ブログスクレイピング, tech-lab.sios.jp | blog-scraper | `.github/skills/blog-scraper/SKILL.md` |
| フローチャート, 図                     | html-diagram | `.github/skills/html-diagram/SKILL.md` |

なぜ有効か

  • Instructions は常に読み込まれる
  • 関連度スコアリングをバイパスできる
  • 発火が安定する

デメリット(トレードオフ)

力技ゆえのデメリットも認識しておきましょう。

  • 保守性の低下: スキルを追加・変更するたびにルーティングテーブルの更新が必要
  • スケーラビリティ: スキル数が増えると Instructions ファイルが肥大化
  • 本来の設計思想から外れる: Progressive Disclosure の恩恵を受けられない

結論: 確実に発火させたい重要なスキル(3〜5個程度)に限定して使うのがおすすめです。

検証結果:4スキルで発火確認

実際に Claude Code から移植した4つのスキルで検証しました。

スキルプロンプト結果発火経路
blog-scrapertech-lab.sios.jp + 取得してInstructions
html-diagramHTMLで図化してInstructions
copilot-chat-converterMarkdownに変換してInstructions
html-to-png連携呼び出しスキル内

結論: Instructions ルーティングテーブルで全スキル安定発火しました。

検証に使用したスキルの概要:

スキル概要関連記事
blog-scraperブログ記事をMarkdown形式で保存HTML→Markdown変換
html-diagramTailwind CSSで図解を自動生成HTML図解自動生成
copilot-chat-converterChat履歴JSONをMarkdownに変換
html-to-pngHTMLをPNG画像に変換html-diagramと連携

移植チェックリスト

Claude Code Skills → GitHub Copilot への移植手順をまとめました。

- [ ] `.claude/skills/` → `.github/skills/` にコピー
- [ ] `allowed-tools` を削除(Copilot では実験的機能)
- [ ] description に `Use when` / `Triggers on` を追加
- [ ] ユーザー発話を日本語・英語で列挙
- [ ] SKILL.md を 500トークン以下(約60行目安)に削減
- [ ] `copilot-instructions.md` にルーティングテーブル追加(重要スキルのみ)
- [ ] VS Code リロード後、5〜10分待機
- [ ] 発火テスト

このチェックリストに従えば、Claude Code で作ったスキルを GitHub Copilot でも活用できます。


まとめ

Agent Skills が発火しない問題と解決策を整理しました。

ポイント内容
原因Claude Code(全スキル把握)と GitHub Copilot(事前フィルタリング)で仕組みが違う
description「何をするか」+「いつ使うか(Use when / Triggers on)」の両方を書く
解決策① description 強化 ② トークン予算 ③ Instructions ルーティング(力技)
結論作法に従って厳密に作れば、Claude Code と同等の機能を実現可能

発火しない場合は、本記事の3つの解決策を順番に試してみてください。特に Instructions ルーティングは確実性が高いのでおすすめです。


参考リンク

公式ドキュメント

公式リポジトリ

関連記事


ここまで読んでいただき、ありがとうございました!

Agent Skills の発火問題で困っている方の参考になれば幸いです。Claude Code から移行する方は、ぜひ移植チェックリストを活用してください。

ご覧いただきありがとうございます! この投稿はお役に立ちましたか?

役に立った 役に立たなかった

0人がこの投稿は役に立ったと言っています。
エンジニア募集中!

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です