ドメイン駆動設計(DDD)ってなに?第7回:ユビキタス言語ってなに?「みんなで同じ地図を見る」ってことかも

DDDを調べていると、ちょこちょこ出てくる「ユビキタス言語(Ubiquitous Language)」という単語。
聞いたことはあるけど、正直「なんとなく用語集?」くらいにしか思ってませんでした。
でもちゃんと調べてみたら、これがけっこう重要で――というか、DDDっぽい設計の“土台”みたいな存在なんだなってことがわかってきたので、メモしておきます!
ユビキタス言語って何者?
ざっくり言うと、
「開発チーム・現場担当・営業など、関わる人全員が同じ言葉で話そうぜ!」
という共通語ルールのことらしいです。
たとえば、こんなズレってあるある
- 営業「ユーザーが登録した情報をキャンセルできるようにしてほしい」
- 開発「登録って、仮登録のこと?それとも本登録?」
- 現場「え、キャンセルって削除じゃなくて、取り消しボタンの表示ってことでは?」
こういう「同じ単語でも人によって指してる意味が違う問題」をなくすために、
“このプロジェクトではこの言葉はこういう意味!”って明示しておこうぜというのがユビキタス言語。
コードにも現場用語を使う
DDDでは、このユビキタス言語をドメインモデル(クラス名、メソッド名)にそのまま使うのが特徴だそうです。たとえば、、
$order->cancel()
この cancel()
という操作、現場の人が「キャンセルって言ってたからそうした」ではなく、
「このプロジェクトでは“キャンセル”とは、出荷前なら取り消し処理をしてステータスを◯にすることです」
と意味が決まってる。
それをそのままコードに落とし込むから、あとから見た人にも意味がブレにくい。
でも、ただの命名ルールとは違うの?
ちょっと違うっぽいです。
- 命名ルール → 開発者同士の「読みやすさ」重視
- ユビキタス言語 → 開発者と非エンジニア(現場)も同じ言葉で話すための“橋”
つまり、システムと現場が地続きになるように、言葉でつなぐルールみたいなイメージでした。
まとめ
調べてみて思ったのは、ユビキタス言語って「使う言葉を決めるだけ」じゃなくて、「わかってる人同士になる仕組み」なんだな、ということでした。
- 「キャンセルって、削除のこと?非表示のこと?」みたいなモヤモヤが減る
- コードにも意味がのるので、変更に強くなる
- 現場との認識ズレが減る(これ地味に一番ありがたい)
DDDっぽい設計のなかでも、実は一番じわじわ効いてくるやつかもしれません。
次回は、これまで書いてきた内容をふりかえって、「DDDって結局どういう設計の考え方だったんだっけ?」という【まとめ編】を書けたらいいなと思ってます!
→ 続き:「まとめ編:DDDってなに?建物たとえで振り返る」に続きます!(予定)