レガシーをぶっつぶせ。現場でDDD!2nd 「インプット<アウトプット!」に参加してきました

昨日12月14日に行われたDDDの設計イベントに参加してきました。
https://genbade-ddd.connpass.com/event/156060/
今回はテーマとしてインプット<アウトプットというように、通常、登壇者の発表を聞くだけが多いイベント、勉強会とは違い、参加者がアウトプットを行うことを目的としていて、各々興味のあるセッションでワークショップを行う珍しい形式でした。
私も今回のようなワークショップは初めてで、大丈夫かなぁ、ちゃんとグループの中で議論ができるかなぁなんて不安を感じながらも参加したのですが、とても濃い一日で参加して本当によかったと感じましたので、感想を残しておきます。

第1部 モデル・コードの変更がどう表現されるかハンズオン(BIGLOBE)

第一部ではBIGLOBEさんのセッションに参加させていただきました。
「格安SIM仕様書」という課題があり、それについて、付箋を使ってモデリングをし、Javaでコーディングするというセッションでした。
モデル⇔コードの往復をすることの大切さを学んで欲しいということで、ドライバーを務めてくださったBIGLOBEのエンジニアの方がうまくリードしてくれて、グループのみんなで付箋を見ながら話す、コードを書きながら話すみたいなことができて、狙いが達成できたいいセッションだったのではないかと思います。
私が参加したグループも時間内にクリア(用意されていたテストをオールグリーンにする)することができました。課題のボリュームと時間はちょうどよかったのではないかと思います。

私個人としては、割と積極的に議論に参加できたことやDDDの勉強を通して習得したパターンや考え方で皆さんと話し、コーディングをうまく進めていけたので、自分の設計力が2,3年前に比べて確実にあがっていることが実感できて少し自信がつきました。良かった。

あと、これから述べる違う形もやってみたかったなぁと思ったのは、もっとリファクタリングによった形式です。
今回は、仕様を満たしていない準備されたコード(テストが通っていないコード)から仕様を満たすように実装するという形だったので、とりあえず仕様を満たすコードを時間内に書こうという心理が働いてしまいました。
変更に強い、モデルが仕様を語るというのがDDDのメリットだと思うので、もともとトランザクションスクリプトで書かれたいたコードをDDDを使って変更に強いコードにする、モデルを見れば業務が分かるようなコードにするということでモデルにもっと注目する形式をやったら、また違う議論ができるのかなと感じました。もしかしたら、モデル⇔コードの往復も多くなったかも?

第2部 モデリングワークショップ 〜割り勘ドメイン編〜(かとじゅん)

第2部ではかとじゅんさんのセッションに参加させていただきました。
こちらのセッションはイベントの5日前に課題が公開され、事前にフライングして考えてきていいよということで、考え始めたものの、ああ、これは時間内に解くのはかなり難易度高いと感じ、当日、置いてけぼりをくうわけにはいかないと思い、それなりに準備していきました。
ですが、意外と当日に課題の内容を知った人も多かったようで、それなのに、すんなり議論に入れる方々はさすがだなと感じました。私は準備していってよかったですw
こちらも「割り勘」という課題に対して、付箋、ホワイトボードを使ってモデリング、そしてJavaでコーディングと第1部と形式は似ていたものの、課題の内容的に時間内にコーディングが終わるものではないので、メソッドの中身は空で進める形式でした。
お題はこちら https://github.com/j5ik2o/warikan-domain

いやー、難しかったw
まず、割り勘の計算式の仕様が与えられていないので、計算仕様をグループで議論するところから始まったので、大変でした。最終的には他のグループ含めて、比重で考える派と、均等割りした時の金額をベースに考える派の二つがありました。私が事前に思いついていたのは後者だったのですが、当日参加したグループは比重で考える人が多かったのでそちらで進みました。
実際のモデリングとコーディングですが、第1部と違い、実装が空なので、クラスの関連と、こういうメソッドを多分作るよねーみたいな感じで、いままで経験したことのない設計というか、作業でした。
なんとかついていけてほっとしましたw
また、実装に関してはコーディングを担当してくれた方のIntelliJの操作がスムーズだったのでとても心強かったです。私も、もっとショートカット覚えよう。
なんとかクラスを作るところまではいけたのですが、うーん、コーディングが完了していないので、ちょっと不完全燃焼感はありました。
かとじゅんさん本人もおっしゃっていましたが、もっと時間があると、さらに良かったのかもしれません。
とは言え、他の会社のエンジニアの皆さんと、どんなモデルを作るのがよいのか、あれだけ議論できたのは初体験でとても刺激でした。
うーん、転職して、現在3社目の私ですが、これまでの社内では今回のような議論を一緒にできるエンジニアがいないのが悲しいところ。でも、このようなイベントがあれば、こういう経験もできるので、本当に感謝です。

第2部に関して、個人的に一つ思ったのが、計算式の仕様は最初から与えられてもよかったのかなーと。そもそもの計算仕様を考えるのも課題の狙いだったようですが、この計算仕様でチーム内で意見が分かれたりしてしまうと、あの時間内では進めることが難しかったのかなと。計算式が決まっていても、モデリング力を鍛える目的は達成できたのではとも思いました。

あと、自分なりの実装は近日中にやってみたいと思います。
先にかとじゅんさんたちで、MoneyクラスとMemberクラスなどが実装されていたのですが、これだけでも学べる事多く、ここで書かれているテクニックを盗んで、自分のものにしたいので、コーディングやってみます!

第1部と第2部で共通して思ったこと

第1部と第2部で共通して思ったことは、DDDのパターンは確実に浸透してきているのだろうなと思いました。
自然とバリューオブジェクトやファーストクラスコレクションなどの言葉が飛び交い、それを理解している人たちが多かったので、そう感じました。
あと、Javaやってる人、思ったより少ない?w
第2部では6人中、私含めて2人しかJavaが書けるひといませんでしたw
このようなイベントではスタートアップやWEB系のエンジニアが多いと思うので、やっぱりPHPやRubyの方が多いのかなぁ。
この記事を書いていて、普段どの言語をやっているかの割合も少し気になりました。

クロージングワークショップ DDDに興味を持ってもらうために、どんなメリットを伝えるのがよいか

クロージングのワークショップとして、参加者から共感多かったお題に対して、集まって意見交換するものがあり、私は「DDDに興味がない人に興味をもってもらうために、どんなメリットを伝えたらよいのか」という内容で参加しました。
結論からいうと、そんな簡単に伝えられるメリットはなく、興味がない人に興味をもってもらうの相当難しいという方向になりましたw
やはり、みなさん苦労しているようでした。やっぱりこれまでのスタイルがある人には、めんどくさいと思われるようです。エヴァンスの本も鈍器なので、いきなりこれ読んでくださいってのもハードル高いですし・・・
とはいえ、皆さんの共通認識となったのは二人目をつくることが大事ということでした。私もそうですが、みなさん、いきなりバリューオブジェクト作ったり、ドメインってパッケージ作ったり強硬手段に出ているようですw
そして、そのやり方に興味を持つ人が出てくると仲間にできるよって。
あとは、何にも染まっていない新人や若手を染めるのも手段みたいな。
私の社内ではまだ二人目を見つけるのは難しそうですが、今やっている自分なりのDDDが、数年後、やっててよかったと思える日が来ることを信じて、また、二人目を作れるように辛抱強く、そして楽しくDDDで開発していこうと思います。

最後に

参加するのに少し不安もありましたが、参加して本当に良かったです。
運営の方々、登壇者の方々、参加者の皆様、本当にお疲れさまでした。
第3回があれば、ぜひ参加したいですし、それまでに私も設計力を高めておきたいです。ではでは。

この記事が気に入ったらサポートをしてみませんか?