「いま」ドメイン駆動設計について書く(~勉強中の身~編)
はじめに
ドメイン駆動設計を勉強している。まだまだまだまだ勉強中の身ではあるものの、だからこそ「こう勉強してきたら、少しずつ理解できた」というものを書けるのではと思い「いま」書いてみる。若干ポエムっぽいのはご理解を。
ちなみに「エリック・エヴァンスのドメイン駆動設計」は恐れて買ってすらいない。「実践ドメイン駆動設計」は買ったけど読んでない。というレベルです。よし、対象読者が絞られた。強い人はこれから下は読まない。
興味のきっかけの振り返り
「ドメイン駆動設計」ってなんだろう?と思い始めたのが昨年の11月。きっかけはWEB+DB PRESS Vol.113の特集。
こんなことを思っていたらしい。
ドメイン駆動設計の特集がわかりやすくて感動。悪いコードをリファクタリングしながら指し示してくれると、納得感がとても強い。
— ちゃぱ (@as_chapa) 2019年11月21日
定期刊行物一覧:WEB+DB PRESS #gihyojp https://t.co/PPxGcxXJAV
この当時でいうと、「ドメイン駆動設計入門」も「ドメイン駆動設計 モデリング/実装ガイド」も刊行されておらず、どう勉強していいのかわからないなーと手探りな感じだった。Twitterを見返すと、どうやら「現場で役立つシステム設計の原則」から読み始めたらしい。(Twitterって便利だなぁ)
「現場で役立つシステム設計の原則」はとても素晴らしい本なのだけど、いま「ドメイン駆動設計」を勉強するなら違う本を選ぶ。
いま自分が思うドメイン駆動設計
「ドメイン駆動設計」ってスコープが広すぎて「感覚的にわかる」ところと、そうではないところが人によって大きく異なるのではないかな?と思う。
例えば普段の業務が実装に近い場合は、「値オブジェクト」とかのほうが理解しやすい。普段の業務がお客さんと要求を詰めてくような人の場合は、「ドメインエキスパートと~」とか「境界づけられたコンテキストが~」とかのほうがしっくりくる。
ドメイン駆動設計が、ソフトウェア開発の全般を取り扱っているので、上記のような疑問を持ったのかな、と思う。自分のキャリアでいうと、プログラマとしてコードを書いていた時期よりも、お客さんと会話しながら要件を詰めていた時期のほうが長いので「ドメイン駆動設計で書かれてることって、要件定義で普通にやってることじゃない?」という感覚を持った。実装面から興味持って勉強し始めたのに、「あれ?」と思ったりはした。
いま学ぼうとする人にどう薦めるか?
ドメイン駆動設計が気になる。という人にはまず以下の書籍をお薦めする。
全体像がとてもわかりやすく書いてある。きっと「エヴァンス本」に書いてあることをいい感じに端折ってくれていると思うのだけど、前述した通り「エヴァンス本」を買っていないので確認できない。けどきっとそうだ。
これを読んだ上で、モデリングのほうに興味を持つか、実装のほうに興味を持つかで次のステップが変わるのだろうなと思う。
もうちょっと「エヴァンス本」から漏らしたものを把握しておきたいのであれば、無料のこちらにサッと目を通すのも良いかと。
https://www.infoq.com/jp/minibooks/domain-driven-design-quickly/
モデリングに興味を持った人
えっと、、、わかりません。(自分が実装のほうに興味を持ったので)
実装に興味を持った人
とにもかくにもこれかなぁ、と思う。
これを読みながら、以下のPodcastを聞くと趣深い。
35. クリーンアーキテクチャと DDD(nrslib) | PHPの現場
実践して得られる気づきは大きいと思うので、その先は実際に自分でコード書いてみるのがいいのではないかな、と思う。
わたしの読書履歴
ドメイン駆動設計に絡んできそうな本として、以下の順序で読み進めて今に至っている。「あぁ、この辺は読んだうえで書いてるのね」くらいに思ってもらえれば。
2019年12月
現場で役立つシステム設計の原則 〜変更を楽で安全にするオブジェクト指向の実践技法:書籍案内|技術評論社
2020年1月
わかる!ドメイン駆動設計 ~もちこちゃんの大冒険~【C91新刊】 - TechBooster - BOOTH
https://www.infoq.com/jp/minibooks/domain-driven-design-quickly/
2020年4月
ドメイン駆動設計 モデリング/実装ガイド - little-hands - BOOTH
【PDF版】わかるかも!? ドメイン駆動設計 はじめの一歩 - シン・オブジェクト倶楽部 - BOOTH
その他の参考情報(見てないものも含む)
本だけではなくこれらのインプットからも理解を進めた。一部、まだ見てないものも含む。
little_hand_s DDD Channel - YouTube
- 松岡さんの解説動画
匿名で聞けちゃう!松岡@DDDブログ書いてますさんの質問箱です | Peing -質問箱-
- 具体的なQAが多い。なんなら質問できちゃう
https://www.youtube.com/watch?v=5oJeSrwztPg
- 成瀬さんのクリーンアーキテクチャの解説動画(DDDではないけど)
35. クリーンアーキテクチャと DDD(nrslib) | PHPの現場
- クリーンアーキテクチャの話が多かったりするけど、DDDのことも
ドメイン駆動設計に15年取り組んでわかったこと 「ビジネスルール・値オブジェクト・型」が3つのキーワード - ログミーTech
- 増田さんの講演文字起こし
おわりに
軽い気持ちで書き始めたら2,000文字以上になってしまった。入門系の本ばかりを読んでおり、いい加減「エヴァンス本」読もうかな、と思っている今日この頃。「エヴァンス本」を読んでしまうと、初学者寄りの発想ができなくなるのでは?という謎の恐怖から、いまの断面で書いてみた。いつか「~ドメイン駆動設計極めたり~編」を書けるようにがんばろう。