Skip to main content

第18章:仕様を図にする(最小のドメイン図)🧩🖼️

ddd_ts_study_018_minimal_domain_model.png

この章のゴール🎯

  • 仕様(言葉)を、“箱と線”の図に変換できるようになる😊
  • 図を見せながら、「なぜこう分けた?」を説明できるようになる🗣️✨
  • 図が「一枚絵で終わらず」、コードと一緒に更新できる状態になる🔁📌

1) “最小のドメイン図”ってなに?🤔🧠

いったん結論🍀

最小のドメイン図は、こんな感じの「最低限だけ描いた図」です👇

  • ✅ 主要な概念(名詞)=箱
  • ✅ つながり(関係)=線
  • ✅ 重要なら「多い/少ない(1対多)」や「含む(部品)」も軽く書く
  • ✅ 余裕があれば “集約の境界” をふんわり囲う(城壁みたいに🏯)

✨ポイント:UMLを完璧に描くのが目的じゃないよ! 「仕様の理解を揃える」「設計の相談ができる」ための“会話ツール”だよ😊🗣️


2) 図にする前の“下ごしらえ”🥕🧾

第12章の「ユビキタス言語(用語辞書)」と第13章の「イベント列挙」を材料にします🍳✨

2-1. 用語から“箱候補”を拾う📚🔎

まず「名詞」を拾います(重要語ほど強い)💪✨ 例(カフェ注文)☕🧾

  • 注文(Order)
  • 注文明細(OrderLine / LineItem)
  • 商品(MenuItem)
  • 金額(Money)
  • 数量(Quantity)
  • 状態(OrderStatus)
  • 支払い(Payment)※今回は最小なら “注文の状態” に吸収してもOK

まず「箱候補」をマインドマップで広げて整理するのもアリだよ🧠

2-2. “動詞”は線のラベル候補になる🏷️➡️

例:

  • 注文は明細を「含む」
  • 明細は商品を「参照する」
  • 注文は合計金額を「計算する」

3) 最小ドメイン図の描き方:5ステップ🧭✨

ステップ①:主人公(中心の箱)を1つ決める👑

カフェ注文ならだいたい Order(注文) が中心になりやすいよ☕🧾

ステップ②:中心が“持ってるもの”を足す📦

Order が持ってるもの:

  • 注文ID(OrderId)
  • 状態(OrderStatus)
  • 明細一覧(OrderLines)
  • 合計(TotalMoney)など

ステップ③:値っぽいものは VO に寄せる💎

  • Money / Quantity / 各種Id は Value Object候補(第31章以降で本格化するけど、ここでは“候補扱い”でOK)😊💎
  • ここで VO を意識すると、あとで型設計が気持ちよくなる〜🧡

ステップ④:関係線は「含む」「参照する」を中心に描く🔗

  • 含む:Order は OrderLine を含む(1対多)
  • 参照する:OrderLine は MenuItemId を参照する(商品そのものを抱えすぎない)

ステップ⑤:集約の境界(城壁)を薄く描く🏯

「一緒に不変条件を守る単位」が城壁の中🏰 最小図では、Order と OrderLine を同じ囲いにしがち(後の章で確定していくよ)😊


4) 例題:カフェ注文の“最小ドメイン図”🧩☕🧾

ここでは Mermaid の classDiagram を使うよ😊 Mermaid のクラス図構文は公式ドキュメントがあるので安心✨ (Mermaid)

VS Code の Markdown プレビューで Mermaid を描くなら、拡張機能(Mermaid対応)を入れるのが楽だよ〜🧡 例:Markdown プレビューに Mermaid を追加する拡張があるよ (Visual Studio Marketplace)


4-1. “構造”の最小図(箱と線)🧩🖼️

この図の読み方(口で説明できるようにする🗣️✨)

  • Order が中心で、外から触る操作(addItem/confirm/cancel)がここに集まるイメージ👑
  • OrderLine は注文の部品(明細は注文の一部)なので “contains”🧾📦
  • 商品は “MenuItem(実体)” を抱えず、まずは MenuItemId参照でスッキリ🔗✨
  • Money/Quantity/Id は “値” なので、Value Objectっぽく独立させてある💎

これだけでチームに「注文って何を持ってる?」「明細って何?」が説明できるようになるよ😊🎉


4-2. “集約境界”を足したいとき(超かるく)🏯✨

Mermaidの classDiagram で境界を表現するのは工夫が要るので、まずは注釈コメントでOK😊 (本格的には第51章以降でやるやつ!)

🏯 Aggregate(案)
- Order(Root)
- OrderLine(内部)
- 外部参照は ID が基本:MenuItemId

5) 図を“仕様に効く形”にするコツ5つ🧠✨

コツ①:DBっぽくしない(テーブル図にしない)🚫🗄️

  • ❌ order_table / order_line_table みたいな発想から入る
  • ✅ 「業務の言葉(注文/明細/状態)」から入る

コツ②:DTOやAPI都合を混ぜない🚫📦

  • ❌ OrderResponseDto とかを図に入れ始める
  • ✅ ドメイン図は “内側のルール” の箱だけにする

コツ③:線に“動詞”をつけると会話が楽🗣️➡️

  • contains / refers / calculates みたいに、関係が説明文になる😊

コツ④:箱の中身(属性・操作)は“最小でOK”✂️

  • 最初から全部入れると死ぬ😇
  • 「説明に必要な3つ」くらいだけで十分✨

コツ⑤:図は“固定じゃない”から怖がらない🔁

  • 学習中は特に、図が変わるのが正常🙆‍♀️
  • 図が変わる=理解が進んでる証拠🎉

6) VS Codeで図を回す“実務っぽい”やり方🛠️✨

パターンA:READMEに Mermaid を置く(最速)📄⚡

  • 図がコードと一緒に管理できる(レビューしやすい)👍
  • GitHub でも Mermaid 図を Markdown 内に書けるよ(公式) (GitHub Docs)

パターンB:PlantUML派ならこっち🌿

  • PlantUML の VS Code 拡張も定番で、プレビューやエクスポート機能がまとまってるよ🖼️ (Visual Studio Marketplace)

7) AIの使いどころ:図づくりは“相棒”が強い🤖💞

ここ、AIめっちゃ効くよ😊✨ (ただし “設計の決定権” はこっち!✋)

7-1. 良いプロンプト例(そのまま使える)🧾🤖

あなたはDDDの学習コーチです。
次の用語辞書とイベント一覧から、最小のドメイン図(箱と線)を作りたいです。

- 主要概念(名詞)を10個以内に絞って
- 関係は「含む」「参照する」を中心に
- Mermaid classDiagram のコードで出力して
- さらに、図の“説明文”も5行で書いて(なぜその関係?)

題材:カフェ注文
用語:Order, OrderLine, Money, Quantity, MenuItemId, OrderStatus ...
イベント:OrderPlaced, ItemAdded, OrderConfirmed, PaymentCompleted ...

7-2. AIにチェックさせる観点(強い)✅🔍

  • この図、**不変条件が守れそう?**🔒
  • “外部都合” が混ざってない?(DTO/DB/API)🚫
  • 関係線が 説明できる言葉になってる?🗣️
  • “どれが中心?” が一瞬で分かる?👑

8) ありがちな失敗あるある😂⚠️(先に潰そ!)

  • 箱が多すぎ(20個超えたら最小じゃない😇)
  • 線が多すぎ(蜘蛛の巣になる🕸️)
  • 「User」「Data」「Info」みたいな曖昧語が主役になる(意味が薄い)
  • UI入力の都合が混ざる(フォーム項目=ドメイン、になりがち)
  • 正しさより綺麗さを追い始める(図は会話ツール!)

9) ミニ演習(15〜30分)✍️⏱️✨

演習A:最小図を作る🧩

  1. 用語から「箱」を最大10個選ぶ
  2. 関係線を最大12本に制限して描く
  3. 図の説明を 5行で書く🗣️✨

演習B:図から質問を作る❓

  • 「OrderLineは Entity?VO?」
  • 「MenuItemは別集約?それとも注文内に入れる?」
  • 「支払いはOrderStatusで表現する?Paymentを分ける?」

→ これが次の章以降の伸びしろになるよ😊🌱


10) (最新情報メモ)TypeScriptの“本日時点”🧡📌

この教材全体の前提として、TypeScriptは現時点で npm の latest が 5.9.3 になってるよ(最終公開は2025年9月末として表示) (NPM) また、TypeScript 6.0 は 2026-02-10にBeta、2026-03-17にFinal予定として公開スケジュールが出ているよ (GitHub)

(第18章自体は“図”が主役だけど、こういう「今どうなってる?」は教材として押さえておくね😊✨)


この章のまとめ🎒✨

  • 最小ドメイン図は **「主要な箱+最低限の線」**でOK😊
  • 図は “完成品” じゃなくて 会話して育てる設計道具🔁
  • Mermaidで図をコード管理すると、更新できる図になる🧩🖼️
  • AIは 箱候補・関係候補・説明文で超役立つ🤖💞

次(第19章)は「何を作らないか(スコープ)」で、図に描かなかったものを“意図して除外”できる状態にしていくよ✂️😊✨