皆さんこんにちは!フェンリル島根支社で PM をしている梶野です。
突然ですがフェンリル島根支社では顧客のビジネスの成功と成長にプロとして全力で向き合うために、DDD (ドメイン駆動設計) という武器を活用しています。
なぜ、DDDを武器としているのかを説明すると、島根支社のミッションステートメントの説明が必要になり、今回の本題から外れて長くなってしまいそうなので、また別の機会に記事にしたいと思います(笑
DDD をより活用するために
さて、私たちは DDD についてチームでの共通認識の構築のために技術書としてはの「エリック・エヴァンスのドメイン駆動設計」「実践ドメイン駆動設計」などの書籍を元に学習し、いくつかの案件で考え方を取り入れています。
ただ、DDD の習得と実践は難易度が高く抽象的な部分も多いため、常に学習しているものの、書籍や Web サイトから学ぶだけでは物足りなさを感じていました。
そこで「なんとか外部の方にご指導いただける機会はないだろうか」という話になり、「どなたにお願いしよう?」と考えたところ、DDD の日本語の記事を調べると必ず出てくる「あの人」にお願いするのはどうだろうという結論になりました。
そのまま打診し、トントン拍子に話が進んで島根まで足を運んでいただけることになりました。そう、little hands こと松岡幸一郎さんです!
日取りは2020/3/19(木)と決まり、勉強会は丸一日を使って次のような日程となりました。今思えば、緊急事態宣言前に開催できたのは不幸中の幸いだったかなと思います…
DDD 勉強会を実施!
・午前の部:概論、モデリングワークショップ
・午後の部:実装ワークショップ、質疑応答
なんだかんだあって記事にするのがとてもとても遅れてしまいました(汗
今回の記事では勉強会の内容をざっくり紹介させていただきます。
がいろん!
何はともあれ、まずは概論から!
概論は「DDD とは何か?」「なんのためにソフトウェアを作るのか」という根底の部分から始まり、「モデルとは何か」「コードとモデルが乖離することの影響」「軽量 DDD」「DDD のアプローチの全体像」「ユースケース駆動分析設計」「どうやってモデルをコードに落とすか」「集約による強い整合性の確保」と言った抽象的なところからかなり具体的な実装よりの部分まで幅広く解説いただきました。
フェンリルでも既に DDD を取り入れ始めていたので、聞いていくうちに今まで感覚で認識していた部分が言語化されてはっきり理解できた部分がいくつもあり、とても納得感のある内容でした。
また、これまで参考にしてきた文献では分かりにくかった DDD の具体的な導入手順について、「ユースケース駆動分析設計」のお話がとても参考になりました。
※ 概論の内容が気になる方は最後に松岡さんの著書を紹介しているのでそちらをご覧ください。
モデリングワークショップ!
午前の部、第 2 弾は「概論で学んだことを実践してみよう!」ということでワークショップです。
4 ~ 5 人を1グループとしてチーム分けし、「ユースケース駆動分析設計」の考え方に従い、それぞれが以下のステップで進めていきました。
- 課題と顧客役を決める
- 顧客役から要件を聞き取りユースケースを作成する
- ユースケースを元にモデリングする
- 発表
- 質疑
松岡さんはオブザーバーとしてそれぞれのグループを回りながらアドバイスしていただきました。
このワークショップでの DDD に置ける1番の肝はステップ 3 「ユースケースを元にモデリングする」の部分かなと感じています。ユースケースから作ったモデルを顧客役の話を聞きながら少しずつ修正していく作業は、「モデルはどんな状態が望ましいか」「どうやれば顧客の問題を解決できるか」を考える体験としてとても有意義なものでした。
また、わざとPM、エンジニアといった役割を無視してグループを作ったことや、顧客視点を体験できたことも普段と違う視点を得られ面白い部分でした。
ただ、このワークショップをやったからといって一朝一夕でモデリングのノウハウが身につくものではありません。島根支社では今後、似た形のトレーニングをエンジニア教育のプロセスに組み込もうと計画中です。
実装ワークショップ!
午後からはさらに実践に近づき、コーディングへ足を踏み入れることになりました。
コーディングといっても、松岡さんが用意してくれたサンプルコードをDDDの戦術的設計を使って修正し、テストを通すという内容です。
この処理はどう直せばいいのか、松岡さんから飛んでくる質問に私たちが答え、ライブコーディングで修正が行われ、最後にテストを実行するという流れを何度か繰り返していく形式でした。
ペアプログラミングのドライバーを松岡さん、ナビゲーターを私たちでやっている感じといえばイメージしやすいでしょうか。
ナビゲーターはランダムで当てられたのでちょっとドキドキしましたね(笑
白熱の質疑応答!
最後に質疑応答です。
わざわざ島根までお越しいただいたこのチャンスを最大限に活かそう!ということで事前に質問募集し、リスト化していました。
その数なんと。。。48個!
流石に松岡さんもオンラインの勉強会以外でここまでは質問が多かったことはないと驚いておられました(笑
長めに時間とっていたのに質問が終わることにはいい時間になっており、勉強会は無事終了となりました。
謝辞
松岡さん、お忙しい中、島根までご足労いただき本当にありがとうございました!
短い時間ではありましたが座学から実践まで密度の濃い内容で DDD の全体の流れに触れることができ、メンバーそれぞれ事前知識に差はありましたが、一様に良い学びとなりました。
特に DDD に対して苦手意識があったメンバーは具体的なイメージが掴め、一気に理解が一層深まったようです。重ねてお礼申し上げます!
記事にするのが遅くなってしまい申し訳ないです(汗
松岡さんの著書もぜひ読んでみてください!
松岡さんが書かれている「ドメイン駆動設計 モデリング/実装ガイド」は DDD のエッセンスを実際の現場に当てはめてググッと凝縮したとてもわかりやすい本になっています。
これから DDD を導入したいと思っている方、一回学んだけど難しすぎて挫折した方には一読をお勧めします。