ドメイン駆動設計(DDD)ってなに?第1回:建物にたとえて考えてみた

2025.06.06 09:00
2025.06.06 13:45
ドメイン駆動設計(DDD)ってなに?第1回:建物にたとえて考えてみた

「ドメイン駆動設計(DDD)って聞いたことはあるけど、正直よくわかってない……」

そんな自分が、あらためてDDDを学びなおしながら、ざっくり全体像を整理してみました。むずかしい話はちょっと置いといて、というわけで今回は、DDDってなに?というざっくりしたところを、自分なりに建物にたとえて整理してみたメモです。

DDDって、そもそもなに?

DDD=Domain-Driven Design、つまり「ドメイン駆動設計」。

ドメインってなんだよって感じなんですが、ようはその業界や現場で使われてるルールや言葉のことらしいです。

DDDはそれをちゃんと設計に取り込もうよって話で、「現場の知識を、コードやクラスに落とし込んでいく」ってことらしい。

自分はどうにも概念のままだと頭に入らないので、「DDDってもし建物だったら?」というたとえで考えてみました。

1. 集約ルート=受付窓口

どんな用件でもまずはこの窓口を通ってください!という場所。
いきなり勝手に中に入ってはいけない。ちゃんと受付を通す。
DDDでいう集約ルート(Aggregate Root)って、そういう場所みたいです。

つまり、「勝手に裏口から入らせない」ようにする。

2. ファクトリ=認証工場

社員証を持ってる人しか入れない、ちゃんとした工場で、モノ(オブジェクト)をつくるのはここだけ。ここでは、「社員証がある人だけが入れる」「厳密なルールにそって製品がつくられる」という仕組みにするのをファクトリーと呼ぶみたいですね。

オブジェクトを適当・勝手につくることを禁止して、ファクトリ(Factory)という「ちゃんとルールにそって生成する場所」を作るルール、ということですね。

3. DTO=封筒に入れて渡す書類

中の機密情報(ドメインモデル)をそのまま外に渡すと危険なので、必要な情報だけを封筒にまとめて渡す手法。それがDTO(データ転送オブジェクト)っていうみたいですね。

っていうのもドメインモデルって、中にすごくいろんなルールが詰まってて、できることが多くなりがち。それ故に外からそのまま使うと事故りそうだから、一度「封筒に入れて整理整頓」してから渡すのが、DTOという存在みたいです。

  • ドメインモデルの中身(=ルールや不変性)を外に漏らさない
  • 外部インターフェース(APIや画面)と分離できる
  • 必要な情報だけを整理して、安全に受け渡しできる

まさに「封筒に入れて、必要なとこだけ書いて渡す」という感じ。

4. ユビキタス言語=共通の地図記号

現場・開発・営業、それぞれで言葉がバラバラだと困ります。
「これは“商品”なの?“サービス”なの?」「“締切”って何時のこと?」みたいな認識ズレが起きる。

だから「このプロジェクトでは、これをこう呼ぶよ」という共有ルールを決めておく必要があるみたいです。そのプロジェクトのルール用語辞典を「ユビキタス言語」をいうみたいですね。

結局DDDをすることでなにがいいの?

まだ全然わかりきってないけど、「ルールを決めておくことで、あとで困りにくくなる」ってことなのかもしれません。
たとえば:

  • 勝手に中身を変えられない
  • 誰が責任を持ってるかがハッキリする
  • 役割が分かれてるので、変更に強い

そんな感じです。

まとめ

まだまだ入り口ですが、DDDの全体像が建物にたとえると少しつかめた気がします。
次回は、みんなが混乱しやすい「モデルの種類(エンティティとか値オブジェクトとか)」について、自分なりに整理してみます!

→ 続き:「エンティティと値オブジェクトで混乱した話」に続きます!
今回は以上です!