AI活用の教科書
バックエンド設計むずかしい3分で読了

ドメイン駆動設計(DDD)

Domain-driven Designどめいんくどうせっけい

ひとことで言うと

業務の言葉や流れをそのままコードの形に写し取って、ソフトを設計する考え方です。

📖 もうちょい詳しく

何が新しいの?

ソフト開発では、技術の都合を先に決めてしまい、肝心の業務とコードがズレていく問題がよく起こります。ドメイン駆動設計(DDD)は、その「業務そのもの」を設計の中心に置こう、という考え方です。「ドメイン」とは、そのソフトが扱う業務領域のことを指します。

どうやって動いてるの?

まず業務の担当者と開発者が、同じ言葉づかいを決めて会話します。これを「ユビキタス言語」と呼び、その言葉をクラス名やメソッド名にそのまま使います。さらに業務を意味のかたまりごとに区切り、それぞれを「境界づけられたコンテキスト」という単位で分けて、混ざらないように設計します。

何ができるの?

業務ルールが変わったとき、どこを直せばよいかをコードの中から見つけやすくなります。担当者と開発者の会話のズレも減ります。注文・在庫・請求のように業務が複雑なシステムほど、効果が出やすい設計手法です。

🌱 身近なたとえ

会社の組織図で例えると分かりやすいです。総務・経理・営業が、それぞれ自分たちの言葉とルールで動いていますよね。DDDも同じで、業務を部署のように区切り、各区切りの中では用語の意味を一つに統一します。区切りをまたぐときだけ、橋渡しのルールを用意するイメージです。

✅ まず覚えるポイント

  • DDDは「業務(ドメイン)」を設計の真ん中に置く考え方です
  • 業務担当者と開発者が共通の言葉「ユビキタス言語」を決めます
  • その言葉をそのままコードの名前に使います
  • 業務を「境界づけられたコンテキスト」で意味ごとに区切ります
  • 業務が複雑なシステムほど効果が出やすいです
  • 特定のツールや言語ではなく、設計の方針・考え方です

🧭 よくある勘違い

DDDは特定のフレームワークやライブラリですか?

いいえ、DDDは道具ではなく設計の考え方です。インストールして使うものではありません。どの言語でも実践でき、考え方に沿ってコードの作りを整えていくものです。

データベースの設計とは違うの?

重なる部分はありますが、出発点が異なります。表(テーブル)の形から考えるのではなく、業務の振る舞いやルールから考えるのがDDDの特徴です。データの保存方法は、その後ろに置く形になることが多いです。

小さなアプリにも必ず使うべき?

そうとは限りません。DDDは学ぶ手間がそれなりにかかるため、業務がシンプルなものでは重たく感じる場合があります。業務ルールが複雑で、長く育てるシステムほど向いています。

🧩 関連して覚えると楽な言葉

  • データモデリング: 扱うデータの形や関係を整理して設計すること
  • マイクロサービス: 業務の区切りごとにサービスを分けて作る方式
  • オブジェクト指向: データと振る舞いをひとまとめにして考える設計の土台
  • デザインパターン: よくある設計の悩みに対する定番の解き方

🏁 ひとことでまとめ

DDDは、業務の言葉とルールをコードの形にそろえて、複雑なシステムを迷子にならず育てるための設計の地図です。