0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【DDD】脳内変換で始まる、「すれ違い昼ドラ開発」から脱却する方法

0
Last updated at Posted at 2026-07-24

はじめに

こんにちは、エンジニア2年目のはなまるです。
前回の記事で「完璧なDDDの世界なんてないから、泥臭く始めようぜ」ということを書きました。

今回も、オライリーの『ドメイン駆動設計をはじめよう』から学んだ実践的なアプローチについて書きます。

明日から実践できますよ!!!!!

テーマは「言葉の壁」と「部屋分け」 です。

1. 言葉の壁を取り払おう

DDDで一番有名で、一番使い倒されているワード。
それが「ユビキタス言語(チーム共通の言葉)」です。

要するに「開発メンバーとビジネス側(企画や営業)で言葉を合わせようね」ということなのですが、多くの現場ではこのような「すれ違い昼ドラ」が毎日上映されています。

ある日のミーティング:
ビジネス側: 「今回のキャンペーンでは、『お得意様』の画面にバッジを出したくて…」
エンジニア: (心の声:あーはいはい、『お得意様』ね。うちのDBだと、usersテーブルのis_premium = 1 のことだな。じゃあコードは User.isPremium()で実装しよ)

うまく回っているように見えますが、完全に破滅へのカウントダウンが始まっています。

数ヶ月後、悲劇が起きます。ビジネス側がこう言ってきました。

ビジネス側: 「『お得意様』の定義に、年間購入額も追加したくて〜」
エンジニア: 「あ、じゃあ『プレミアムユーザー』の条件変更ですね。フラグのロジック変えます」
ビジネス側: 「えっ? プレミアムユーザー? いや、私たちが話してるのは『お得意様』なんですけど…『お得意様』と『プレミアム会員』は別物ですよ?」
エンジニア: 「えっ…(同じだと思ってた…)」

お互いに「脳内翻訳」をしたまま会話を続けていたため、言葉の定義そのものがズレていたことが発覚します。

「エンジニア側の専門用語(または勝手に置き換えた言葉)」と「ビジネス側の言葉」が混ざり合うと、ミーティングのたびに「それってどの機能のことですか?」「あ、それはうちで言う〇〇です」という不毛な通訳フェーズが発生します。

これが、コミュニケーションコストと認識相違を生む最大の原因です。

実践のコツ: 普段の会話から「脳内翻訳」を挟まない

解決策はシンプルで、「エンジニアが勝手に言葉を言い換えず、ビジネス側と同じ言葉で会話する」ことです。

ビジネス側が「お得意様」と言ったらエンジニアも口頭やチャットで「お得意様」と呼ぶ。(勝手に「プレミアムユーザー」と言い換えない)

ビジネス側が「カートを空にする」と言ったら「クリア処理」ではなく「カートを空にする」と表現する。

わざわざ「今日からDDDをやります!」なんて大声で宣言する必要はありません。

ミーティングやチャットで相手が使っている言葉を注意深く拾い、そのままの言葉を使って会話を返す。
たったこれだけで、お互いの頭の中にあるイメージがバチッと噛み合い、「あの言葉ってどういう意味だっけ?」という不毛な認識合わせ会議が世界から消滅します。

とても嬉しいことですよね!:heart_eyes:

2. 言葉の部屋分けをしよう

言葉を統一しようとすると、次に必ずこのような壁にぶち当たります。
「人によって、同じ言葉を違う意味で使ってるんだけど!?」

例えば、「商品」という言葉。

  • 販売チームにとっては「名前があって、価格があって、在庫があるもの」
  • 配送チームにとっては「重さがあって、サイズがあって、届け先があるもの」

これを1つの巨大なProductクラスにまとめようとするから、プロパティが100個くらいある「神クラス」が爆誕します。

// 【悪い例:なんでもできる神クラス】
class Product {
    private string id;
    private int price;      // 配送チーム「これ、配送の計算に要る?」
    private float weight;  // 販売チーム「これ、画面に出さないから邪魔なんだけど」
    private int stock;
    private string address; // もはや何がなんだか分からない
}

触るとどこが爆発するか分からないので、誰も触りたがらないパンドラの箱オブジェクトになります。

実践のコツ: 1つのシステムに同じ名前のクラスが複数あっていい

この本が教えてくれた解決策が、「境界づけられたコンテキスト(言葉の部屋分け)」です。

「販売コンテキスト」と「配送コンテキスト」をカッチリ分ければいい。
そして、それぞれの部屋に、それぞれのProductクラスがあっていいのです。

  • 販売の部屋のProduct: id, price, stockだけを持つ。シンプル!
  • 配送の部屋のProduct: id, weight, sizeだけを持つ。シンプル!

「1つのシステムで、同じ名前のクラスが2つあったらダメ(共通化しなきゃダメ)」という謎の固定観念を破壊しましょう!

まずは、社内で一番会話が噛み合っていなくて、コードがスパゲティになっている「あの言葉」を見つけて、部屋を2つに分けることから始めてみてください。

システム全体を一気に変える必要はありません!(←ココ重要!)

まとめ:言葉を合わせ、部屋を分けよう

今回は、DDDの核心である「ユビキタス言語」と「境界づけられたコンテキスト」を、少しずつ現場に投入しよう、というお話をしました。

難解な実装パターンを覚えるより、「ビジネスサイドと同じ言葉で話す」「意味がブレる言葉は部屋を分ける」。

これだけで、ソフトウェアの寿命は圧倒的に伸びます。

さっそく明日から、Let's try!!:v_tone1:

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?