こんにちは。west-cです。
携わっている新規サービスにてドメイン駆動設計(以下、DDD)を取り入れた開発を行っていることから、去年の秋頃からDDDの学習をはじめました。 今回は、私が学習にあたり読んだおすすめ書籍を紹介します。
目次
ドメイン駆動設計とは
本題へ入る前に、「そもそもDDDって何?」という方へ3行でとてもざっくりと説明します。
- DDDとは、ソフトウェアで問題解決しようとする領域(ドメイン)を中心に据えて開発を行うソフトウェア開発手法のこと
- DDDを実践することで、ドメイン知識がそのままコードへ反映されるようになる
- ドメイン知識とコードが地続きになることによって、変化に強いソフトウェアを構築できる
「変化に強い(保守性の高い)ソフトウェア」と聞いて興味を持った方は、これからご紹介する書籍を読んでみてはいかがでしょうか。
おすすめ書籍
初学者がDDDを学ぶ場合はこの順番で読むのがよいのではと思った順番に紹介します。
なお、学習前の私の状況は以下のとおりです。
現場で役立つシステム設計の原則 〜変更を楽で安全にするオブジェクト指向の実践技法
業務アプリケーションの保守性を高めるための設計手法について説明されている書籍です。
DDD学習の前段階におすすめです。
「リファクタリング」の内容にも通じるコードの見通しの良さの話からオブジェクト指向設計によるモデリング方法まで、業務アプリケーションにおけるコードをわかりやすくするための手法が説明されています。 タイトルだけを見るとDDDとは関係無いようにも見えますが、本文中には「業務的な関心事をドメインモデルとして表現する」考え方やDDDで見られる実装パターンが導入されていたりと、DDDのエッセンスが要所に詰まっています。
この書籍を読んだ当初の私はオブジェクト指向的なプログラミングに慣れていなかったため、手続き型の設計からの発想の切り替えに役立ちました。 「DDDおよびオブジェクト指向設計を取り入れたら保守性の高いコードになりそう」と思うきっかけにもなり、学習のモチベーションにも繋がりました。
ドメイン駆動設計 モデリング/実装ガイド
DDDのモデリングから実装までの一連の流れが紹介されている書籍です。
全100ページほどでDDDの全体像がコンパクトにまとまっています。 初学者が「DDDとは」を理解するには、まずはこの書籍を一読するとよいのではと思います。
著者の方のYouTubeチャンネルに書籍の解説動画が投稿されていますので、まずはこちらを観てみるのもアリかと思います。 動画後半の質問回答コーナーでは視聴者の方からの疑問が多く寄せられており、こちらもためになります。
ちなみに、弊社では現在こちらの書籍の読書会を行っています。 DDD初心者から実際にDDDに取り組んでいる・取り組もうとしているサービスのメンバーまで、幅広い層が参加する会となっています。 書籍を読む中で湧き上がる素朴な疑問に対して「うちのサービスではこのような方針にしている」といったリアルな実情を聞くこともでき、活発に意見交換が行われています。
ドメイン駆動設計入門 ボトムアップでわかる! ドメイン駆動設計の基本
DDDにおける実装パターン(戦術的設計と呼ばれています)を中心に紹介されている書籍です。
戦術的設計の各パターンについて詳しい解説と実装指針が示されています。 戦術的設計の理解のために一読するのはもちろん、実装時にリファレンス的な用途で眺めても参考になります。
私がDDDを実践しはじめた頃はまだ刊行されていなかったため、この書籍の前身である「ボトムアップドメイン駆動設計」によくお世話になりました。 DDDに慣れない当初はどのように実装するのが適切なのか迷うことが多々ありましたが、サイトに記載されている詳細な説明が判断材料となり助けられることも多かったです。
Domain Driven Design(ドメイン駆動設計) Quickly 日本語版
後ほど紹介する「エリック・エヴァンスのドメイン駆動設計」、通称「エヴァンス本」をコンパクトに要約した書籍です。
重厚なエヴァンス本の要点を掴むことができます。
この書籍では、これまで紹介してきた書籍ではあまり詳細には触れられてきていなかった「境界づけられたコンテキスト」などの戦略的設計に関する解説も含まれています。 これから紹介する2冊は戦略的設計に関する話も登場し難易度が高くなるため、この書籍を先に読むとこの後の理解がスムーズに進むのではと思います。
実践ドメイン駆動設計
エヴァンス本の内容をコードを交えて具体的に説明している書籍です。
DDDを取り入れた架空のプロジェクトを題材としており、「実際のプロジェクトではどのように実現するのだろう?」と思う部分が実装例つきで解説されています。
サンプルプロジェクトは複数アプリケーション(=境界づけられたコンテキスト)に分割されており、これまで紹介した書籍でのサンプルプロジェクトの中でも大規模なものとなっています。 「ドメインイベント」など、DDDにおけるコンテキスト内外との情報連携の手段に関して詳細に述べられており、まさにDDDを実践する際の具体例が詰まっています。
エヴァンス本の説明は抽象的なため、先にこちらを読んでおくとエヴァンス本で言っていることのイメージが付きやすい印象です。 ただ、どちらの書籍も難しいため理解を定着させるためにはそれぞれ読み返す必要があると思います。
なお、この書籍の章ごとの要約が「IDDD本から理解するドメイン駆動設計」として連載されており、章を読んだ後の分かったようで分かっていない脳内を整理するのに役立ちました。「「実践ドメイン駆動設計」から学ぶDDDの実装入門」として書籍化もされているようですので、近いうちにこちらを片手に再読したいと思っています。
エリック・エヴァンスのドメイン駆動設計
ドメイン駆動設計の原典とも呼ばれる書籍です。
原典ですが(原典がゆえに?)書いてある内容が難しく、私はひととおり読了こそしましたが理解できた感覚はありませんでした……。 対象となるドメインをどのようにモデリングし深いモデルへ到達させてゆくかや戦略的設計について詳細に述べられている書籍は少ないため、その点は一読してみる価値はあると思います。
本文中で例として挙げられているアプリケーションは、筆者が実際に携わった業務アプリケーションが基になっているため、例示されるドメイン知識にリアリティがある点もこの書籍ならではだと思います。 リアリティのある複雑なドメインを対象にしているがゆえに理解が難しい点も無きにしもあらずなのですが、対象分野が違うだけで業務アプリケーションにおけるドメイン知識は元来複雑なもののはずですので、この内容が理解できればDDDに対する汎用的な知識が身についたということなのかなと個人的に思っています。
なお、前述の「ドメイン駆動設計 モデリング/実装ガイド」の読書会の前は、こちらの書籍の読書会が弊社内で開催されていました。
私はこの読書会ではじめてエヴァンス本に触れたのですが、「わからない」を参加者の間で共有でき、各々の解釈を語り合うことでモチベーションの維持に大いに繋がりました(一人で読んでいたら挫折していたと思います)。
「エヴァンス本は難しい」という前評判に腰が引けてなかなか手を出せずにいる方(過去の私です)は、身近な方を誘って一緒に読みはじめてみるのもアリだと思います。
おわりに
ドメイン駆動設計と聞くと名前だけで内容がイメージできず難しい印象を受けますが、ここ最近は入門者向けの書籍やスライド、ネット上の記事なども多く見かけるようになり学習のハードルは下がったのではと思います。
かくいう私はDDD歴1年未満の新参者であり”完全に理解した”の域にもまだ到達できていないとは思うのですが、「ドメイン知識をそのままコードに落とし込むことでコードの見通しが良くなる」「他の人が書いたコードもどこに何が書いてあるのか理解しやすい」などの恩恵は現時点でも感じています。 まだ戦略的設計に関する知見は浅いと感じていますので、今後も周辺知識の習得含め学習を続けていきます。
みなさんもぜひこの機会にDDDを学んでみてはいかがでしょうか。
エンジニア中途採用サイト
ラクスでは、エンジニア・デザイナーの中途採用を積極的に行っております!
ご興味ありましたら是非ご確認をお願いします。
https://career-recruit.rakus.co.jp/career_engineer/カジュアル面談お申込みフォーム
どの職種に応募すれば良いかわからないという方は、カジュアル面談も随時行っております。
以下フォームよりお申込みください。
rakus.hubspotpagebuilder.comラクスDevelopers登録フォーム
https://career-recruit.rakus.co.jp/career_engineer/form_rakusdev/イベント情報
会社の雰囲気を知りたい方は、毎週開催しているイベントにご参加ください!
◆TECH PLAY
techplay.jp
◆connpass
rakus.connpass.com