泥水エンジニア日記

泥水の数だけ強くなれる

『実践ドメイン駆動設計』を読んで社内勉強会をやった

経緯

little-hands.hatenablog.com

JJUG2017Fall で「DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話」というセッションを見て、その発表をした @little_hand_s さんとお話させていただいて、「DDDってすごい!俺もやる!」という気持ちになったのがきっかけ。

ちょうど同じくらいの時期に自社サービスの追加開発の話があって、

  • 既存のコードベースとは別のリポジトリで開発できそう
  • どうせやるなら理想の設計を追求したい
  • DDD ってやつのどこがいいのかいっちょ教えてくれや泥水さんよぉ

という流れで、開発チームのみんなを集めて社内勉強会をする運びになりました。

進め方

勉強会の教材に使ったのはヴァーン・ヴァーノンの『実践ドメイン駆動設計』。

実践ドメイン駆動設計 (Object Oriented SELECTION)

実践ドメイン駆動設計 (Object Oriented SELECTION)

『エリック・エヴァンスのドメイン駆動設計』とどちらにしようか悩んだんだけど、

  • 前に一度読んだことがあるものの、雲を掴むような話がずっと続いて辛かった
  • 「『実践』の方が圧倒的にわかりやすい」という話を @little_hand_s さんから聞いてた

という事情を加味してこちらにしました。『エリック・エヴァンスのドメイン駆動設計』に興味がある人は過去のブログ記事を読んでみてください。

gushernobindsme.hatenablog.com

構成

『実践ドメイン駆動設計』の章立てに沿って、三部構成で勉強会を実施しました。

  • 第1部:DDD の概要(第1章)
  • 第2部:戦略的設計(第2章〜第3章)
  • 第3部:戦術的設計(第4章〜第14章)

まずは DDD を導入するとどういうメリットがあるのか(あるいはオーバヘッドがあるのか)を理解してもらい、その上で、「戦略的設計」と「戦術的設計」という二つのツールの役割と使い方を説明する、という構成です。『実践ドメイン駆動設計』の受け売りですね。

勉強会には『実践ドメイン駆動設計』を全く読んでいない人にも参加してもらったんですが、この二つをはっきり分けて説明する構成にしたお陰で、みんな脱落することなく最後まで完走することができました。DDD に興味のあるデザイナ氏も遊びに来てくれたりして、和気藹々とした会になって良かったです。総スライド数155ページという最悪の構成で無茶のある進行をしたのに、みんなブチ切れることなく話を聞いてくれて本当に良かった。

全3回の勉強会を終えたあとは、ワークショップっぽい感じのコンテンツとして以下を用意しました。

  • みんなで現状のコンテキストマップについて認識合わせ
  • 理想のコンテキストマップを描いてみよう

「理想のコンテキストマップ」については、ホントはやりたかったんだけど、準備不足でうまく進行できなかったので割愛。とはいえ、4days の勉強会を通じて「レガシーシステムのここを直したい」「将来的にはこんな構成にしたいと思ってる」「ビジネスサイドの話をもっとたくさん聞いた方が良さそう」など、色々意見交換できたのはよかったかなと思っています。

DDD を実践することはまだできていないんですが、引き続きやっていこうと思います。おわり。