こんにちはレヴィの萩原(@hagifoo) & 弓山(@akiray03) です。 先日行われた レガシーをぶっつぶせ。現場でDDD!2nd 「インプット<アウトプット!」でワークショップを開催してきました。 2 時間の長丁場にもかかわらず参加してくださったみなさま、ありがとうございました! そして、ワークショップ運営を手伝ってくださったナビゲーターの皆さんと、今回の勉強会を企画・運営していただいた皆さんにも感謝いたします。
システム設計の中でドメインモデルの役割を体感する / the Place of Domain Model in System Design - Speaker Deck
具体的な内容や現場の雰囲気などは参加された方のブログやツイートをご参照ください!(ブログ書いてくださってありがとうございます)
この記事では、ワークショップの設計意図を簡単に紹介できればと思います。
参加者ブログ、ツイート
youshe.hatenablog.com lifeinprogram.com
第一部お疲れ様でした。
— Naoto (@Naoto_Oct) 2019年12月14日
共通認識作る難しさを、図を作ることで合わせていくのが体感できて良かったです。
あと、他のチームがどんなモデリングしたかめちゃくちゃ気になる。
#genbadeddd pic.twitter.com/xfFD0UHfSI
ステークホルダー、アクション、分岐の条件を書いた業務フロー図を、概念と属性に落とし込んで多重度とアクティビティを線で書き込んでモデリングしていくワークショップでした😊業務フロー図と照らし合わせるの大事だなと思った! #genbadeDDD pic.twitter.com/BMzCuxMCqs
— まなみん (@manamin0521m) 2019年12月14日
ご参加ありがとうございました!
ワークショップについて
設計意図
ドメインモデルの価値は、非エンジニアとエンジニアがコミュニケーションできるという点で非常に画期的だと思います。そして、実践の中でドメインモデルをソフトウェアとして表現することが難しいのも実感しているところで、実際、DDD 本は「ドメイン知識をシステムの中でどのようにオブジェクトに落とし込み、システム固有の知識から隔離するか」という部分にかなりの分量を割いています。
しかし、そもそもの前提として「手続き的」な行動である業務をドメインモデルという「構造」に落とし込むことが意外と難しく、我々も具体的な業務をどのように聞きだすか、そしてどのようにモデリングするかで悩むことが多いです。多分みなさんもそうではないでしょうか?
レヴィはソフトウェアに限らず電子回路や新規事業開発、組織など色々な対象をシステムとして捉えることで、これまで見落としていた観点をチームに根付かせる活動を行っています。この活動の根底にはシステムモデリングがあり、その中では「手続き的なアクティビティ」を「概念的な構造」への変換を半ば無意識的に行っていることに気づきました。その半ば無意識的に行っていた「手続きから構造への変換」を形式知化して多くの方に伝えたいというコンセプトで今回のワークショップを設計しています。
発表資料
ワークショップ当日のフィードバックを受けて、若干の改訂を行いました。 また、ナビゲーター(スタッフ)の利用していた資料も含めているので、ワークショップを持ち帰って開催する際の参考にしてください。
※はてなブログ上ではスライドの端が切れているので、 SpeakerDeck で御覧くださいmm
準備物
今回のワークショップを開催するにあたって、レヴィでいつも活用している道具を参加者の人数分用意しました。 付箋は3Mの強粘着 50x50mm がオススメです。
ポストイット付箋 強粘着ネオンカラー 50x50mm
ポストイット 付箋 強粘着 ノート ネオンカラー 50×50mm 90枚×5冊 650-5SSAN
- 発売日: 2007/01/01
- メディア: オフィス用品
油性ペン マッキー極細
ゼブラ 油性ペン マッキー 極細 黒 10本 B-MO-120-MC-BK
- メディア: オフィス用品
どこでもシート (あるいは大きなホワイトボードか、模造紙)
セーラー万年筆 ホワイトボード どこでもシート W600mm×20m巻 31-3500-000
- メディア: オフィス用品
お手伝いしてくれる人募集してます
レヴィでは、システム設計を支援するクラウドサービス「Balus」の開発・運営を行っています。Balusは、Google App Engine の Python 2.7 ランタイムで動いている 5年以上の歴史を持ったアプリケーションです。Google App Engine の Python 2.7 ランタイムは、 LTS (Long Term Support) の対象になっていますが、Pythonコミュニティとしては Python 2系のサポートは終了することもあり、 Python 3 系への移行を進めています。
Python2系からPython3系への移行では、単にアプリケーション・コードをコピペして動くように直すだけでなく、アプリケーション機能とパッケージの責務を再整理しながら、あるべき姿を模索しながら移植を進めています。Python3系でドメイン駆動設計を実践するために必要なライブラリ(https://github.com/gumo-py)を自作して足固めを行いながら、APIエンドポイント単位で切替を進めています。
Python3でドメイン駆動設計を一緒に進めてみませんか?興味を持っていただけたらお気軽にご連絡ください( Twitter @akiray03 あるいは、コーポレートサイトの問い合わせフォームまで)。 副業という形で平日夜や週末に手伝っていただいている方もいるので、契約形態含めて柔軟に対応させて頂きます。
ワークショップを自社でも開催してみたい方は...
コーポレートサイトのお問い合わせフォームからお気軽にご連絡ください。 レヴィでは、今回の「現場でDDD!2nd」で実施した他にも、以下のようなワークショップやオンライン研修を用意しています。現場の課題・ニーズに応じてカスタマイズにも対応いたします。興味を持っていただけた方はお気軽にお問い合わせください。