勘と経験と読経

略すとKKD。ソフトウェア開発やITプロジェクトマネジメントに関するあれこれ。

方法論は適材適所で!(「ドメイン駆動設計をはじめよう」を読んだ Part.2)

読むのがホネな技術書やビジネス書を取り上げて2週間の読書期限を課して読んでアウトプットする仮想読書会「デッドライン読書会」の第78回。同僚と読書期限を約束することによって積読が確実に減るという仕組み。過去記事はこちら

さて、今回読む本は「ドメイン駆動設計をはじめよう ―ソフトウェアの実装と事業戦略を結びつける実践技法」だ。高い評価の原著を、ドメイン駆動設計に関してはエキスパートな増田さん*1が翻訳しており間違いない本というイメージだが、まったくその通りだった。

ちょっと骨太な印象があったので、2回(2週間×2)に分けて読んでいて、前半の感想がある。本記事は後半で、「第Ⅲ部 ドメイン駆動設計の実践」以降および全体の感想を書いている。

全体の感想

前回の感想でも書いたのだけれども、本書は一級のドメイン駆動設計の解説書でありながら、ドメイン駆動設計の適用は価値を最大化するために必要最小限にとどめておくべきとも言っている点が素晴らしい点だ。

(引用注:実装技術は)

  • できるだけ単純なツールを選択する
  • 複雑な手段、つまりドメインモデル、イベント履歴式ドメインモデル、CQRSなどは、本当に必要な時に最後の手段として使う

ドメイン駆動設計をはじめよう ―ソフトウェアの実装と事業戦略を結びつける実践技法、10章 設計の経験則 より

いや、違うな(書いていて気づいた)。

ドメイン駆動設計の道具立てを使って、事業戦略(ドメイン)を適切に分解し、分解された業務領域それぞれに対して適切な道具を割り当ててシステムを設計する方法を本書は示している。そして道具としてドメインモデルを選択することは必要最小限にすること。そこまでが筆者のいうドメイン駆動設計なのだろう*2

とすれば、本書は小さなビジネスの事業戦略全体や、複数の業務領域に分割されそうなサイズのソフトウェア設計を考えるときこそ手に取るべき本だろう。

後半に関する細かい感想

筆者の経験に裏打ちされた「第Ⅲ部 ドメイン駆動設計の実践」

わたしは書籍を先頭から読む派なので最後に読んだのだが、本書には付録として筆者が大失敗した開発に関する事例研究が付録としてついている(付録A ドメイン駆動設計の実践:事例研究)。これが学び深い苦労話となっているのだが、この経験に裏打ちされた考察が「第Ⅲ部 ドメイン駆動設計の実践」には凝縮されていて味わい深い。

やりなおすことを前提に

特に素晴らしいと感じたのは「11章 設計を進化させる」という章である。類似で世の中には進化的アーキテクチャのような言葉もあるので紛らわしいが、11章はそういう話ではなく業務領域の発展に伴って、異なる実装方式のロジックを他の実装方式にどう変更していくか、という話が語られている。
これも、付録についている筆者の経験(ビジネスの変化に基づき、時として作り直しの必要にかられていた)に基づくものであり、すぐれた考察になっている。

なによりも大事なのは事業戦略(ドメイン)の分析と絶え間ない対話

ちょうど本書を読み終わるころ、JJUG CCC 2025 Springというコミュニティイベントで訳者の増田さんの新しいスライドが発表されていた(ご講演は聞けていない)が、本書を通読した後に見ると、なるほどと感じるものがある。

自分自身は一応エンタープライズソフトウェア開発の世界の住人であり、業務戦略の理解の重要性は知っていた気になっていた。が、事業戦略の文脈が上流工程を貫通して設計にまで影響を与えるイメージまでは、うまくもてていなかった気がする。

ちょっと今から「〔エッセンシャル版〕マイケル・ポーターの競争戦略」を読むかどうか*3は悩み中だが、この考え方はもうすこし探索してみたい。

*1:現場で役立つシステム設計の原則 〜変更を楽で安全にするオブジェクト指向の実践技法の著者。すいません、この本は興味があるのですが引き続き読めていません。同僚に「えっ読んでいないんですか」といわれて激しく凹みました

*2:そう考えて読み返してみると、本書ではドメインドメインモデルを明確に別の言葉として翻訳されている意図がよくわかる気がした

*3:一応「 世界標準の経営理論」である程度わかっているつもりではいるのだけど