omuriceman's blog

iOS / AWS / Firebase / JavaScript / Deep Learning を中心とした技術を面白く紹介します!

DDDの勉強にオススメ!な書籍とブログを聞いてきた@「レガシーをぶっつぶせ。現場でDDD!2nd 」参加レポート

2019年12月14日に開催された「レガシーをぶっつぶせ。現場でDDD! 」に参加してきました。今回で2回目の開催になるそうです。テーマが「インプット<アウトプット」と言うことで、ハンズオンが多めでした。

genbade-ddd.connpass.com

少し遅くなりましたが参加レポートとセミナー中に話題に上がったDDDの学習コンテンツをまとめましたので皆様のお役に少しでも立てれば幸いです。

イベント開催の経緯

イベントの冒頭に本イベントの開催経緯について安西剛さんよりお話がありました。

www.meti.go.jp

所謂レガシーシステムであったり、技術的負債などが2025年以降毎年12兆円の損失(東京オリンピック4回分!)を生み出すというレポートが発表されたそうです。それを回避するための設計方針の一つとしてDDDを普及していきたいとのこと。僕はそんなマクロなことは考えられず、まずは目の前の「場当たり的コードからの脱却」がしたいです。

①モデル・コードの変更が互いにどう表現されるか体験するためのハンズオン

最初に参加したのは BIGLOBEさんが主催するハンズオンです。6人1グループでお題に対してドメイン駆動なプログラミングをおこなっていきます。参加者自身はコードは一切書かずに付箋にモデルを書いていき、その内容を元にBIGLOBEのエンジニアさんがコードを書いていくと言う流れです。実装をしていくお題は「契約するSIMのプランに応じた月額料金を計算する」というものでした。

僕がいたグループは最初は簡単なところから初めて徐々に値オブジェクトっぽいものを定義したり、ドメインごとに責務を分けていくみたいな流れで進めていきました。この共同で付箋を使いながらビジネスロジックを考えていく作業というのがとにかく楽しい!普段の自分の業務では話し合いながらモデリングをしていくという経験が無かったので複数人で一つのものを作り上げていくコミュニケーションがとても有意義でした。そしてBIGLOBEさんは普段からこうやって話し合いながら設計を行なっているとのことで、めちゃめちゃいい組織感溢れてました。

  • DDDには語彙力が必要(ビジネスを適切な言葉に置き換える)
  • ドメインモデルに正解はない

コミュニケーションに関してはチーム内で意見が強い人とかもいる時もあるのでファシリテーションが重要だなと感じたり、そもそも人材採用が重要になりそうだなと感じたり。DDDを学びにきたらなんかそれ以外に大事なところがあるように思えました。

ハンズオンの詳細についてはビッグローブさんの記事をご覧ください。

style.biglobe.co.jp

ドメイン駆動設計の基本スキルを体験的に学ぶ~値オブジェクトの見つけ方・作り方・育て方

次に参加したのは増田 亨さん主催のハンズオンです。前のハンズオンと同様にグループごとに1人ドライバーがついて全員でお題についてプログラミングをしていくというものでした。今回のお題は「新幹線の運賃を計算する」というものです。前のハンズオンで脳が疲れ切ったこととお題の難易度が数倍難しくなったこともあって途中全然頭が回りませんでした!だけど学びが深い。

github.com

  • TDDとDDDは共存する
  • コミュニケーションでお互いの認識を合わせていく→ユビキタス言語

こちらのハンズオンでも先にテストコードを書いてあとから実装を進めていき、コードが通ったらより良いモデルにリファクタしていく流れでした。最近SNSなどでTDDとDDDは相互補完の関係ですよ。というような内容を見かけましたがそれを実感できるようなハンズオンでした。

話は変わりますが「ユビキタス言語」ってDDDのEric Evansさんが提唱した言葉なんですね。このイベントで初めて知りました。

DDD(ドメイン駆動設計)の学習を始めるには

二つのハンズオンが終わった後に、気になるお題でディスカッションをおこなうワークショップがありました。僕は「DDDで最近出たオススメの書籍」というグループに参加しました。その時のホワイトボードメモがこちら↓

f:id:omuriceman:20191229133255j:plain

最近出たオススメの書籍という内容だったのですが、結局(前から発売されていた)以下の3つの書籍がいいよね〜。という話に落ち着きました。お笑いBIG3感ありますね。

📚書籍

まずはエヴァンス本として有名な「エリック・エヴァンスのドメイン駆動設計」です。この本からいきなりDDDに入門するには難しいぞ!という口コミを聞いていましたがここでも同じ見解でした。ただ、「なぜDDDが必要なのか?」が本の冒頭に書かれているとのことで初心者でも読む価値がありそうです。

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

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

IDDD本で有名な「実践ドメイン駆動設計」という本も取り上げられていました。

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

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

増田さん本と呼ばれている「現場で役立つシステム設計の原則」という本も紹介されていました。この本は僕も持っており自分にとってかなり良書でした。BIGLOBEさんのハンズオン前に話ししていた時も「順番的にまずは増田さん本→エヴァンス本に進むのがいいかも!」という感じでしたので興味のある方は買ってみるといいですね!

✏️ブログ

次にDDDを学ぶ上でオススメのブログはあるか?という話題になりました。これから紹介するブログは、本よりライトにDDDを学ぶのにオススメだそうです。僕も普段から読んだことのあるブログばかりでしたがあらためてDDD業界の雰囲気を知れて良かったです。

松岡さん little-hands.hatenablog.com

ミノ駆動さん qiita.com

nrsさん nrslib.com

nrsさんですが、イベント時にDDD本がでるらしい!と話題に上がっていました。ブログもわかりやすいし早く買いたいです!

ドメイン駆動設計入門 ボトムアップでわかる! ドメイン駆動設計の基本

ドメイン駆動設計入門 ボトムアップでわかる! ドメイン駆動設計の基本

  • 作者:成瀬 允宣
  • 出版社/メーカー: 翔泳社
  • 発売日: 2020/02/13
  • メディア: 単行本(ソフトカバー)

まとめ

イベントを通じての所感になりますが、DDDには組織作りが重要だなと感じました。現在DDDを取り入れている人たちに聞いてみたところ、すでに会社や会社内の人でDDDにある程度理解がある人がいてそこから初めて行くというケースが多い印象でした。DDDに限らずですが直接的にコストで見えづらいものは組織によっては説得が難しいですよね。そう言った意味も踏まえて、組織で全くの0からDDDを初めていくというのは前途多難だな〜という印象です。とはいえ自分から始めることはできると思います。

  • 軽量なDDDから始める
  • 個人開発などで始める
  • 今後もDDDイベントに参加していく
  • DDDを広めるには(社内で)1人ファンを作る
  • コントロールできる組織内で始める

まず自分の影響がある範囲から初めていくのがいいのかなと思います。次回のイベントも楽しみにしております。

備考

今回参加した時に書いたグラフィックレコーディングとBIGLOBEさんのハンズオンで全チームのモデリングを写真に納めたので紹介します。

グラフィックレコーディング

それぞれのハンズオンやワークショップで聞いた内容をまとめたものです。全体的に汚い部分はご容赦ください。

f:id:omuriceman:20191229144407p:plain:w400

f:id:omuriceman:20191229144502p:plain:w400

f:id:omuriceman:20191229144540p:plain:w400

BIGLOBEさんハンズオンの各チームのモデリング

他のチームがどのようにモデリングしていくのか興味があって写真に納めたのですが、大筋似ていますね。

f:id:omuriceman:20191229144019j:plain:w400

f:id:omuriceman:20191229144034j:plain:w400

f:id:omuriceman:20191229144047j:plain:w400

f:id:omuriceman:20191229144100j:plain:w400

f:id:omuriceman:20191229144111j:plain:w400

f:id:omuriceman:20191229144127j:plain:w400

f:id:omuriceman:20191229144140j:plain:w400

f:id:omuriceman:20191229144153j:plain:w400