daisuzz.log

ユビキタス言語について

今回は、ドメイン駆動設計において重要な概念の1つである、ユビキタス言語について書いていきたいと思います。

ユビキタス言語とは

ユビキタス言語については、様々な資料で以下のような説明がされてます。

  • 実践ドメイン駆動設計

    ユビキタス言語とは、チームで共有する言語のことだ。ドメインエキスパートも開発者たちも、同じ用語を使う。プロジェクトチーム全体で、ひとつの言語を共有するのだ。チーム内での役割が何であれ、チームのメンバーである以上はそのプロジェクトのユビキタス言語を使うことになる。

ドメインエキスパートとは、対象のドメインについて専門的な知識を持った人を指します。人事システムであれば人事の担当者、在庫管理システムであれば、在庫管理したい顧客や担当者、などです。

  • DDDquickly

    共通言語の拠り所としてドメインモデルを使います。そしてこの言語をコミュ ニケーションに、さらにはコードにも使うようにチームのメンバに要求しまし ょう。知識を共有しドメインモデルを構築しているあいだにも、チーム内では レビューをしたり文書や図を作ったりします。どんな形態のコミュニケーショ ンであれ、常にこの言語で表現しましょう。このような性質からこの言語は 「ユビキタス言語」と呼ばれます。

  • DDD reference

    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.

ドメインモデルに沿って作られる言語。さらに、ソフトウェアに関するチームの活動を一つにするために、チームメンバー全員が境界づけられたコンテキストの範囲内で利用する言語」という感じでしょうか。「境界づけられたコンテキスト」については、別の記事で詳しく書こうと思いますが、ここでは、「ユビキタス言語を共有する範囲」と思ってもらえれば問題ありません。

こうしてみると、「ドメインモデル(ソフトウェアが解決する問題を表現したもの)を反映する」「チームメンバー全員でつくりあげる」「作り上げた言語を文書・図・ソースコードなどでも利用する」ということが、ユビキタス言語の特徴であることがわかります。

また、エリックエヴァンズのドメイン駆動設計では、以下のように述べられています。

チーム内の全てのコミュニケーションとコードにおいて、その言語を厳格に用いることを、チームに約束させること。図やドキュメント、そして何より会話の中では同一の言語を使用すること。 ...(中略) ユビキタス言語における変更は、モデルに対する変更であると認識すること

ドメインエキスパートと開発者の考えのズレをなくして、最終的にできあがるソースコードにその意図を反映させるためには、ユビキタス言語をどれだけチームの中で利用して、徹底的にコードに反映させる環境を作るか、ということが大事になってくると思います。 ユビキタス言語をせっかく定義したのに、議論のさいに使う図やドキュメント、UMLソースコードなどに反映できていなければ、意味がありません。 また、ユビキタス言語を、単純に「業務用語」として捉えてしまわないようにすることが大切です。 あくまで、ユビキタス言語はチームメンバーのコミュニケーションで利用する言語です。ドメインモデルを反映させるため、業務用語になることが多いですが、必ずそうしなければいけないというルールはありません。 チームメンバー同士で議論をして一緒に作り上げ、そのユビキタス言語をモデルやソースコードに利用することがユビキタス言語では極めて重要なポイントであると思います。

まとめ

ユビキタス言語とは

ということで、今回はこれでおしまい。

参考資料