modeling-how-to-learn.connpass.com
今日はこちらのイベントに参加してきたので、会の様子と感想を書いていこうと思います。
会の概要
モデリングについての知見を共有してもらうことで、それぞれがモデリングをどのように学んでいくと良いかのきっかけを手に入れよう!というイベントです。具体的には、
といったことが会の目的になっています。
増田さんから会の趣旨説明
こちらのスライドを基に、今日の会の趣旨について増田さんから説明がありました。
増田さんが想定した人数をはるかに超える人数が集まって驚かれているということでしたが、(参加者が1104人…!!)元々内輪でやる予定だったイベントを公開することにしたというお話や、モデリングという広めな言葉についてのコンテキスト整理や、モデリングについて増田さんがどのように考えているか、という話について説明がありました。
増田さんの考え方が聴けて純粋に楽しくて学びのある時間が過ごせましたし、導入として今日話す内容を短時間で整理してもらえて、大変ありがたい時間でした。
座談会で話した内容
普段はどんなモデリングをしているの?
かとじゅんさん
仕事ではレガシーコードからの脱却を実践しているため、要点発掘のためにRDRAを実践したり、深層のドメインモデル*1を実践しているとお話がありました。
レガシーコードからの脱却をしていく際には、外部仕様が変更できなかったり*2、データのマイグレーションとセットで考えないといけないので大変だというお話も併せて聴くことができました。
原田さん
基幹システムを5~6年くらいDDDで開発した経験があるという原田さんから、モデリングの中心は個人の理解ではなくチームの理解が共通化されることだと考えているという話や、アジャイルとモデリングの親和性*3についてのお話を聴くことができました。
クラス図を意識する前に、もう一段階抽象度が高い語彙のモデリングを挟むことで、顧客との*4
なお、原田さんはSIerという文脈もあり、顧客の困りごとを明らかにして顧客と共通認識を形成するために、語彙のモデリングを多く実践しているというコンテキストから、このような考え方に至ったという所です。
ミノ駆動さん
実践DDDにもあったコンテキストマップのお話がありました。
READYFOR社さんの事業*5的に、どういう世界があってどういう問題を解決したいのか?についてビジネス全体を俯瞰して考える必要があり、そこでコンテキストマップを実践されているというお話でした。
ミノ駆動さんがコンテキストマップをどのように変形しているかというお話で、まずは事業で解決したい問題(目的)を考えて、その上に解決領域としてドメインモデルを組み立てているという「目的駆動」のお話*6が聴けたのが印象的で、面白かったです。
hiroさん
生々しい話というテーマに沿って、実際どれ位DDDやモデリングを実践しているの?という話をしてくれました。
受託開発をしているため、一つのビジネスに寄り添うことがないという前提もあり、実は昨年はほぼDDDをしていないというお話*7を聴くことができました。
コンテキストマップをはじめとした普段hiroさんがDDDの文脈で丁寧に説明していることは、実は殆ど実践していないものの、概念モデルだけは必ず作って、概念モデルを基にクラス図を作り、状況に応じてロバストネス図やユースケース図を作ることがあるというお話でした。*8
藤岡さん
既存のコードについては、ばりばりトランザクションスクリプトで実装されているので、かとじゅんさんと似たように地道にマイグレーションしていて、新規事業では、これまでの参加者の方々と同じように顧客との会話で言葉のモデリングやクラス図の作成を通したモデリングを実践されているということでした。
JIGの登場もあって、業務だと図はあまり書いていなくて、顧客との対話を今は大事にしているということでした。
高崎さん
モデリングにフォーカスしている会社さんということもあり、ドメインモデルを実践するためにDSLで自動的にvalue objectなどを自動生成するツールを自社で抱えたりしているということでした。
ただ、現場だと、受託開発ということもあって、多忙な案件ではモデリングよりもとにかくソースコードを書くという話になりがちだということで、中々生々しい話が聴けました笑
ただ、用語は顧客との会話でも使うので、語彙のモデリングだけは絶対にやっているというお話でした。*9
学び方
高崎さん
仕事で必要になって、業務別データベース設計のためのデータモデリング入門あたりを中心に勉強をはじめたということでした。
その後はオブジェクト指向と出会い、外部で実際にオブジェクト指向設計を実践されている方々*10と話をしたり、実際にすごく綺麗なコードを見ていく中で、どんどんモデリングを学ばれたということでした。
藤岡さん
特殊なパターンでモデリングを学んだと思うという前置きがありつつ、増田さんのプロジェクトに入って強制的にモデリングを学んだ*11ということでした。
藤岡さんは、元々もっと上手く実装できるんじゃないか?という漠然とした問題意識を持っていたこともあり、モデリングを実践して成功体験を得たタイミングで、一気にモデリングにのめり込んだということでした。
原田さん
画面&帳票の分析がモデリングのスタートで、そこからはT字型ER図との出逢いを経て、アジャイルでスプリント単位でモノを作って動かすことを実践したのがモデリングを学習する上で転機となったということでした。
アジャイル開発で顧客と対話し、ユーザとある種の概念モデル的な図を書きながら、動くモノを試行錯誤しながら作っていったのが、モデリングの力・プログラマーの力が一気に伸びたということです。
かとじゅんさん
スタートとしては、「楽々ERレッスン」や「グラス片手にデータベース設計」から勉強を始めたということでした。
一方で、最近の学び方としては、「コマンドとクエリを意識して設計することに注目する」ということを実践しているということです。
この実践は、かとじゅんさんの経験として、コマンドを処理する時に必要なデータしか持たせないようにするのが一番すっきりした設計になるという感覚を持っていることが、実践のモチベーションとなっているということです。
hiroさん
hiroさんは「モデリングを学ぼう」と思ったことはない、ということでした。
オブジェクト指向言語の上手い使い方を模索しながらなんとなく動くモノを作っていた所、外部で凄腕のエンジニアとDDDを実践する中で、クラスの使い方やオブジェクト指向がなんとなく実践できるようになったということでした。
そこからDDDを知るためにオブジェクト指向の勉強をはじめ、UMLの勉強をはじめ...といった風に勉強を重ねていった結果、自然とモデリングも勉強していたというお話でした。
ミノ駆動さん
ミノ駆動さんはひどいコードにぶち当たったことがモデリングを勉強し始めたきっかけだったということでした。
教科書的なプラクティスよりも、実践で使えるものを考えて実践することがいいのでは?というお話をしてくれました。
また、新人と、value objectを基軸にひたすらペアプロでリファクタリングを繰り返した結果、4ヶ月でオブジェクト指向設計がある程度できるようになったというお話を聴くこともできて、ひどいコードだらけの現場でリファクタリングをして、モデリングのありがたみを実感するのが、モデリングの学び方の一コースになるのでは?という話も後半でしてくれました。
増田さん
増田さんとしては、ソースコードを実際に書いて、生きたコードでどんどん実践していくのがやっぱりいい学び方なんじゃないかと考えているというお話でした。
参加者の皆さんがハイコンテクストということもあって笑、「どんどんふりきればいいんじゃないか?」ということで皆さん同意していましたが、増田さん的にはもう少しハードルを下げたいという反省もあるというお話でした。
その他~オブジェクト指向エクササイズの是非~
オブジェクト指向エクササイズから学び出すのはどう思うか?という話を全員でしていきました。
カプセル化の練習だったり「Tell, Don’t Ask」の実践として、エクササイズをするのはありだと思うというお話でした。
「Tell, Don’t Ask」を気にできないと、トランザクションスクリプトにどんどん近づき、オブジェクト指向のモデリングが実施できないという話も出てこないので、こういったことを意識するためにオブジェクト指向エクササイズを実践するのはいいと思うというお話でした。
全体を通した感想
自分が申し込みした時は100人位の参加者だったので、当日に参加者の数を見て、めちゃくちゃ驚きました。
雑談会という形で、ゆるくモデリングを実践されている方の話を聴けたので楽しく参加することができました。
実践されている方から、教科書的な話ではなく、実際に今の現場ではどんな感じでモデリングをしているのか、DDDやOOをどのように活用しているのか、どんな課題を感じているのか...生々しい話が聴けたのは、特に印象的でした。
*1:Evansで言うドメインモデルの責務レイヤーである、ルールや意思決定の部分をモデリングする
*2:外部仕様に引きずられて、外部仕様と関連しているユースケースを変えるのも難しい...
*3:DDDの渦巻きモデルのように、早い段階でツールを用いて顧客のシナリオを一緒に考えながら、フィードバックサイクルを回していくことができる
*4:実際問題、顧客がめちゃくちゃ具体的な話をしてくるので、必ず言葉のモデリングを挟むわけではないということでした
*6:モデルを書いても目的がロストされてしまうことに対して問題意識を持って、この「目的駆動」という考え方が生まれたようです
*7:概念モデルだけは少し使ったり、ソースコードを書いては消しを繰り返して、ソースコード上でモデリングを少しした
*8:クラス図はhiroさんのスタイル的に、クラス図なしにいきなりコーディングをすることがないというお話でした
*9:ある程度業務的に余裕がある時は、匠MethodやRDRAを実際に使っているということです
*10:この中に増田さんもいらっしゃったようです