エンジニアの皆さん、「ドメイン駆動設計」という言葉を聞いたことはありますか。Domain-Driven Desigh の頭文字をとって「DDD」と言います。
ソフトウェア開発、コード実装に至るまでのアプローチ戦略までを含めたシステム開発手法です。
エリック・エヴァンス氏により2003年に「Domain-driven design」として発表されました。
これまで私が読んできたドメイン駆動設計に関する書籍を振り返るとともに、
DDDを最短で効果的に理解するために、各書籍のおすすめの読破順、それぞれに対しておすすめする読み込み度を考えてみます。
- 2020年現在、これまでに読んできたDDD本たち
- おすすめのDDD書籍の読破順
- まずはおすすめの2書籍から。余裕があればそれ以外にも
2020年現在、これまでに読んできたDDD本たち
手元にあるDDD関連書籍を発売順に紹介します。
2003年に1冊の書籍から始まったDDDも、2020年現在では先人たちが残された有意義な書籍が多数発売されています。
1冊の書籍で全てを学ぶことができれば効率的なのは間違いないですが、個人的におすすめなのは複数の書籍からエッセンスを抽出しながら読み進めることです。
1. エリック・エヴァンスのドメイン駆動設計 ソフトウェア開発の実践 /翔泳社/エリック・エヴァンス
全ての始まり。DDD開発者の間での通称はそのまま「DDD本」です。
原点にして頂点といけばいいのですが、いかんせんこの本は重厚すぎて挫折者が出ること必須です。写真の通り本当に分厚い。
重厚である印象の一員は、記述内容のほぼほぼが活字で構成されること。サンプルコードなんてものはほぼありません。
また、原書が英語である技術書は大体同じことが言えますが、意味を残したまま翻訳する必要性からくるなんとも言えない回りくどさを覚えます。
DDDとは何かについてのエヴァンス氏からのお言葉を直に受けたい人は、一度読んでみてください。それ以外の方が手に取る場合は流し読み程度で。
2. 実践ドメイン駆動設計 エリック・エヴァンスが確立した理論を実際の設計に応用する/翔泳社/ヴァーン・ヴァーノン
こちらは通称IDDD本(Imprement=実践 DDD)。一気に時間を飛ばして2015年発売です。
2003年当時からソフトウェア技術の進歩もしていますので、そういった時代の変化も考慮してDDD本をアップデートした内容、とでもいうべきでしょうか。
ちょっとしたサンプルコードも入っていたり、あとは章毎にちょっとした挿絵を挟む遊び心があったりと、「DDD本に比べれば」重厚感が薄れます。ちなみにサンプルコードはJava。
比較部分を強調した理由は、この本も決して軽く読めるボリュームではないからです。
戦略的設計の解説なら「実践ドメイン駆動設計」がおすすめ
DDD本の解説・補完する形で戦略的設計について説明を割いています。
戦術的設計については後述の新しい書籍たちがより詳しく解説していたりもしますが、「コアドメイン」や「境界付けられたコンテキスト」をはじめとした戦略部分については時代の変化に影響を受ける概念でもないため、後発の書籍がより詳しく記述しているといったものではありません。
DDDにおける戦略は、戦術と並んでしっかり理解しておきたい武器になります。
DDD本を手に取らない方は一度この書籍に目を通しておくとよいでしょう。
3. .NETのエンタープライズアプリケーションアーキテクチャ .NETを例にしたアプリケーション設計原則/日経BP/ディノ・エスポシト/アンドレア・サルタレロ
ドメイン駆動設計と書籍名に入ってこそいないですが、書籍内容でがっつりドメイン駆動設計における戦術的設計を開設します。こちらも2015年発売。
C#でサンプルコードが書かれたドメイン駆動設計の関連書籍は、当時(少なくとも日本国内では)この本だけだったと思います。
前半のソフトウェアアーキテクチャに関する部分はドメイン駆動設計とは直接的に関係はありませんが、いずれもエンジニアとして無駄になるような話ではありません。
DDDの戦術的設計に関する解説に入る後半部で紹介されるサンプルコードはIDDD本と比べてもかなり具体的に書かれており、ミクロ視点(戦術)からDDDを取り入れようとするエンジニアの助けになるはずです。
私がこの書籍に出会ったときも周りにDDDを布教するために何度かこの書籍を押した覚えがあります。当時の職場が.NET開発現場だったことも大きいですが。
4. 「実践ドメイン駆動設計」から学ぶDDDの実装入門/翔泳社/青木 淳夫
2019年5月発売、貴重な日本語原書です。
こちらはページ数も200以内と軽量の印象を受けますが、この書籍単独で完結するような技術書ではありません。
前述のIDDD本「実践ドメイン駆動設計」の解説書とでも言えばすっきりきます。
IDDD本の各章に対して補足説明をしていくかの如く進行していきますので、この書籍単体で読み始めるとなにがなにやらといった印象を受けるはず。
IDDD本が翻訳本であるが故の分かりにくさを補完する位置づけなので、IDDD本を人通り読み込んだ後で、自分の理解を別切り口から確認して復讐するような使い方になるはずです。
個人的には、発売・購入したタイミングがDDDと出会ってからしばらくたった後だったこともありそこまでこの書籍に思い入れを抱くことができませんでした。
どうでもいいことですが、もともとペーパーブック化を第一ターゲットに書かれたコンテンツではないのか、イメージ図として挿入されるスライド風資料内の文字が小さく見辛いです。
5. ドメイン駆動設計入門 ボトムアップでわかる!ドメイン駆動設計の基本/翔泳社/成瀬 允宣
2020年2月発売のこちらの書籍も日本語で書かれたものです。
私も最近購入し読み終わったばかり。
こちらの書籍はDDDの戦術的設計に焦点を当てて、C#を採用してサンプルコードとともに解説をしていきます。
2020年時点でのDDD戦術的設計の解説は「ドメイン駆動設計入門」で決定
元々、サンプルコードを豊富に記述したDDD関連書籍は前述の「.NETのエンタープライズアプリケーションアーキテクチャ」しか知らなかったのですが、この書籍はそれに代わり、2020年時点で最も丁寧にDDDの実装を解説する書籍だと思います。
私がDDDに出会ったころ、DDDの実装をここまで丁寧に解説する書籍があれば、現在のスキルまで到達するスピードはもっと速かったはずです。
業務開発にDDDの戦術を当てはめるにあたり、なにげなく実践してきた点が丁寧に解説されているイメージ。
戦術の解説に特化し、章立ての順番の工夫(一番最初に値オブジェクトについての解説を持ってきているなど)していることで読者の理解し易さにつながっています。
現時点でDDDを学ぶにあたり必携の書籍だと言えます。エンジニアの同僚と後輩にDDDを布教するならば、まずこの本から入ると思う。
DDDの入門書でありソフト開発の入門書ではありません
入門とありますが、最初のころからサンプルコードを多用した上で、DDDの戦術を採用すればこういう嬉しさがある、と進行してきます。
サンプルコードはC#で書かれていますが、オブジェクト指向で組める他言語含めて基本的なソフト開発ができる層、アーキテクチャの検討をしたことある層がターゲットとしている読者です。
反対に例えば、「classって何?それの嬉しさってあるの?」とかの質問が出てくるうちは、いきなりこの書籍から入ると「全然入門じゃないよ」的な感想を頂くかもしれません。
ただしそれはここまで紹介したDDD関連書籍の全てに言える話なので、適当なソフトウェア開発解説書籍で知識を補完した上でDDD書籍に挑む事をお勧めします。
おすすめのDDD書籍の読破順
仮に私が一からDDDを身に着ける、もしくは自分の後輩にDDDについて一から身に着けさせると仮定した場合、2020年の現時点では以下の順番、読み込み度で進めていくことをお勧めします。
1. 「実践ドメイン駆動設計」でDDDの全貌を眺める
何事も、マクロの視点で全体をとらえたのち、ミクロの視点に移行することがスムーズな理解を助けます。
DDDにおけるマクロの視点とは、ソフトウェアのコードで表される部分以外についても指南となる戦略的設計を指します。
これについて現時点で最も詳細に述べた書籍は「実践ドメイン駆動設計」、IDD本です。
最初にこちらの書籍を手に取り、ざっくり最後まで読み進めましょう。この際、意味が分からない部分に固執して深堀するのではなく、さらっと読み飛ばすことが大事です。
一旦先に進んだ後に再度最初から読み進めると、すんなり理解できることもあります。特に、戦術的設計については後述する書籍でカバーするつもりでぺらぺら読みで大丈夫。
2. 「ドメイン駆動設計入門」でコードのイメージをつかむ
IDDD本を通してある程度DDDの全体感をつかめたら、コードを書いていくことでよりDDDを身近にしていきます。
この際に参考となる書籍は「ドメイン駆動設計入門」です。2020年に発売したばかりのこの日本語書籍からは、実際のプロジェクトにすぐにでも適用可能なDDDの戦術TIPSを得られるはずです。
特に、最初の方で触れる「値オブジェクト」と「リポジトリ」は、これを実装するだけでも大変強力な武器になるはず。
3. 戦略的設計の機会を伺う。まずはユビキタス言語のコード化から
ドメインの定義や境界付けられたコンテキストの決定やらは、業務開発において一介のエンジニアが働きかけることでどうにかなるようなものではありません。
これがDDDの難しさです。プロジェクト全体の決定権がるPLやPMを巻き込んで、DDDを採用することでいかに効果的に課題解決につながるかを説明しなければなりません。
が。現実的に考えて相当に恵まれた環境で働いていなければ、こういった説得は無理だと思っています。
特にエンタープライズ系の業務システム開発において、古臭いウォーターモデル開発を採用して、意味のないドキュメントを量産しながら単価のみで決められたコーダーを使って開発していく現場では絶望的だと思って下さい。
DDDの強味は変化に強いソフトウェア構築基盤が出来上がっていくことです。
それに対して、前述のエンタープライズ現場において、保守開発までを鑑みて方針決定をできるPLはほぼいません。
なぜなら、保守開発における難しさ、ソフトウェアの柔軟性を必要とした経験を持つ人間が上流工程を担当していないから。
そんな現場で、DDDの戦略の素晴らしさを声高に叫んだところで届くわけはないのです。声が枯れてやる気がそがれる前にやめましょう。
代わりに、実践できる部分を実践していけばよい。一番行動に移しやすいのは「ユビキタス言語」を見つけ、コードの実装に落とし込んでいくことでしょうか。
まずはおすすめの2書籍から。余裕があればそれ以外にも
これからDDDの世界にのめり込もうとされる皆さまの助けになれば幸いです。
技術書って一冊当たり結構高額ですもんね。
余裕があれば全ての始まりであるEvans氏の「Domain-driven design」も読みましょう。同僚にドヤれます。
DDDに関する書籍が増加傾向=採用する現場が増えてきているのでは
エンタープライズの現場こそ、一度ソフトウェアを構築すれば10年とか平気で稼働させるわけです。そしてビジネス環境は確実に変化していく。
そんな保守開発が必須とされる現場にこそ、DDDを採用するメリット盛りだくさんです。
少しずつですがDDDを採用する現場が増えてきているのでは。関連書籍が増えてきていることは、もしかしてDDDがメジャーになっていくことの表れなのかも。
少しでもDDDの布教になりますように。
今度は現場でDDDを採用することの難しさについて掘り下げようかな。
コメント