メインコンテンツまでスキップ

書籍の学びを Copilot Agent Skills にする ~現場で役立つシステム設計の原則編~

· 約8分
Rintaro Nakahodo
NLP Researcher · Engineer · Creator

えださん(@eda_sann)の記事「書籍の学びを Agent Skills にする ~現場で役立つシステム設計の原則編~」を読んで、「自分も実際に作ってみたい!」と思い、GitHub Copilot 向けに同テーマで実装してみました。

えださんは Claude Code の Agent Teams を活用した構成でしたが、本記事では:

  • GitHub Copilot(VS Code Agent Mode) で動く形式に移植
  • Skill の構造・フォーマットを丁寧に解説
  • 実際に動かした様子もあわせて紹介

という内容でお届けします。


Agent Skills とは?

Agent Skills は、AI エージェントに「専門的な手順書」を与えるオープンスタンダードです。 もともと Anthropic の Claude Code で導入された概念ですが、2025年12月にオープンスタンダード化され、GitHub Copilot でも利用できるようになりました。

他のカスタマイズ機能との違い

機能タイミング粒度用途
copilot-instructions.md常時ロードセッション全体コーディング規約・スタイル
Prompt Filesユーザーが呼び出すタスク単位よく使うプロンプトの再利用
Agent Skills関連タスク時に自動ロードタスク単位複雑なワークフロー・専門手順

Skills の最大の特徴は**「必要な時だけロードされる」**点です。 SKILL.md の frontmatter(description)だけが常時読まれ、タスクに関連すると判断されたときのみ全文がコンテキストに展開されます。これによりトークン消費を抑えつつ、多くのスキルを共存させられます。

配置場所

your-repo/
└── .github/
└── skills/
└── domain-extractor/ ← スキル名のフォルダ
└── SKILL.md ← 必須ファイル

.claude/skills/ に置いても Copilot が自動で認識します(Claude Code との共用が可能)。


今回作るスキル

えださんの記事と同様に、増田亨さんの『現場で役立つシステム設計の原則』をベースにした domain-extractor スキルを作ります。 書籍の核心的なアプローチである**「ヒト/モノ/コト」フレームワークでコトを起点にドメインモデルを発見する**手順をスキルとして形式化します。


SKILL.md の構造

SKILL.md は YAML frontmatter + Markdown 本文 で構成されます。

Frontmatter(必須)

---
name: domain-extractor
description: >
対話型ヒアリングによってドメインモデルを発見・整理するスキル。
「ドメイン設計を始めたい」「業務要件を整理したい」「DDDでどこから手をつけるか分からない」
といったプロンプトで自動的にロードされます。
---

description が**スキルの「名刺」**です。Copilot はここだけを常時読み、ユーザーのプロンプトと照合します。トリガーとなるキーワードや使用場面を具体的に書くのがポイントです。


実装した SKILL.md

---
name: domain-extractor
description: >
対話型ヒアリングによってドメインモデルを発見・整理するスキル。
「ドメイン設計を始めたい」「業務要件を整理したい」「DDDでどこから手をつけるか分からない」
といったプロンプトで自動的にロードされます。
『現場で役立つシステム設計の原則』(増田亨)の「ヒト/モノ/コト」フレームワークに基づき、
コト(業務イベント)を起点にドメインオブジェクト候補を段階的に特定し、
Markdown の分析レポートとして出力します。
---

# domain-extractor — 対話型ドメイン抽出スキル

## 基本原則(全フェーズ共通)

1. **コト起点** — 必ず業務の出来事(コト)から分析を始める
2. **小さく独立した部品** — 関心事ごとに小さなドメインオブジェクトを作る
3. **業務の言葉=コード** — 型名・関数名は業務用語と一致させる
4. **段階的な成長** — 粗い状態から始め、理解が深まるたびに改善を繰り返す
5. **コトに隠れたルール** — すべてのコトの背後に業務ルールが潜んでいる

## ヒアリングワークフロー

フェーズ 1: 業務の全体像 → 目的と範囲を把握する
フェーズ 2: コトの発見 → 業務イベントの時系列の連鎖を特定する
フェーズ 3: コトの深掘り → コトごとに業務ルールを抽出する
フェーズ 4: 横断的関心事 → 共通パターンとパッケージを発見する
フェーズ 5: 成果物の整理 → 分析レポートにまとめる

...(本文続く)

全文は後述のリポジトリで公開しています。


セットアップ手順

1. Agent Skills を有効化する

VS Code の設定(settings.json)に以下を追加します。

{
"chat.useAgentSkills": true
}

2. ファイルを配置する

mkdir -p .github/skills/domain-extractor
# SKILL.md をこのディレクトリに置く

3. Copilot Chat で呼び出す

Agent Mode で以下のように話しかけるだけです。

ドメイン設計を始めたいです。ECサイトの注文管理を整理したい。

Copilot が自動で domain-extractor スキルを認識し、ヒアリングを開始します。 スラッシュコマンドでも呼び出せます:

/domain-extractor

実際に動かしてみた

「音楽レッスン予約システム」を題材にヒアリングを試みました。

フェーズ 1 → コトの発見

Copilot:
こんにちは!ドメイン抽出スキルを起動しました 🏗️

まず最初に教えてください:
どのような業務・サービスのドメイン設計をしたいですか?

---

私:
音楽レッスンのオンライン予約システムです。
生徒が好きな講師を選んでレッスンを予約できるサービスです。

---

Copilot:
ありがとうございます!
「生徒が講師を選んでレッスンを予約する」というサービスですね。確認させてください。

🎵 音楽レッスン予約システム
- 主な登場人物:生徒、講師
- 中心的な価値:生徒が希望の講師・日時を選んでレッスンを受けられること

この理解で合っていますか?

次の質問です:
このシステムで起きる重要な「出来事」(〇〇する、〇〇された)を
時系列で教えてください。

フェーズ 3 → 業務ルールの抽出

コトの深掘りフェーズでは、各イベントに対してルールが掘り起こされました。

Copilot(抜粋):

「予約する」コトについて確認します。

[R-001] 講師が「対応可能」な時間帯にのみ予約できる
[R-002] 同じ時間帯に同じ講師の予約は 1 件まで
[R-003] 予約は開始 24 時間前までのみキャンセル可能

これらのルールは「予約」ドメインオブジェクトが持つべき知識です。
他に想定外のケース(例:生徒が無断キャンセルを繰り返すなど)はありますか?

最終成果物(抜粋)

# ドメイン分析レポート — 音楽レッスン予約システム

## 2. コトの連鎖

\`\`\`mermaid
flowchart LR
A[講師を探す] --> B[空き枠を確認する] --> C[予約する]
C --> D[レッスンを受ける] --> E[レビューを投稿する]
C --> F[予約をキャンセルする]
\`\`\`

## 5. ドメインオブジェクト候補

| オブジェクト名 | 種別 | 関連ルール |
|--------------|------|----------|
| 予約 | Entity | R-001, R-002, R-003 |
| レッスン枠 | Entity | R-001 |
| 受講料 | Value Object | R-004 |
| キャンセルポリシー | Value Object | R-003 |

Claude Code との違い

えださんの実装と比較すると、以下のような違いがあります。

観点えださん(Claude Code)本記事(GitHub Copilot)
マルチエージェント◎ Agent Teams で3役割△ 単一エージェント
IDE 統合ターミナル中心VS Code UI で完結
自動ロード# でスキル名を指定プロンプト内容で自動判定
対象ユーザー開発者向け開発者〜設計者まで

Claude Code の Agent Teams は、ファシリテーター・業務分析家・レビュアーの 3 役割を分担できるのが強みです。一方、Copilot の Skills は VS Code に統合されているため、コードを書きながらシームレスにドメイン設計ができる点が利便性の高さにつながります。


作ってみての感想

書籍の知識をスキルとして形式化する過程で、いくつか気づきがありました。

良かった点

  • ヒアリングの順序を設計することで、「読んだ気になっていた」部分の理解が深まった
  • フェーズ分けによって「どこまでが分析でどこからが設計か」が明確になった
  • Copilot が description だけでトリガー判定するため、description の言葉選びが思った以上に重要だった

難しかった点

  • Claude Code の Agent Teams に比べると、単一エージェントでの多役割こなしは指示が複雑になりがち
  • フェーズ進行の制御(「次に進む前に確認する」)をプロンプトで表現するのは工夫が要る

まとめ

  • Agent Skills は SKILL.md 1ファイルで始められるシンプルなオープンスタンダード
  • GitHub Copilot(VS Code)でも .github/skills/ に置くだけで動く
  • description の書き方がトリガー精度に直結するため、使い方の例文を具体的に書くのが重要
  • 書籍の知識をスキルとして形式化すると、理解の曖昧な部分が浮き彫りになってよい

今後は他の技術書の知識も Agent Skills として形式化していきたいと思います。


参考リンク