Communitygithub.com

ドメインモデリングスキル

プロジェクトのユビキタス言語、エンティティ、値オブジェクト、集約、リレーションシップ、不変条件、境界付けられたコンテキストを、簡潔なdocs/domain.md(または既存のGLOSSARY.md)に構築・維持します。新しいドメイン概念が出現した時、用語が一貫して使われていない時、機能設計中、またはユーザーがドメイン用語やエンティティの境界を定義・明確化・更新するよう求めた時に使用します。

ドメインモデリングスキル とは?

このスキルは、プロジェクト内で「ものの意味」に関する単一の共有された情報源を維持するためのものです。コード、ドキュメント、チケット、会話で同じ言葉が同じ意味で使われるようにします。 主な機能は、会話やコードから用語を抽出し、ユーザーとの対話を通じて曖昧さを解消し、確認済みの用語のみをドメインドキュメントに追記することです。未確認の用語は「Open Questions」として管理し、ユーザーの確認を待ちます。 このスキルは、Claude Code、Cursor、Codexなど、ファイルシステムと対話できるあらゆるAIエージェントプラットフォームで使用できます。SKILL.mdに記載されたプロセスに従い、ドメインモデルを読み取り、用語を抽出・確認し、定義・境界・関係性を明確化した上でドキュメントを更新します。 結果として、プロジェクト全体で使用される一貫性のあるドメイン言語が構築され、開発者間の認識齟齬が減少し、コードとドキュメントの間の乖離(ドリフト)が可視化されます。最終的には、より堅牢で保守性の高いソフトウェア開発に貢献します。

対応~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/aTeering/skills/tree/HEAD/skills/domain-modelling

お気に入りのAIに質問する

このエージェントスキルを事前に読み込んだ状態で新しいチャットを開きます。

ドキュメント

ドメインモデリング

プロジェクトにおける「もの」の意味に関する、共有された簡潔な情報源を維持し、コード、ドキュメント、チケット、会話が同じものに対して同じ言葉を使用するようにします。

焦点: $ARGUMENTS(空の場合は、このセッションで議論中の内容をモデリングします)

暗黙の前提は絶対に禁止。 用語の意味はユーザーが決定します。コード、ドキュメント、または会話からあなたが推測した定義、正規名、同義語、関係性、カーディナリティ、または不変条件は、ユーザーが確認するまでは単なる仮定です。それらを ✅ 確認済み · ❓ 未確認 · ❌ 却下 として追跡し、確認済みのものだけをドメインドキュメントに事実として書き込みます。

モデルの保存場所

  • GLOSSARY.md または docs/domain.md が既に存在する場合は、それを使用します(既存のファイルを優先し、両方を作成しないでください)。
  • それ以外の場合は、以下の構造を使用して docs/domain.md を作成します。

プロセス

  1. 読み取り: 現在のドメインドキュメントと、焦点となっている概念を実装するコード(型、スキーマ、DBモデル、APIコントラクト)を読み取ります。コードは実際のモデルの証拠であり、ドキュメントは意図されたモデルです。両者の間に乖離があれば注意してください。どちらも、ユーザーの意図を直接教えてくれるわけではありません。矛盾がある場合は、いずれかを選択するのではなく、ユーザーに質問して解決します。
  2. 用語候補の抽出: 会話、仕様書、またはチケットから用語の候補を抽出します。それぞれについて、新しい用語か、既存の用語か、既存の用語の同義語かを提案し、ユーザーに確認を求めます。見た目が似ている二つの単語が異なる概念である可能性があります。
  3. 曖昧性の解消: ユーザーに具体的で簡潔な質問をします。
    • 「Workspace は Organisation と同じものですか?それとも、一つの組織が複数のワークスペースを持つことはできますか?」
    • 「Order は Customer なしで存在できますか?注文について常に真でなければならないことは何ですか?」 概念ごとに一つの正規名をユーザーと合意します(あなたが推奨しても構いません)。却下された同義語は Avoid としてリストします。
  4. 境界の定義: 同一性(エンティティ vs 値オブジェクト)、所有権/集約ルート、カーディナリティ、ライフサイクル/状態、不変条件を定義します。プロジェクトに複数の境界付けられたコンテキストがある場合は、用語がどのコンテキストに属するかを明記します。これらは、役立つ場合はコードから提案しますが、それぞれをユーザーに確認します。
  5. ドキュメントの更新: 確認済みの項目のみをドキュメントに追加します。差分は最小限に抑え、セクション内はアルファベット順に並べ、エッセイは書きません。定義の意味が変わった場合は、コミット/PRでその旨を伝え、誤った用語を使用しているコードにフラグを立てます。未解決の項目がある状態でユーザーが停止したい場合は、それらを ## Open Questions の下に ❓ マークを付けて追加し、用語集には決して入れません。
  6. 報告: 追加/変更した内容、発見したコードとモデルの乖離(ファイル:行 で示す)、およびまだ未解決の ❓ 項目を報告します。

ドキュメント構造(簡潔に保つ)

# ドメインモデル

## 用語集
| 用語 | 定義 | 避けるべき用語 |
|------|------------|-------|
| Order | 顧客が一つ以上のProductを購入するための確認済みリクエスト。 | purchase, cart |

## エンティティと集約
### Order(集約ルート)
- 同一性: `OrderId`
- 含む: OrderLine(1..n)
- 状態: draft → placed → paid → shipped | cancelled
- 不変条件: total ≥ 0; 支払い済みでなければ出荷不可

## リレーションシップ
- Customer 1 — n Order

## 境界付けられたコンテキスト(オプション)
- Billing: Invoice, Payment

ルール: 定義は可能な限り一文で記述します。他の用語集の用語を使用して定義します。実装の詳細は、それがドメインそのものである場合(例えば、顧客が目にするID形式など)を除き、含めないでください。

Individual skills in this repo

This repo contains 1 individual skill — each has its own dedicated page.

関連スキル