✏️

「実践ドメイン駆動設計」の勉強会を開催して得られた勉強会の知見

2022/05/13に公開

概要

ドメイン駆動設計を学ぶために「実践ドメイン駆動設計」の勉強会を開きました。
14 週間かけて開催した結果、DDD だけでなく、勉強会についても知見が得られました。
そこで、備忘録として、勉強会の概要・知見(目的、参加人数、進行方法、よかったこと、改善すべきこと)・感想などについてまとめます。
IDDD 本を読んで得られた DDD の知見は、自身のブログに感想を書いているので興味がある方は読んでみてください(リンクは最後に載せています)。

https://www.shoeisha.co.jp/book/detail/9784798131610

勉強会について

目的

勉強会では、以下の目的で IDDD 本を課題本にして開催しました。
総じて、参加者全員が DDD に対して深い知見を獲得したいという動機で実施しました。

  • 「エリック・エヴァンスのドメイン駆動設計」(以下、エヴァンス本)を読む前の最終段階として読む
    • より具体的なことから学び、DDD の原著であるエヴァンス本をスムーズに読めるようにする
  • IDDD 本を読んだという実績
    • Evans 本に近い思想を取り入れることができる
  • DDD の入門書(以下の書籍)の内容を復習できる、深掘りできる
    • 「ドメイン駆動設計モデリング/実践ガイド」(松岡本)
    • 「ユースケース駆動開発実践ガイド (OOP Foundations)」(UCDD 本)
    • 「ドメイン駆動設計入門」(成瀬本)
  • 境界づけられたコンテキスト間のやりとりを学ぶことができる
    • 成瀬本、松岡本、UCDD 本では深掘りされなかった内容

参加人数・役割

参加人数は自分を含めて 4 人でした。
connpass といったプラットフォームで参加者を公募するのではなく、知り合いの間で勉強会を企画しました。

自分が勉強会のファシリテーターの役割を務めました。
ファシリテーターの役割は、当日の司会進行、勉強範囲の要約、意見だしなどです。
ほかの 3 人には特に役割はありませんでしたが、当日、勉強範囲についての意見や自身の知見などについて共有してもらいました。

期間・進行方法

「実践ドメイン駆動設計」は 14 章で構成されているため、1 章 1 週のペースで読み進めて 14 週間で企画しました。
1 回の勉強会は 2 時間から 2 時間 30 分程度で実施しました。
14 週間あるので、途中の会で参加できないメンバーもいましたが、振替の日を作ることなく開催しました。

それぞれが予習し、当日も読み進めながら理解を深める方法で進行しました。
副読本として、「『実践ドメイン駆動設計』から学ぶ DDD の実装入門」を使用して、適宜読むことにしました。
IDDD 本にはサンプルコードも用意されているため、必要に応じて読みながら進めました。
毎回の最後には、Slack で該当する章の感想を共有しました。

使用ツール

主に使用したツールは、Zoom、Slack、Google Drive です。
オンラインで勉強会を開催したため、Zoom を使用していました。
Slack は勉強会専用のワークスペースが存在し、さらに IDDD 本勉強会のチャンネルを作成しました。
リマインダー(Google カレンダーと連携)として使ったり、DDD に関する記事のリンクを共有したりするために使っていました。
ほかにも、Zoom はチャット欄が流れやすく振り返りにくいため、毎回にスレッドを作成し、チャットツールとして利用しました(個人を特定できる部分を伏せています)。

slack_screenshot
Slack の画面

進捗管理には Google Spread Sheet を使用し、Google Drive で共有しました。
文字で伝えにくい部分は、diagrams.net を使用していました。

spreadsheet_screenshot
SpreadSheet の画面

diargrams.net_screenshot
diagrams.net の画面

他には Mac のプレビューを使用していました。
PDF で IDDD 本を購入し、当日までに書き込みし、当日は PDF を画面共有しながら進めました。
PDF を画面共有しながら進めることで、現在どこを読んでいるのかすぐにわかり、進行しやすいメリットがありました。
画像では、黒塗りしていますが、赤字でコメントをしたり、マーカーを弾いたりなどしています。

iddd_pdf_screenshot
IDDD 本の PDF

勉強会の感想

勉強会自体の感想を記述します。

よかったこと

抽象的な分野(ソースコードの HowTo ではない)を学ぶ際に勉強会を実践すると理解が深まりやすく感じたため、開催して良かったと思いました。
具体的に効果を感じた点は 2 つあります。

1 つ目は、難しい本に対して複数人で知見を出し合いながら読み進めることで、理解を深められたことです。
500 ページにも及ぶ書籍で輪読会をするのは初めての試みでした。
書籍の難易度も考えると、1 人では心が折れる分量だったと思っています。
複数人で取り組み毎週の勉強会を強制することで、読み終えることができました。
また、DDD は個人の苦しんだ経験や改善した経験を元に議論が活発になるため、自身の固定観念を崩すことができたり知見のない分野での知見を深めることができました。
勉強会の途中で意見出しをするのはもちろんのこと、最後に感想を共有することで同じ章に対して受け取り方の違いがわかり、知見を深めることができました。

2 つ目は、自身がファシリテーターを務めることで、1 章ごとの理解を深めることを強制できたことです。
「人に説明することで理解が深まる」とよく言われます。
今回は自分がすべての章において、要約をまとめたり概要を把握しておく必要がありました。
そのために、毎週インプットだけでなく、アウトプットの練習、当日のアウトプットの段階が必要になりました。
DDD は抽象的な概念が多く、1 度読んだだけでは適切に理解できないことが多くあります。
人に説明できる(しようとする)ことで、理解を深められました。

改善すべきこと

勉強会の進め方は上記の通りですが、すべてにおいてうまくいったわけではありませんでした。
改善すべきことは 3 つあります。

1 つめは、期間が長すぎたことです。
14 週間をずっと同じモチベーションで続けるのは難しく感じました。
特に、IDDD 本は半分を超えたあたりから、DDD において当たり前な原則を繰り返し適用するようになるので、全体的に飽きていることを感じました。
ほかの難易度が高い本の場合、難しすぎて途中で投げてしまう可能性もあると思いました。
すべての会に参加を強制することも難しく、途中の会で都合が合わなくて参加できない人もいました。
ずっと続けているとほかの分野にも興味がでてくるのも考えものだと思いました。
今回は 1 週 1 章で進行しましたが、慣れた分野の本や一度読んだ本などは定量的な範囲で決めるのではなく、定性的な範囲で決めるとよいと思いました。
2 回目を開催する場合は、そのようにするつもりです。

2 つめは、すべて 1 人でファシリテーターを務めたことです。
たしかに、ファシリテーターを務めることで得られることも多かったです。
しかし、勉強会に対する自身の負担が重く、ファシリテーターを務めることによるメリットを 1 人で享受しているという問題点がありました。
毎回進め方が異なったり、章ごとの負担が異なったり、といった不均等性によるストレス軽減のため、今回はすべて 1 人でファシリテーターをしましたが、すべての勉強会に対して推奨はできません。
勉強会には、1 人ファシリテーターを立て進めていくのではなく、その場で読んで感想を言い合う方法があります。その場合は負担が均等になります。
ただ、オンラインではやりづらいこと、参加までに前提知識を合わせづらいことから、あまり分厚く難解な本に対してできる方法ではないので、今回は見送りました。

3 つめは、座学に割と近かったので、もっと体験できるような形式にしたかったということです。
特に DDD は本を読むだけでは身に付かない理解できない部分が多いと感じています。
IDDD 本のストーリーをなぞる形で体験し、メソッド自体には納得感がありましたが、自身の業務にそのまま適用することは難しく感じました。
実務のソースコードで実践するのが重要ですので、「ワークショップを開催したい」という意見もでてきました。
あとは、DDD 有識者である松岡さんが YouTube チャンネルで勉強会に使える動画を出しているので、それらを利用するのも 1 つの手だと思いました。

https://www.youtube.com/channel/UCbHtbIUxtfGjrDy1WcqxExw/featured

IDDD 本について

IDDD 本の感想(良かった点、悪かった点は、DDD について得られた知見、次にやること)は自身のブログで感想記事を書いてます。
IDDD 本の感想について詳細に知りたければぜひ見てみてください。

https://msksgm.hatenablog.com/entry/2022/04/27/063727

また、「『実践ドメイン駆動設計』から学ぶ DDD の実装入門」の感想を記述しています。

https://msksgm.hatenablog.com/entry/2022/05/09/185556

まとめ

  • 勉強会の知見を備忘録にまとめた
    • 目的、参加人数、進行方法、よかったこと、改善すべきこと
  • IDDD 本という難解な本の勉強会をすることで、DDD の理解を深めることに成功した
    • 抽象的な分野の理解を深めるのに勉強会は最適だった
  • 勉強会を実施することでよかったことも多かったが改善することも多く感じた
    • 期間・進行方法・体験方法など

Discussion