松岡(little_hand_s)さんを招待してDDDモデリング・ハンズオンを開催しました

マーベリック株式会社、技術広報のリチャード 伊真岡です。先日弊社に松岡さんをお呼びしてDDDモデリング・ハンズオンを開催しました。

little-hands.hatenablog.com

弊社では「エリック・エヴァンズのドメイン駆動設計」の読書会を行っています。過去には「実践ドメイン駆動設計」も読書会の課題図書として取り上げたのですが、エヴァンズ本はそれと比べて抽象度が高く、読解はなかなか挑戦しがいがあります。読書会メンバーから「実際にモデリングを体験したら理解の助けになるのではないか」という声が上がり、ハンズオン形式のワークショップを提供してくれる社外の講師を探すことになりました。

エリック・エヴァンスのドメイン駆動設計

エリック・エヴァンスのドメイン駆動設計

  • 作者:Eric Evans
  • 出版社/メーカー: 翔泳社
  • 発売日: 2013/11/20
  • メディア: Kindle版

そこでDDDに関して、ブログや雑誌寄稿、登壇などで積極的に情報発信を行っている松岡さんにお願いしたところ、快く弊社でのモデリング・ハンズオン開催を引き受けてくださいました。

www.slideshare.net

ハンズオンはおよそ2時間半、最初の30分程度は松岡さんからのスライドを使った解説です。「モデリングとは何?」「どんな順番でモデリングを進めればいいの?」という基本に立ち返って、かつ松岡さんの実体験とともに解説していただき、エヴァンズ本を読んだけでは理解に自信が持てなかった部分を確認しながら学べました。

その後はハンズオンに移ります。ホワイトボードを使って「ユースケース図」「ドメインモデル図」という2種類の図をみんなで描きながらモデリングを行いました。

f:id:maverick-techblog:20200121040035p:plain

2チームに分かれてのモデリングで、片方のチームは「通販サイトのアフィリエイトプログラム」もう一方は「社内本棚に置く本の購入申請プロセス」というドメインをそれぞれ選びました。

「通販サイトのアフィリエイトプログラム」は非常に範囲が大きいドメインなので、ワークショップで収まる内容にするため適宜制約を仮定しつつ、一方で現実に即した「ポイント付与のタイミング」「ユーザや商品とアフィリエイトポイントの紐付け」などの難しい課題に挑戦していました。

「社内本棚に置く本の購入申請プロセス」は現在社内で実際に使っている手順をもとに議論しました。社内手順はスプレッドシートを使った非常に簡単なもので、「申請→承認くらいしか手順がない」「購入申請が予算内かどうかしか条件がない」と思っていたのですが、モデリングによってこの予想は裏切られます。運用でカバーしていた複雑さがあらわになり、管理者が様々な条件を考え、複数の状態遷移が伴う業務手順であることがわかりました。世の中の「スプレッドシートで十分」と思っている社内業務や、「CRUDで表現できる」と思っているアプリケーションの多くも、運用でカバーしている部分を解き明かせば想像以上に複雑なのかもしれません。

以下でワークショップに関する参加者からの感想の一部を紹介します:

  • ユースケース図→ドメインモデル図を作成する流れはわかりやすい、具体から抽象の流れはやりやすい
  • 困ったら世界を単純化(この世界の住民は全員アフィリエイトプログラムの会員など)で完結した、ただ実際にはドメインモデルはさらに複雑になりそう
  • ドメインモデルのオブジェクトとテーブルは別という意識が持てた
  • 多重度(1対N、N対N)を意識すると思考漏れに気付けそうだとわかった
  • 「状態遷移図をモデリングの早いタイミングで使っていい」「ホワイトボードの議論をツール(PlantUMLなど)で清書する」と現場でも使えそうなガイドをいただけた
  • 経験をもとに技術的な解決策を提示してもらえたのが学びになりました:
    • 「問)ユビキタス言語は頑張っても語彙がブレそう→答)画面の表示文言で合わせる方法がある」
    • 「問)ドメインモデルを自然に反映するためにデータベース層はRDBよりNoSQLの方が良い?→答)突き詰めるとCQRSが選択肢の一つになる」

参加者からも好評だった今回のワークショップ、知識として身につけたものを手を動かして確認できる良い機会でした。松岡さんありがとうございました!弊社ではDDDを含め今後も開発チームのスキル向上を、楽しさを追い求めながら継続していきます。