読みやすく、メンテナンスしやすいコードを書きたい。
その思いから設計に関する書籍や記事に目を通してきて、あるとき出会ったのが「ドメイン駆動設計(DDD)」というアプローチでした。
DDDの世界に足を踏み入れたものの、コードに偏った“戦術的DDD”ばかりに目が向いていており、”戦略的DDD”に取り組めていないのがネックでした。
ユビキタス言語や境界づけられたコンテキストといった、より抽象度の高い“戦略的DDD”の要素を実務で活かすにはどうしたらいいのか――。
そんなとき手に取ったのが『ドメイン駆動設計をはじめよう』でした。
エヴァンス本を読む前に土台を固めたいという狙いもあり、本書に期待を込めて読み進めました。
この記事では、『ドメイン駆動設計をはじめよう』をどうして読み始めたか、読んでどう感じた・どうなったか、どんな人におすすめかを紹介します。
本書を手に取ったとき、自分の中には2つの期待がありました。
ひとつは、自分の中にあったDDDの「理解のあいまいな部分」を補完すること。
とくに、ACL(Anti Corruption Layer)やOHS(Open Host Service)、PL(Published Language)といった境界づけられたコンテキスト間の連携に関する設計パターンについては、実務で扱うにはまだ不安が残っており、体系立てて学び直したいと考えていました。
もうひとつは、“戦略的DDD”の実践ノウハウを得ることです。
戦術的DDDはコードレベルである程度取り入れられていても、ビジネス戦略と結びつける視点やチーム全体での言語統一といった視座は、現場でうまく運用できていない気がしていました。
そうしたギャップを埋めるヒントを本書に求めていました。
読み進める中でまず感じたのは、実装に関する解説が非常に丁寧だということです。
DDDの基礎知識を補いたいという私の目的に対して、本書はその期待にしっかり応えてくれました。
とくに、ACLやOHSといったコンテキスト間の連携にまつわるトピックは、設計の意図が丁寧に説明されていて、理解が深まりました。
また、イベントストーミングの具体的な活用法など、戦略的DDDを実務で始めるうえでのヒントも多く含まれており、「次は現場でこう動いてみよう」と思える内容が散りばめられています。
一方で、注意点として挙げたいのは「訳語の違和感」です。
訳者は読者の理解しやすさを重視して訳語を工夫しているのですが、すでに別のDDD本や実務で馴染んでいる言葉と異なる部分が多く、読んでいる途中で“脳内変換”が必要になる場面が多々ありました。
とくに、ある程度DDDの知識がある人ほど、違和感を覚えるかもしれません。
ただこれは、本書の翻訳においても境界づけられたコンテキストを意識してユビキタス言語として訳語を選んだとのことなので、そこは受け入れて理解していくのが良いと思います。
本書の中でも印象的だったのは、第4章「区切られた文脈同士の連係」と第12章「イベントストーミング」です。
第4章では、自分が課題に感じていたACL(Anti-Corruption Layer)やOHS(Open Host Service)、PL(Published Language)といった境界づけられたコンテキスト間の連携手法について、しっかりとページが割かれていました。
曖昧だった知識がクリアになっただけでなく、「こういう状況でACLを使うのか」といった実務の場面がイメージできるようになったのが大きな収穫でした。
また第12章では、イベントストーミングの進め方が非常に具体的に解説されていて、「これなら実際にやってみよう」と思える内容でした。
実際に事業部を巻き込んでワークショップを行うのはハードルが高いかもしれませんが、エンジニアが主体となってヒアリングの際に活用するという柔軟な形でも、設計に一定の効果をもたらせそうです。
本書を通じて、自分がもっとも強く印象に残ったのはユビキタス言語(同じ言葉)を使うことの重要性です。
「ユビキタス言語は大事」といった話は、これまでにも聞いたことがありました。ですが、本書を読んで初めて、「思っていた以上に重要なんだ」という実感を持てました。
特定の章で声高に強調されていたわけではありません。
それでも、どの章を読んでいてもユビキタス言語の考え方が繰り返し登場し、自然とその重要性が染み込んでくるような構成になっていたのです。
この読書体験を通じて、今後の実務でも「共通言語をどう作るか・どう使うか」にもっと注意を払っていきたいと強く感じました。
本書で得た学びは、すでに業務に活かしはじめています。
そのひとつが、ユビキタス言語を意識して、言葉の選び方・使い方に注意を払うようになったことです。
モデルや会話の中で使う言葉の精度が上がることで、チーム内の認識ズレが減り、地味ながら大きな変化を感じています。
また、今後はコンテキスト間の疎結合を意識した設計・実装が求められる業務にも関わる予定があり、第4章で学んだ知識はまさにタイムリーな内容でした。
それに加えて、設計フェーズに入った際には、イベントストーミングの手法を自分なりに試しながら、よりよいモデリングを目指していきたいと考えています。
本書は、DDDを学び始めた初心者から、実務で戦略的DDDに挑戦したい中級者以上のエンジニアまで、幅広い層におすすめできる内容です。
戦術的DDDに関しては、図や実装例が丁寧に用意されており、初学者でも「なるほど、こういうことか」と理解しながら読み進められます。
一方で、戦略的DDDに関しても、著者の実体験に基づいた現場視点の記述が多く、「わかっているつもりだったけどうまく実践できていない」という中級者以上にとっても、学びの多い一冊だと感じました。
ひとつ注意点を挙げるとすれば、本書では従来のDDD書籍と異なる独自の訳語が用いられていることです。
特に過去にエリック・エヴァンス本などで用語に慣れ親しんだ方は、読みながら「これってあの用語のことか」と変換する必要があり、少し混乱するかもしれません。
この記事では、『ドメイン駆動設計をはじめよう』をどうして読み始めたか、読んでどう感じた・どうなったか、どんな人におすすめかを紹介しました。
DDDに興味がある人、あるいは「戦術はできるけど戦略的な導入がうまくいかない」と感じている人には、本書が大きなヒントになるはずです。
何より、「今すぐ完璧にDDDを導入しよう」ではなく、一歩踏み出すための道筋を丁寧に照らしてくれる構成が心強かったです。
実務に悩む人こそ、手に取ってみてはいかがでしょうか。