「レガシーをぶっつぶせ。現場でDDD!」に参加してきました
上記のイベントにブログ枠で参加しまして、そのレポートとなります。 基本的には自分が書きたかったことを書いてるだけですが、特に登壇者のみなさまのフィードバックになれたら嬉しいです。
ソフトウェアの核心にある複雑さに立ち向かう
www.slideshare.net
増田さん(@masuda220)の発表で、何故DDDを使うのか、どんな問題を解決したいのか、その全体観を見事に解説させていらっしゃいました。 スライド資料に要点をよくまとめていらっしゃるので、内容についてはここでは特に触れません。 あの分かりづらいエヴァンス本に書かれている抽象的なコンセプトを、おそらくはあの会場にいるほとんどの人に届くように翻訳できるのは増田さんが長い間実践されてきたからこそだと思います。
エンティティはどうとか具体的な部分で語られがちなDDDの抽象的な部分をこれほど見事に我々に届けられるのは当然増田さんの手腕によるところも大きいとは思うのですが、なんだかんだで同じ日本人だからこそという部分も実はあると思うんですね。 日本人の書いた書籍や説明が海外のものよりも自分たちの脳内に届きやすいのは、翻訳コストの有無もありつつも、外界をどう捉えるかというメンタルモデルが似てるからってのもあると思っていて、(「言語」ってそういうものらしいですし?)
- DDD実践経験豊富で
- 他者に知見を届けるためのアウトプット経験豊富で
- 日本人
という3つを満たす人物は今日の日本にはほとんどいらっしゃらないと思うんです。
なので結論:増田さんは超貴重な人
説明がマジで脳内に届きやすいという意味で、まさかいないとは思いますけど松岡さん(@little_hand_s)さんをフォローしてない方がいましたらした方が良いと思います。
ブログも
抽象的な教えを試行錯誤しながら解釈したDDDの実践レポート
www.slideshare.net
BIGLOBEのほげさん(@suzuki_hoge)の発表で、DDD初学者視点でのドメインモデリング試行過程を発表されていました。 「ドメインモデリングはこうやるんだよ」というハウツー的なものではなくて、あくまで現場で泥臭く試行錯誤されたという内容であることはとてもこの勉強会のテーマを体現されていて最高です。
残念ながら自分はまともにドメインモデリングをしたことがないのですが、そんな自分視点ではとても刺さる内容でした。自分の心の中の反応をまとめると、
- 「名詞の抽出から始めました」:なるほど!そこからスタートすればいいのか!
- 「ただのデータの箱になりました」:なるほどおおおでもすごい納得感あるううううううううあwせdrftgyふじこlp
- 「動詞の抽出始めました」:次は振る舞いを抽出するんやね!
- 「仕様書に書いてない振る舞い多すぎ」:だと思ったよ!!!!!
- 「input/outputを意識したらモデルが関係しだした」:なるほどすげええええええええええええええええ
みたいな感じでおそらくほげさんの試行錯誤を追体験?するように聴講させていただいて、一人で脳内がハイテンションになってました。モデリング経験無かった人間だからこそ共感しやすかったのかもしれません。
そんな経験無い勢なりに特に自分にとって収穫となったのが、モデリングの流れを直に肌で感じられたことです。急に「ドメインエキスパートと話しながら、問題を解決するのに便利なモデルを作り出す」なんて言われてもさっぱりわかりません。名詞の抽出、動詞の抽出、そしてモデル内の関係性の構築、初学者の方が一段ずつ階段を上っていく過程を経てようやく自分の中で腹落ちする部分が多かったのでとても身になる発表でした。ありがとうございました。
少し話は変わりますが、理解(余談:モデルとER図)のページで書かれていた「変更する頻度や理由が違うものは、分けておくと良さそう」というのはまさに単一責任の原則そのものですね。様子からして、おそらくこの名前を知らずにこの結論へ至ったんじゃないかなと受け止めましたが、試行錯誤の結果、最終的にSOLIDの原則に至るのはとても面白い事例だなと思いました。
しかしインパラ・アウトパラって略語は一般的なんですかね?
DDDサンプルコード ライブリファクタリング
自分の中でのベストセッションはこれでした。開幕増田さんが「そんな解説しないし、持ち帰れるもの少ないと思うよ」みたいな感じでたくさん集まってしまった人の期待値修正をされていましたが、自分には一番面白いセッションでした。
いろふさん(@irof)と増田さんが以下のリポジトリのリファクタリングをリアルタイムで行うという、言っちゃえばそれだけのセッションではあるのですが、 持ち帰ろうと思えばいくらでも持ち帰られるものがあるな というのが僕の感想です。
- 別言語の人(自分)から見たJavaのコーディング現場
- 設計に知見のある人同士が行う(行うことのできる)会話内容
- どの部分に着目しているのか
- 何を課題にしているのか
- テスト観
- 別言語でのDDDの実装例
- 強い人の圧倒的コーディングスピード
- 複数人で同じコードベースに向き合う時に、その間にグラフがあるとどうなるか
たぶんセッションされてた側から見ると「別にそれは正解行動では無いので、そこを参考にされても」みたいに感じるポイントは多々あるだろうなと思うんですが、そこは重々承知しながらも、逆に開発の現場に正解と呼べるものなんてどれほどあるんだろうか?と考えるととにかくたくさんの現場を自分の目で見たいというのが個人的な思いでした。 目の前にありのままの現場が広がっていることにひたすら感動していました。 というわけでこういうセッションもっと増えればいいのにって思いました。
自分今まで関わることのなかった現場のリアルを見れるってワクワクしませんか?特に自分の触ってなかった言語だと特に。僕だけ?ちょっと他の人の意見も聞いてみたいところ。
Jig(治具)という設計補助ツール
上記セッションを見て特に刺激を受けたのはいろふさんの作っているJigという設計補助ツールの存在でした。
コードの静的解析結果をグラフ化していて、コード=設計ドキュメントの構図を成立させることで設計のフィードバックループを高速化する意図のツールだと受け止めました。
何故刺激を受けたかというと、似たツールをPHPで今絶賛作っている最中だからなんですね。
他言語の人からすると「PHPで静的解析・・・?」なんて思われそうですけど、最近のPHPってPHP7のシンタックス強化と、PhpStormってIDEの強力な静的解析のおかげでかなり堅く書ける&みんな(静的解析可能なように)堅く書きたくなるようになって、元ゆるふわ言語とは思えないほど静的解析しやすいようになってるんです(信じてくれるかなぁ・・・
このツールはPHPで依存関係を解析できるようになれば何かが変わるはずだ、って思いからスタートしていて、具体的に設計現場のどんな問題解決をするべきか、人にとっての価値はなんなのかについてはあまり考慮された代物ではなかったんですね。「とりあえず」で今のところ以下の機能が提供されています。
- 依存関係のグラフ化
- 依存ルールの定義と、違反の検出
- 循環依存の検出
今回上記のセッションを通して、いろふさんと増田さんが生成されたグラフを挟んで議論をしていた、つまり彼らの共通認識を生む基盤として機能しているという気づきがありました。まさにいろふさんの目指されていた「設計へのフィードバックを早める」という様子が眼前に繰り広げられていて、「自分が目指したかった世界はこれだ!」とめちゃくちゃ感動してました。とても強いインスピレーションを受けたのでいろふさんにはとても感謝しております。 🙇
前々から感じていましたが、コードは小さな単位(クラス)からボトムアップで観察する分にはまあ理解できるんですけど、トップダウンで全体から構造を把握しようとコードだけだと難しいですね。なんとかパッケージ/名前空間の階層構造を表現しようとは思うんですけど、ちょっと表現方法としてそれだけでは不十分だと思います。その点グラフだと一発ですね。リポジトリが大きくなるにつれてトップダウンで解析できる何かの必要性を感じてましたが、今回のセッションを通して確信に変わりました。
同時に自分の今提供しているインターフェースいけてないなと思ったので、もっと他言語を研究して一番使いやすいインターフェースを提供したいなと思いました。
パネルディスカッション
最後に登壇者の皆様でパネルディスカッションが行われていて、来場者からの質問に答えていました。 印象としては登壇者の皆様はうまくいっている箇所とうまくいってない箇所がそれぞれあるんだなという感想です。 あと型を絶賛しているのがDDD勉強会らしいなっていうのと、意外にもテストはそれほど頑張ってないところがちらほらと。
その中でTwitterで一番刺さったのはコチラ。
DDDで型があればテストあんまりいらない、ってのは賛成しかねるからひろまって欲しくないなぁ。 #genbadeDDD
— 松岡@DDDブログ書いてます (@little_hand_s) May 11, 2019
さすが松岡さんというか、あの流れだと「じゃあテストいいか」って流れになりそうだったのでいい感じに止めてくださってる感。
感想
とても濃密な勉強会で、持ち帰れるものがいっぱいありました。可視化することはできませんが、とても自分の中で整理できないほどの発見と気づきがあり、大変実りある時間を過ごせたと思います。登壇者を始め、実行スタッフの皆様には感謝しかありません。この場を借りて関係者の皆様に御礼を申し上げます。
ちなみになんですが、これまでたくさんの設計書籍を読んできて、だいたいがJavaで記述されているんですよね。「だいぶ前の書籍でもこのレベルってJava界隈はこんなに進んでいるのかー・・・」という印象で、最近のPHP界隈は設計頑張ってる流れがあるんですが、Java界隈の人にとって「貴様らが今いる場所は我々が2000年前に通過した場所だッッッッ」って感じで見られてそうで怖いなぁ・・・と。実際のところどうなんですかね(誰に聞くわけでもなく