はじめに
今回はドメイン駆動設計においてよく目にする言葉、ユビキタス言語について説明します。
参考にした記事などは適宜リンク載せるので、そちらもぜひ読むようにしてください。
本記事はこちらを参考にしました。非常にわかりやすいので是非目を通してほしいです。
・ユビキタス言語についての知見を共有します
ユビキタス言語とは
まず言葉の定義として、ユビキタス(Ubiquitous)とは、いつでもどこでも存在するという遍在を表す言葉を表しています。
そしてユビキタス言語について、ドメイン駆動設計の公式リファレンスには以下のように記載があります。
A language structured around the domain model and used by all team members within a bounded context to connect all the activities of the team with the software.
簡単に訳すと、ドメイン・モデルを中心に構成され、社内のすべてのチーム メンバーによって使用される言語。チームのすべての活動をソフトウェアに接続する境界付けられたコンテキストという記載になります。チームで使
ここで登場している境界付けられたコンテキストについてはこちらでまとめています。境界付けられたコンテキストを簡単に振り返ると、システムを「境界づけられたコンテキスト」に分割し、それぞれの中でモデル、言語の統一を実現し、関係者間での認識を揃えることを指します。
先ほどの公式リファレンスの定義を見てみると、社内のすべてのチーム メンバーによって使用される言語という定義があります。境界付けられたコンテキストはあくまでもユビキタス言語をチームで共有する範囲という解釈ができます。
境界付けられたコンテキストとユビキタス言語
前回記事にした境界付けられたコンテキストを例にユビキタス言語を考えてみます。
境界付けられたコンテキストの説明時、例としてECサイトの開発を上げました。その際、商品というコンテキストを販売コンテキスト、発送コンテキストと境界付けることで各モデルの認識を設計者・開発者・各関係者でそろえることが可能としました。
実際に販売コンテキストのユビキタス言語を定義してみます。販売コンテキストのユビキタス言語は「商品」「売値」「在庫」「顧客」のような言葉を使うと思います。
ポイントとして、設計者・開発者・各関係者が使う言葉とプログラムを構成する言葉を一致するようにすることです。実装の中で使用されるクラス名、メソッド名などは誰が見ても意味が解らなければいけませんし、設計者・開発者・各関係者が使っている言葉がついたクラスやメソッドは、実際の言葉が意味するものと同じ振る舞いをする必要があります。
例えば、顧客をECサイトで商品を購入する人と定義します。であれば顧客クラスは今定義した内容を指していなければいけないです。
設計者・開発者・各関係者が使っている言葉でプログラムを検索すれば、該当する概念の挙動を示す実装をたどることができる必要があります。またその状態の設計ができることで保守性の高い(=変化に強い)システム / プログラムであると言えます。ユビキタス言語で定義した言葉と概念が異なる同じ名称の実装はNGですし、同じの概念が複数のファイルに分割されている状況もできる限り避けることが重要です。コンテキストを分割し、境界付けられた中で設計者・開発者・各関係者間で言葉の認識を揃える・ユビキタス言語を定義することがとても重要ということになります。
まとめ
まとめとして、実際にユビキタス言語を実践している方の記事を紹介します。非常にわかりやすいので、ぜひこちらも読んでみてください。
・ユビキタス言語策定したらビジネス理解がめっちゃはかどった話
・ユビキタス言語について
・Chatwork WebのUIに1つ1つ丁寧に名付けをしている話(ユビキタス言語検討会について)