■ 1. 主張の核心
- ユビキタス言語が "language" と呼ばれる理由はその設計がドメインモデリングそのものだからである
- 言語の設計とは語彙のみならずデータの構造と振る舞いを文法として決めることを指す
- 用語集 (glossary) との本質的な違いは文法の有無にある
■ 2. 言語学的根拠
- 名詞の集まりだけでは言語にならない
- Saussure: 言語は記号の体系であり個々の記号は差異によって意味を持つため語彙の並びだけでは体系にならない
- Wittgenstein: 語の意味はその使用によって決まる (哲学探究 §43)
- 言語には語の組み合わせを規定する文法と語が使われる場の両方が要る
- 用語集は名詞の並びであり振る舞い・状態遷移・概念間の関係を記述する文法を持たない
■ 3. 言語の四層とドメインモデルの対応
- 言語学的な四層がドメインモデルの要素に一対一で対応する
- lexicon (語彙): 概念と操作の名前 → 注文・顧客・検証する等の名詞と動詞
- syntax (統語): 概念の構成規則 → AND・OR・? による複合・分岐・任意
- semantics (意味): 語の使われ方 → 不変条件・事前/事後条件・状態遷移 (behavior の入出力仕様)
- pragmatics (語用): 文脈による意味の変化 → Bounded Context による文脈の切り分け
- 用語集と言語の分かれ目は semantics の層である
- behavior なしの用語集は語が使われてよい/使われてはいけない規則を書けない
- behavior を書くことで語が実際にどう使われるかが定義される
- Evans の "a change in the language is a change to the model" はこの対応から導かれる
■ 4. 同方向の先行論
- ユビキタス言語を半形式の記述として扱う先行論が複数存在する
- BDD (Dan North): Given-When-Then 構文 (Gherkin) による振る舞いの半形式記述
- Scott Wlaschin "Domain Modeling Made Functional": F# の代数的データ型でドメインを記述しコードがユビキタス言語の記述になるとした
- Cyrille Martraire "Living Documentation": ユビキタス言語はコードに埋め込まれており BDD シナリオを live specification として扱う
- Vlad Khononov・Derek Comartin: DDD の core は tactical pattern ではなくユビキタス言語であると明示
- 先行論の共通点は「振る舞いを含む半形式の記述」としてユビキタス言語を扱う視点である
- 先行論が示さなかった点: Evans の定義の曖昧さを正面から問題化し syntax・semantics・pragmatics の三層を具体的に記述する形式の提示
■ 5. 概念が曖昧なまま流通してきた経緯
- Evans 自身がユビキタス言語の定義の曖昧さを認めている
- 2014年 DDD Exchange: DDD の中核概念が実装レベルで機能せず慣習に頼らざるを得なかったと述べた
- 2018年 Explore DDD: DDD の説明が "handwavy good advice" "feel good mush" に近いと自己批評した
- 2019年 DDD Europe: Bounded Context を含む fundamental terms がしばしば誤解されていると認めた
- Evans 2015 DDD Reference の Ubiquitous Language 節は概念の定義ではなく実践の指示を主眼に置いている
- 曖昧さの結果として各地で形骸化が生じた
- 英語圏: 同義語・一語多義・型/実体の混同・技術用語との衝突といった問題が報告された
- 日本語圏: プラクティスが精神論として語られる傾向が定着した
■ 6. 実際の成果物は用語集になっている
- 公開されているユビキタス言語の成果物はほぼすべて名詞中心の用語リストである
- IFRC CBS: 組織・役割・疾病・報告形式の名詞定義が中心で振る舞いや状態遷移の記述は限定的
- LegalOn Technologies: 用語の日英併記定義が中心で動詞や状態遷移の具体的扱いは示されていない
- Progate: スプレッドシートによる用語辞書と Figma のドメインモデル図で振る舞い・状態遷移の扱いには及んでいない
- Matt Pocock の ubiquitous-language skill: 出力例は名詞の表と概念間のカーディナリティが中心
- Qiita の調査でも日本語圏の 6 事例のうち動詞を扱うのは 1 件のみである
- 各チームが自前で形式を発明した結果として最も作りやすい「名詞の辞書」が採用された
■ 7. 日本語訳が用語集理解を助長する問題
- Khononov 邦訳『ドメイン駆動設計をはじめよう』(2024) では ubiquitous language が「同じ言葉」と訳されている
- 「同じ言葉」は四層のうち lexicon の層にのみ対応する訳語である
- 「同じ」は一意性の要求を「言葉」は語彙の並びを指す
- syntax・semantics・pragmatics の三層が訳語に含まれない
- カタカナ表記であれば「語ではなく言語」という違和感が残るが「同じ言葉」だとその違和感もなくなる
- 既に名詞中心に偏っている現状で訳語自体がその偏りをさらに強める
■ 8. DSL との関係
- ドメイン記述ミニ言語は実行可能な DSL とは別の位置にある
- Evans の論じる DSL はコンパイラで処理され実装になる実行可能な言語である
- ドメイン記述ミニ言語は人間・ドメイン専門家・AI Agent が共有するための半形式的な記述言語である
- ミニ言語の記法は実装との対応が厳密でなくてよい
- コレクションを示す List は実装構造の指定ではなく複数あるという業務上の意味を表す
- 実行可能な DSL はユビキタス言語の文法の一部を機械に渡す際の固定化であり言語設計そのものではない
■ 9. 用語集として扱うことの失敗モード
- 用語集として運用することは語彙だけを残し文法を捨てることである
- 具体的な失敗モードは以下の通り
- 翻訳の蓄積: 文法が共通でないためドメイン専門家と開発者の語りの差を文単位で翻訳し続けることになる
- 瞬間的表現の喪失: 用語集は文を作って使う場を持たないためドメイン理解の核心となる瞬間的な表現が記録されずに失われる
- 動詞の欠如: 名詞の並びにはドメインの振る舞いが現れず anemic domain model と同じことが言語の側でも起こる
- ありえない状態の許容: 文法なしではドメインの不変条件が型の段階で守られない
- コードとの乖離: 言語としてコードと並行して使われないため時間経過とともにコードと食い違っていく