ソフトウェア開発の世界では、専門家同士のコミュニケーションがプロジェクトの成否を大きく左右します。
その中で重要なキーワードとなっているのが「ユビキタス言語」です。
「ユビキタス言語って何?」「DDD(ドメイン駆動設計)との関係は?」と疑問に思っている方も多いのではないでしょうか。
この記事では、ユビキタス言語とは何か、その意味と概念について、ドメイン駆動設計(DDD)との関係・開発チームでの活用方法・共通言語としての役割まで詳しく解説しています。
システム開発に関わるすべての方に参考になる内容ですので、ぜひ最後までご確認ください。
ユビキタス言語とは?その基本的な意味と定義
それではまず、ユビキタス言語の基本的な意味と定義について解説していきます。
ユビキタス言語(Ubiquitous Language)とは、ソフトウェア開発プロジェクトにおいて、開発者・ドメインエキスパート・ステークホルダーなどすべての関係者が共通して使う言語(用語体系)のことです。
「ユビキタス(ubiquitous)」とは英語で「どこにでも存在する・遍在する」という意味であり、プロジェクトのあらゆる場面・あらゆる人が同じ言葉を使うという考え方を表しています。
ユビキタス言語の核心:開発者が使う技術用語と、ビジネス側(ドメインエキスパート)が使う業務用語を統一し、チーム全体が同じ言葉で話し・書き・コードを書くことで、認識のズレをなくすのがユビキタス言語の目的です。
「ドメイン」という概念を理解しよう
ユビキタス言語を理解するためには、まず「ドメイン」の概念を押さえる必要があります。
ドメインとは、開発するソフトウェアが対象とするビジネス領域・業務領域のことです。
たとえば、通販システムのドメインは「注文・在庫・配送・顧客管理」などの業務領域であり、医療システムのドメインは「診察・処方・患者管理」などになります。
ユビキタス言語はこのドメインを中心に形成される共通の用語体系です。
なぜユビキタス言語が必要なのか?
システム開発では、技術者側とビジネス側の間に「言葉の壁」が生まれやすいという課題があります。
たとえば、業務担当者が「受注」と呼んでいるものを、開発者が「オーダー」や「トランザクション」と呼んでいると、会議や仕様書の中でいつの間にか意味がズレてしまいます。
このような認識のズレがバグや仕様のミスマッチを引き起こすため、全員が同じ言葉を使うユビキタス言語の確立が重要なのです。
ドメイン駆動設計(DDD)とユビキタス言語の関係
続いては、ドメイン駆動設計(DDD)とユビキタス言語の関係を確認していきます。
ユビキタス言語はDDD(Domain-Driven Design)の中核的な概念のひとつとして位置づけられています。
DDDにおけるユビキタス言語の位置づけ
DDDはEric Evans氏が提唱したソフトウェア設計のアプローチであり、複雑なビジネスドメインに対応したソフトウェアを設計するための思想と実践方法の集合体です。
DDDの中でユビキタス言語は「会話・文書・コードの中で一貫して使われる共通語」として定義されており、ドメインエキスパートと開発者が協力してこの言語を育てていくことが推奨されています。
DDDではユビキタス言語はドキュメントだけでなく、実際のソースコードのクラス名・メソッド名・変数名にも反映させることが重要なポイントです。
バウンデッドコンテキストとユビキタス言語
DDDの概念に「バウンデッドコンテキスト(Bounded Context:境界づけられたコンテキスト)」というものがあります。
これは大きなシステムをいくつかの境界(コンテキスト)に分け、各コンテキスト内でユビキタス言語を適用する考え方です。
たとえば「顧客」という言葉は、販売部門では「購入者」、サポート部門では「問い合わせ者」と微妙に意味が異なることがあります。
バウンデッドコンテキストを明確にすることで、コンテキストごとにユビキタス言語を適切に定義できるようになります。
コードにユビキタス言語を反映させる重要性
DDDの実践において特に強調されるのが、「コードにユビキタス言語を反映させる」という考え方です。
ユビキタス言語をコードに反映した例:
業務担当者が「受注する」と言うなら → クラス名:Order、メソッド名:placeOrder()
業務担当者が「出荷する」と言うなら → メソッド名:ship() または dispatch()
(技術的な視点だけで名付けた「createRecord()」や「updateStatus()」より、業務用語に沿った命名が好ましい)
ユビキタス言語を開発チームで定義・運用する方法
続いては、ユビキタス言語を開発チームで定義・運用する方法を確認していきます。
ユビキタス言語は最初から完璧なものを作るのではなく、チームで継続的に育てていくものです。
用語集(グロッサリー)の作成
ユビキタス言語の第一歩として、プロジェクトで使われる業務用語の「用語集(グロッサリー)」を作成することが有効です。
用語集にはそれぞれの言葉の定義・使い方・使ってはいけない言い換えなどを記載し、チーム全員がアクセスできる場所に共有します。
Confluenceや共有スプレッドシートなど、チーム全員が参照・更新できるツールに用語集を置くことで継続的に管理しやすくなります。
ドメインエキスパートとの対話で言語を育てる
ユビキタス言語は開発者だけで作るものではなく、ドメインエキスパート(業務の専門家)との継続的な対話を通じて洗練させていくものです。
要件定義会議・レビュー・ペアプログラミングなどさまざまな場面で、業務用語の正確な意味を確認しながら言語を育てていきましょう。
ドメインエキスパートが違和感を覚える言葉はユビキタス言語として採用せず、自然に使われる言葉を選ぶことがポイントです。
ユビキタス言語の運用でよくある失敗と注意点
ユビキタス言語の導入で陥りやすい失敗は、用語集を作ったきり更新しなくなることです。
プロジェクトの進行に伴いドメインの理解が深まると、当初定義した言葉の意味が変わることもあります。
そのため、定期的にレトロスペクティブや用語見直しの機会を設け、ユビキタス言語を常に最新の状態に保つことが重要でしょう。
まとめ
この記事では、ユビキタス言語とは何か、その意味と概念についてDDDとの関係や開発チームでの運用方法まで詳しく解説しました。
ユビキタス言語はすべての関係者が同じ言葉でコミュニケーションするための共通語であり、DDDにおける中核的な実践のひとつです。
用語集の作成・ドメインエキスパートとの対話・コードへの反映という三つを継続的に行うことで、プロジェクト全体のコミュニケーション品質が向上するでしょう。
ぜひ今回の内容を参考に、自分のプロジェクトにユビキタス言語の考え方を取り入れてみてください。