SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

IDDD本から理解するドメイン駆動設計

ドメイン駆動設計のメリットと始め方 ~ 1章「DDDへの誘い」

IDDD本から理解するドメイン駆動設計 第1回


  • X ポスト
  • このエントリーをはてなブックマークに追加

[WHAT]ドメイン駆動設計の概要

 それでは、IDDD本、1章の「DDDへの誘い」の紹介に入ります。

 DDDは「高品質」のソフトウェアを設計する手法です。ここでの高品質はバグのないという意味ではなく、ビジネス的にも成功していることを指します。技術至上主義ではなく、「事業を理解し、チームの知識を1つにまとめる」ことを重視します。それを「ユビキタス言語」と呼ばれるチームの共通語としてプログラムを実装します。

 つまり「ドメイン駆動設計」とは『顧客と開発者が共通言語で会話して、一体感あるチームとして、事業価値の高いソフトウェアを開発する手法』と言えます。

[WHO]DDDを始められる人とは

 DDDは誰でも取り組むことができます。ソフトウェア開発の現場には様々な不満が存在していますが、現状を変えたいという情熱がある人であれば誰でもDDDを始めることができます。例えば次の役割の人がDDDに取り組むことができます。

ソフトウェア開発に関わる人の不満と要望
役割例 不満 要望
若手開発者 全体が理解できず単調な詰め替えコードを書く仕事がつまらない。 クリエイティブで面白い開発をしたい。
中堅開発者 暫定対応ばかりで疲弊している。 適切なソフトウェア開発をしたい。
ベテラン開発者 ビジネス的な価値を発揮できていない。 開発者とビジネス側との距離を縮めたい。事業価値を出したい。
ドメインエキスパート(コラム参照) 開発者と会話がかみ合わない。ソフトウェアが思った通りに動かない。 開発者とスムーズな会話をして良いソフトウェアを作りたい。
マネージャ 開発者は熱心に技術を学んでいるが結果が出ていない。 開発者が業務知識を得て、ドメインエキスパートと協力して結果を出してほしい。

 どの役割の人も「良いソフトウェアを作りたい」と考えているものの、多くの不満を抱えています。DDDを採用することで、これらの課題を解決します。

ドメインエキスパートとは

 ドメインエキスパートとは、担当業務やシステムについて一番詳しい人を指します。職種や肩書に関係なく、対象領域について一番理解している人です。

 そのため顧客や業務担当者に限らず、社長、役員、営業担当、SE、プログラマの場合もあります。また一人とも限らず、複数の場合もあります。

[WHY1]DDDを導入するメリット

 続けて、DDDを導入する理由について見ていきます。

 まず、DDD導入のメリットとして以下の3つが挙げられます。

  1. プログラマーとドメインエキスパートが「共通言語」を用いて視点をあわせることにより、ひとつのチームとして、あたかも顧客が開発するようにソフトウェアを構築できる。
  2. ドメインエキスパートですら理解が浅い業務領域を深く検討することによって、業務知識をチームで洗練/共有し、理想像を検討できる。
  3. 「共通言語」をそのままプログラムと実装していく。「設計がコードであり、コードが設計である」と表現されるように、開発時の翻訳コストが不要になる。合わせて、実装時の課題に設計段階で気づくことができる。

 これらをまとめると、DDDのメリットは「顧客と開発者がひとつのチームとなり、設計と実装をひとつのソフトウェアとして構築できること」といえるでしょう。

[WHY2]開発費用を「コスト」から「事業投資」へ

 次にDDDを導入する理由として、「システム開発費用の考え方を変えること」ができます。従来の開発では、顧客から聞き出した仕様をプログラマが翻訳するという片道通行でしたが、DDDでは、共通言語を用いて一緒に議論する双方向開発を行います。ソフトウェア開発を、開発者視点から顧客視点へ揃えることで、ビジネス的な価値、事業価値を高めることができます。その結果、開発費用を「無駄なコスト」から「事業投資」への扱いに変化させることができます。

[WHY3]ドメインモデルによる「複雑さ」への対処

 最後にDDDを導入する理由として、困難なシステム開発において「技術的な解決手法が提示されていること」が挙げられます。ソフトウェア開発が難しい理由のひとつとして対象領域の「複雑さ」にあります。DDDはこの複雑さを「ドメインモデル」を用いて対処します。そのため、DDDではプログラムの記述方法が変わります。

 多くのプロジェクトでは、要求された処理をその手順で記述する「トランザクションスクリプト」と呼ばれる実装を用いています。しかし、DDDでは、業務をオブジェクトの振る舞いとして表現する「ドメインモデル」として実装します。これによって、UIやリクエストに依存した設計ではなくなるため、計算処理や妥当性チェックのようなビジネスロジックが適切な箇所で一元管理されます。

トランザクションスクリプトとドメインモデルの違い
トランザクションスクリプトとドメインモデルの違い

 なお、単純なマスタメンテナンスや30程度のユースケースフローでは、DDDを導入するコストのほうが高く付きます。最初から複雑だとわかっているシステムや、将来的に複雑に成長していくことがわかっている場合に、DDDを採用するメリットがあるといえます。

ドメインモデルとは

 「モデル」という言葉は、抽象化によって不要な詳細を省くことで、問題を解決することを表しています。例えば、詳細すぎる地図では情報が多すぎるため、道に迷ってしまうことがあります。逆に上手に抽象化した地図では、確認が必要な建物のみが表示されています。「ドメインモデル」はその名の通り、複雑な業務ドメインの中から、システムに必要な概念を適切に抽出する方法となります。

次のページ
[HOW1]DDDでユビキタス言語で設計する方法

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
IDDD本から理解するドメイン駆動設計連載記事一覧

もっと読む

この記事の著者

WINGSプロジェクト 青木 淳夫(アオキ アツオ)

WINGSプロジェクトについて>有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。2018年11月時点での登録メンバは55名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書記事多数。 RSS Twitter: @yyamada(公式)、@yyamada/wings(メンバーリスト) Facebook

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

山田 祥寛(ヤマダ ヨシヒロ)

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるReact実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/9546 2018/11/21 14:13

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング