この文章は、以下のプロンプトをGeminiに入力して得られた解説の文章を、人間が校正したものです。
DDDを勉強していたら「ユビキタス言語」という考え方にたどり着いた。不特定多数の人間が共通認識を持つための非常に重要な考え方だと私個人は受け取っている。しかしこの考え方に同調しない人間も実際には多い。とくにビジネスサイドの同期的なコミュニケーションを重視する人間に多い印象がある(あくまで印象に過ぎないが)。開発者以外にもわかるようなユビキタス言語の説明と「ユビキタス言語が大事である」という例をいくつか挙げてほしい。
ユビキタス言語は、ドメイン駆動開発(DDD)に登場する主要な概念の一つです。
開発の現場だけに留まらず、あらゆる業務においてチームの共通認識を築く上で非常に重要です。
🏟️ ユビキタス言語とは?
ユビキタス言語を簡潔に説明すると、プロジェクトに関わる全員(営業担当者、PdM、開発者、QA、他すべての役職)が、日常の会話から企画書、設計書、コードに至るまで、共通して使う厳密に定義された言葉ということになります。
ユビキタス(Ubiquitous)とはどこにでも存在するという意味です。
つまりそのプロジェクトでは、その言葉が唯一の正しい呼び方として、会議室からデータベースの中まで、あらゆるところで使われるべき、という考え方です。
なぜユビキタス言語が必要なのか?
ビジネスサイドと開発サイドの間には、よく翻訳が発生します。
- ビジネスサイド 「お客様に快適に使ってほしい」
- 開発A (UI担当) (お客様か…画面上はユーザーと表示しよう)
- 開発B (DB担当) (なるほど、Customerテーブルを作ろう)
発案者のお客様という言葉が、受取手によってユーザー、Customerと姿を変えてしまっています。
これがシステムの複雑化や認識のズレを生む温床となります。
ユビキタス言語は、この翻訳をなくすための取り組みです。
全員で「私たちがお客様と呼ぶのは、会員登録を完了した個人を指し、このプロジェクトでは一貫して会員(Member)と呼ぶ」と決める必要があります。
🚫 ユビキタス言語がないと具体的にどう困るのか?
ユビキタス言語がない(=全員が自分たちの都合の良い言葉を使っている)と、どのような問題が起きるか、いくつかの例を見てみましょう。
例1::shopping_cart: ECサイトの「商品」
あるECサイトのプロジェクトで、商品という言葉が飛び交っています。
-
マーケティング担当
- 「この商品(=新作のTシャツシリーズ)をもっと目立たせたい」
- 彼らにとって商品とは、「Tシャツ(白・黒・赤、S・M・L)」というカタマリ(商品ライン)です。
-
在庫管理担当
- 「その商品(=白いTシャツのMサイズ)の在庫が切れます」
- 彼らにとって商品とは、在庫管理の最小単位であるSKU(例: T001-WH-M)です。
-
開発者
- 「
Productクラスに在庫数を持たせます」 - 開発者は、マーケティング担当のいう商品であるカタマリに在庫数を持たせようとしてしまい、設計が混乱しました。
- 「
もしユビキタス言語があれば
別のECサイトのプロジェクトでは、
- マーケティングが扱うカタマリをプロダクト (Product)と呼ぶ
- 在庫管理の最小単位をSKU (Stock Keeping Unit)と呼ぶ
と最初から定義していました。
-
会議での会話
「このプロダクト(新作Tシャツ)は、いくつのSKU(色・サイズ展開)で構成されますか?」
「このプロダクトのうち、特定のSKU(白のM)だけ在庫が切れています」 -
開発
ProductクラスとSKUクラスを明確に分けて設計でき、混乱は起きませんでした。
例2:
航空券予約システムの「乗客」
ある航空券予約システムで、乗客という言葉が使われています。
-
予約担当
- 「乗客(=Aさん)が、大人2名、子供1名を予約した」
- 彼らにとって乗客とは、予約手続きをした代表者を指すことがあります。
-
搭乗管理担当
- 「当日の乗客(=Aさん、Bさん、Cちゃん)は3名です」
- 彼らにとって乗客とは、実際に飛行機に乗る人を指します。
-
開発者
- 「
Passengerテーブルに『予約ID』を持たせよう」 - 開発者は乗客を予約手続きをした代表者と誤解し、実際に飛行機に乗る人のリストを管理する設計が漏れてしまいました。
- 「
もしユビキタス言語があれば
議論の結果、「予約手続きをする人」と「実際に乗る人」は、
- 「予約者 (Booker)」: 予約手続きと支払いを行う人・組織。
- 「搭乗者 (Passenger)」: 実際に座席を占有し、搭乗する人。
といったように区別すべきだと分かりました。
-
会議での会話
- 「予約者A様が、ご自身を含む3名(大人2, 小児1)の搭乗者を予約されました」
-
開発
-
Booking(予約)テーブルがBooker(予約者)情報を持ち、同時に複数のPassenger(搭乗者)情報と紐づく、という明確な設計ができました。
-
🗣️ なぜ合意が難しいのか?
ユビキタス言語の策定に協力的でない方々がいるのも事実です。
特に仕事スピード感を重視する人にとっては、以下のように感じられるかもしれません。
- 「なんでそんな『言葉の定義』に時間をかけるんだ?」
- 「こっちはお客様で意図が伝わっているだろう。早く作ってくれ」
ユビキタス言語の策定は、初期コストがかかります。
全員で集まり、言葉の定義を一つひとつすり合わせるのは、地味で時間のかかる作業です。
しかし上記の例で見たように、この初期コストを惜しむと、プロジェクトの後半で「言った・言わない」「解釈が違った」という形で、より大きな手戻りや深刻なバグ=莫大なコストとして跳ね返ってきます。
ユビキタス言語は、開発者のためだけにあるのではなく、プロジェクトの成功確率を高め、将来的な「見えないコスト」を削減するための、チーム全員の共通資産なのです。
🤝 なぜクロスチーム実現のためにユビキタス言語が最重要なのか
クロスチーム(部署横断)でのコラボレーションにおいて、ユビキタス言語の採用を最重要とみなす理由は、まさにサイロ化の根本的な原因に対処するものだからです。
クロスチームや組織のサイロ化で最も問題となるのは、使っている言葉が違う(あるいは、同じ言葉を違う意味で使っている)ことです。
これはコミュニケーションの壁そのものです。
1. 「翻訳コスト」と「誤解」の温床
- サイロ化された組織では、各チームが独自の「方言」(専門用語や略語)を使っています。
- 例えば、営業チームが言う「顧客」と、カスタマーサポートが言う「顧客」、開発チームがデータベースで管理する「顧客」の定義が微妙に(あるいは決定的に)異なることがよくあります。
- クロスチームで会議を開いても、参加者は常に頭の中で「翻訳」作業を強いられます。「彼らの言う『顧客』とは、我々の言う『契約ユーザー』のことだな?」といった具合です。
- この翻訳は非常にコストが高く、必ず誤訳=認識のズレを生み出します。
2. ユビキタス言語は「共通の橋」
- ユビキタス言語は、この「方言」を廃し、組織全体で唯一の公用語を定める活動です。
- 営業も、開発も、マーケティングも、全員が同じ定義で「会員 (Member)」や「プロダクト (Product)」という言葉を使います。
- これにより、チーム間のコミュニケーションから「翻訳コスト」と「誤解」が劇的に減少します。これが、コラボレーションがスムーズに進むための大前提(=最重要)となります。
3. プロセス自体がコラボレーションを促進する
- ユビキタス言語は、開発者が勝手に決めるものではなく、ビジネスサイドや専門家(ドメインエキスパート)と一緒に作り上げるものです。
- 「私たちにとって『顧客』とは何か?」を突き詰めて議論するプロセス自体が、最高のクロスチーム・コラボレーション活動です。
- この議論を通じて、お互いの業務や課題(ドメイン)への理解が深まり、「あちらのチームはそういう事情で、その言葉を使っていたのか」という相互理解が生まれます。
クロスチームでのコラボレーションを本気で実現しようとするならば、まずは「我々は何について話しているのか」という土台を固める必要があります。
ユビキタス言語は、その土台となる共通の現実認識であり、サイロの壁を壊して組織を一つにつなぐための、最も重要で強力なツールです。