PR:この記事にはアフィリエイトリンクが含まれます。
業務ルールが増えてくると、機能を足すだけでは変更の影響範囲を追いにくくなります。ドメイン駆動設計(DDD)は、業務の言葉や判断をソフトウェアのモデルに映し、変化を受け止めやすくする考え方です。
境界づけられたコンテキストや集約は、名前だけ知っていても設計にはつなげにくいもの。イベントストーミングで業務の流れを見える形にすると、それぞれが担う役割もつかめます。
この記事では、DDDの基本から実践まで扱う4冊を取り上げます。境界づけられたコンテキスト、集約、イベントストーミングはどうつながるのか。書籍ごとの個性とあわせて見ていきましょう。
4冊の早見表
DDD本と一口に言っても、考え方を整理する本もあれば、コードを書きながら設計を追う本もあります。まずは題材や扱う範囲を表で見渡してみましょう。
| 書籍 | 主な内容 | 特徴 |
|---|---|---|
[入門]ドメイン駆動設計――基礎と実践・クリーンアーキテクチャ | DDD、イベントストーミング、イベントソーシング | 160ページで全体像を整理 |
つくりながら学ぶ! ドメイン駆動設計 実践入門 | 集約、UML、TypeScript、Outboxパターン | 書店カタログを題材に実装 |
ドメイン駆動設計をはじめよう | 事業分析、集約、境界づけられたコンテキスト | 5つのコンテキストを扱う事例研究 |
実践ドメイン駆動設計 | コンテキストマップ、イベント、集約など | 戦略から実装まで広く解説 |
参考価格は『[入門]ドメイン駆動設計――基礎と実践・クリーンアーキテクチャ』が税込2,200円、『ドメイン駆動設計をはじめよう』が税込3,960円、『実践ドメイン駆動設計』が税込5,720円です。いずれも定価を目安にしてください。実売価格は時期や販売店で変わります。
同じDDD本でも、読み終えたときに持ち帰るものは違います。用語を押さえるのか、実装の流れを追うのか、事業と設計の関係を学ぶのか。読みたいことが決まると各書の違いも見えやすくなります。
DDDの考え方
DDDの出発点は、業務を理解し、その理解をソフトウェアのモデルに結びつけることです。まず業務担当者と何を解決する仕組みなのかを考え、モデルに反映します。
たとえば「商品」という言葉。カタログでは掲載情報を指し、注文では購入時点の価格や数量を含む明細を指すかもしれません。言葉の意味を現場で確かめることが、モデルのずれを防ぐ第一歩です。
共有する言葉は、会話だけでなく設計書やコードにも表れます。業務担当者が「出品を停止する」と話すなら、ソフトウェアにもその判断や状態の変化が伝わる名前を置く。認識違いに気づく手がかりになりますね。
DDDには、事業の役割からシステム全体を分ける戦略的設計と、オブジェクトや集約で業務ルールを表す戦術的設計があります。境界づけられたコンテキストは前者、集約は後者の代表例です。
境界づけられた文脈
境界づけられたコンテキストとは、特定のモデルと言葉が有効に使われる範囲のこと。同じ用語でも、範囲が変われば意味や判断基準は変わります。その違いを一つのモデルに押し込まないための境界、と考えると分かりやすいでしょう。
オンライン書店なら、カタログでの商品は「掲載する情報」、注文での商品は「購入明細」、在庫管理での商品は「保管や引き当ての対象」です。名前は同じでも、必要な属性や更新のタイミングは異なります。
境界を考えるとき、画面やテーブルの区切りだけで決めるのは早計です。業務の責任、使う言葉、変更の理由がどこで変わるのか。そこをたどると、コンテキストの候補が浮かびます。イベントストーミングも発見の助けになります。
コンテキストを分けても、システムやチームまで同じ数に分割する必要はありません。まずモデルが有効な範囲を見定め、ほかの範囲と何を受け渡すのかを考えます。ここを飛ばすと、用語やデータの食い違いが残りがちです。
集約で守る整合性
集約は、業務ルールを守りながら状態を保つためのまとまりです。外部からの変更は集約ルートを通し、ルートが内部の更新を制御します。では、どこまでを一つにするのか。出発点は、同時に守るべきルールです。
注文で考えてみましょう。「確定する注文には明細が一件以上ある」という条件なら、確定操作の際に注文の状態を確認できます。注文ルートがその操作を担えば、条件を確かめてから状態を変える流れを表せます。
関連するものをすべて一つの集約に入れると、変更が集中し、同時更新や処理の負荷が重くなりがちです。反対に細かく分けすぎると、集約をまたぐ処理の整合性を別の仕組みで扱うことに。境目の見極めが肝心です。
集約は、テーブルやクラスをまとめるための言葉ではありません。業務上の不変条件をどこで守るかを示す設計判断です。イベントや境界づけられたコンテキストとあわせて考えると、その役割がすっきり見えてきます。
イベントストーミング
イベントストーミングは、業務に詳しい人と開発者が、出来事の流れを並べて業務を理解するワークショップです。「注文が確定された」「商品が公開された」など、すでに起きた事実を時系列に置いていきます。
出来事の前後をたどると、誰が何をしたのか、どんな条件で処理が進むのかを整理できます。外部の仕組みとつながる箇所も見えてきます。付箋を並べながら話せるため、最初から完成した業務図を描こうとしなくて大丈夫です。
たとえば「商品が公開された」の前に「掲載内容を審査する」という判断があり、その結果を受けてカタログが更新される。流れをたどるうちに、判断が食い違う場所や、部署ごとに言葉の意味が異なる場所も議論に上がります。
イベントストーミングで得られるのは、業務への理解と必要なモデルについての仮説です。クラス図や実装コードの完成は目的に含まれません。イベントソーシングはイベントを状態管理に使う設計方式。名前は似ていますが、役割は別です。
4冊の読みどころ
『[入門]ドメイン駆動設計――基礎と実践・クリーンアーキテクチャ』は、増田亨氏ら6名による160ページのB5判書籍です。イベントストーミングでドメインを発見し、イベントソーシングやクリーンアーキテクチャまで扱います。DDDの全体像を短く把握したい人におすすめです。
『つくりながら学ぶ! ドメイン駆動設計 実践入門』は山下祐也著、増田亨監修で全368ページ。オンライン書店のカタログ管理を題材に、イベントストーミングによる業務分析とUMLモデリングからTypeScript実装まで扱います。値オブジェクトや集約にも触れ、章ごとのコードをGitHubで確認できます。
『ドメイン駆動設計をはじめよう――ソフトウェアの実装と事業戦略を結びつける実践技法』は、Vlad Khononov著、408ページ。事業分析からモデルを導く考え方を扱い、集約の発見や境界づけられたコンテキストへの分割を解説します。5つのコンテキストを扱う事例研究もあります。
『実践ドメイン駆動設計』は、ヴォーン・ヴァーノン著、616ページのB5変判です。コンテキストマップやドメインイベントに加え、集約やリポジトリなども扱います。戦略的設計から実装パターンまで幅広く参照でき、基礎を学んだ後に手元で確認する用途にも合います。
結論
DDDの用語を初めて学ぶなら、まずは『[入門]ドメイン駆動設計』で全体像をつかむのが手軽です。TypeScriptで実装まで試したい人には、『つくりながら学ぶ! ドメイン駆動設計 実践入門』が合います。概念とコードを往復できますよ。
事業分析から境界づけられたコンテキスト、集約まで一冊で体系的に学ぶなら、『ドメイン駆動設計をはじめよう』を第一候補にしてください。実践パターンを幅広く参照したい人には、『実践ドメイン駆動設計』をおすすめします。
イベントストーミングで業務を捉え、モデルの境界を定め、集約でルールを守る。この流れを自分の仕事に重ねて読めば、DDD本は用語集にとどまりません。いまの課題に近い題材から学んでみてください。
Amazon の PC をスコア化してみた
Amazonにある8〜14インチの小型WindowsタブレットやノートPCを、スペック別にスコア化して比較・ランキング。
![[入門]ドメイン駆動設計――基礎と実践・クリーンアーキテクチャ](https://m.media-amazon.com/images/I/51Fo40EmhyL._SL500_.jpg)




