ドメイン駆動設計を現場で実践する中で感じているモデル駆動設計のたいせつさや、モデリングの費用対効果について、まとめてみました。 ・ドメイン駆動設計の要点 ・なぜドメイン駆動設計か? ・複雑さに立ち向かうためのモデリング ・認知の負荷と、モデリングの効果
モデリングの費用対効果2022年5月19日有限会社システム設計 増田
View Slide
自己紹介アプリケーション開発者Java/Springを使った業務系アプリケーション開発ドメイン駆動設計の開発現場への導入と実践著書『現場で役立つシステム設計の原則』~変更を楽で安全にするオブジェクト指向の実践技法技術者コミュニティ「現場から学ぶモデル駆動設計」主催2022/5/19 2
ドメイン駆動設計2022/5/19 3
ドメイン駆動設計という開発アプローチ① 事業活動の複雑さに照準を合わせる設計② 変更を楽で安全にするためのモデル駆動設計③ 現代的なオブジェクト指向プログラミング④ XP的な開発の考え方とやり方2022/5/19 4カプセル化と契約プログラミングイミュータブル(変更不可)控えめなサブタイピングコミュニケーションインクリメンタルな開発リファクタリング関心を分離する境界の明示関心の依存関係の単純化モデル-設計-実装の整合性維持開発者が事業活動を理解する事業活動の構造をコードで表現ドメインモデルパターン
なぜドメイン駆動設計か?2022/5/19 5
なぜドメイン駆動設計か?(私への仕事の依頼のパターン)2022/5/19 6損保系 基幹システム通販系 基幹システム健康管理アプリサブスク課金向けSaaS老舗 通信系サービス(ISP)運用維持のコスト負担修正拡張のコスト変更のスピード200X年からDOA系独自言語創業から5年事業の急拡大創業から10年PHPで増改築200X年からJSP/CORBA/C200X年からCOBOL/汎用機???
なぜドメイン駆動設計か?(私への仕事の依頼のパターン)2022/5/19 7損保系 基幹システム通販系 基幹システム健康管理アプリサブスク課金向けSaaS老舗 通信系サービス(ISP)運用維持のコスト負担修正拡張のコスト変更のスピード200X年からDOA独自言語創業から5年事業の急拡大創業から10年PHPで増改築200X年からJSP/CORBA/C200X年からCOBOL/汎用機クラウドマイクロサービスドメイン駆動設計
なぜドメイン駆動設計か?ソフトウェア提供サイクルの変化2022/5/19 8構想立案~要件定義~設計・開発・テスト~移行~運用保守~廃棄20年 × 1回5年 × 4回
2022/5/19 9構想立案~要件定義~設計・開発・テスト~移行~運用保守~廃棄20年 × 1回5年 × 4回1年 × 20回半年 × 40回3カ月 × 80回毎月 × 240回隔週 × 480回毎週 × 960回毎日 × 5000回なぜドメイン駆動設計か?ソフトウェア提供サイクルの変化
2022/5/19 10構想立案~要件定義~設計・開発・テスト~移行~運用保守~廃棄20年 × 1回5年 × 4回1年 × 20回半年 × 40回3カ月 × 80回毎月 × 240回隔週 × 480回毎週 × 960回毎日 × 5000回クラウド/コンテナアプリケーション分割データベース分割CI/CDパイプラインドメイン駆動設計商流のデジタル化/多元化金流のデジタル化/多様化物流のデジタル化/多頻度化事業環境の変化事業活動の変化実行環境の変化アーキテクチャの変化設計開発手法の変化なぜドメイン駆動設計か?ソフトウェア提供サイクルの変化実現可能性必要性
複雑さへの挑戦2022/5/19 11
事業活動/ソフトウェア2022/5/19 12さまざまな要素が複雑に絡み合い多元的に変化する
事業活動/ソフトウェア2022/5/19 13さまざまな要素が複雑に絡み合い多元的に変化する理解の負荷思考の負荷伝達の負荷情報量 vs.人間のワーキングメモリ 状況判断意思決定背景知識の違い注目点の違い
モデリング=簡略化2022/5/19 14さまざまな要素が複雑に絡み合い多元的に変化する情報量 vs.人間のワーキングメモリ 状況判断意思決定背景知識の違い注目点の違い理解を助ける簡略化伝達を助ける簡略化思考を助ける簡略化
モデル(成果物)とモデリング(過程)① 組織/チームでソフトウェアを開発する時、効果を生み出すのは、モデル(成果物)よりもモデルを作るための認識合わせをする活動② モデルは、状況の変化・理解の変化・判断の変化によって変わっていく(成果物として固定の完成形/最終形はない)③ モデリングという「簡略化のための活動」が価値を生み出す2022/5/19 15
モデリング(簡略化活動)の費用対効果2022/5/19 16モデリングの時間 モデリングの時間モデリングの時間時間をかければ効果が大きくなるわけではないいかに少ない時間で大きな効果をだすか効果がでていないモデリングの時間をどう減らすか理解しやすくなった 判断しやすくなった伝わりやすくなった
モデリングスキルの三段階2022/5/19 17基礎知識技法とツール用途と期待効果効果の認識能力費用の認識能力費用対効果を改善する能力費用対効果を判断する能力
持続的な進化のためのモデリング2022/5/19 18
機敏なモデリングいつでもどこでも誰でも少しずつ繰り返し持続的に2022/5/19 19ソフトウェアの提供サイクルが短い開発・提供の単位が小さい変更の影響範囲を限定できている
多面的なモデリング(並行&連動)構想事業活動の分析要件定義設計• アプリケーション• ソフトウェア• システム(実行環境)実装テスト設計移行2022/5/19 20例えば配送区分を追加するコードの変更は事業環境の変化、事業活動の変化、システム化構想の変化と連動している
モデリング(簡略化活動)のコントロール視点の切り替え構造(関連)振る舞い(時間軸/循環系)相互作用視点を組み合わせた整合性の検証(モデリングの品質改善)解像度を切り替える視界を広げる/狭める照準の対象を変える2022/5/19 21
機敏なモデリングの道具① 手書き(いつでも、どこでも)② お絵描きツール(ネット上で共有)③ テキストエディタ&可視化(変更容易性・履歴・解析検査)• Plant UML(独自文法)• Mermaid (mark down)• JIG(Java)2022/5/19 22
実際どんな感じでやっているかA) 事業活動を理解するためのモデリングB) 設計のモデリングC) 実行環境や運用設計のモデリング2022/5/19 23
事業活動を理解するためのモデリング2022/5/19 24三つの視点商流金流物流 業務フロー(アクティビティ図)ユースケースモデルユースケース記述(代替コース)イベントシーケンス(時系列分析)(イベントストーミング) 状態マシンガード条件情報モデル識別番号発生タイミング制約記述(OCL→Java) 画面帳票価格表/割引条件契約書/利用規約業務マニュアル事業活動の構造や制約に関わる側面を重視した分析・整理をしている
設計のモデリング2022/5/19 25視点パッケージクラステーブルAPIツールでモデルや設計の状態を評価・可視化(関連図など)して構造を評価・健全性を数値解析(LCOM*, CC, 命名,サイズ, … )・要点の抽出・ソート・分類テキストで記述(Java/DDL)・ラフスケッチ段階から・整合性を文法的にチェック・モデリング/設計が安定してくる=そのまま動く
実行環境のモデリング2022/5/19 26AWS構成図(ほぼ配置図+コンポーネント図)依存管理とビルドスクリプト(gradle/groovy)環境構築のスクリプト(Terraform)パイプラインのスクリプト(yaml)実行環境は基本的に仮想化(クラウド/コンテナ)「機器」という概念はないOSレベルの操作もない世界DSLで記述マクロ化実行状況の可視化・ログ化白紙から検討しモデリングという機会がなくなりつつあるパターンやテンプレートのカタログからの選択+設定でカストマイズするイメージ
モデリングの教え方2022/5/19 27
私の活動範囲で肌で感じていること開発の現場はモデリングが役に立つ機会にあふれているモデリングや設計の必要性はなんとなく理解しているいつ、何を、どうやるかやり方がわからないそれっぽいことをやってみるがあまりうまくできていない・流通系の基幹システム刷新、損保系の次世代基幹システム構築・離陸に成功したスタートアップ(介護、健康、飲食、会計、…)の技術負債との戦い・「現場から学ぶモデル設計」技術者コミュニティ(4000人超/16回の勉強会)の反応2022/5/19 28
モデリング:何が足りていないのか知識?練度?動機?2022/5/19 29
モデリング:知識が不足しているなら知識に触れる機会を増やす→ 現場の経験談、実践報告→ ライトな解説書(マンガでわかる…)→ 教材+座学+知識テスト→ 説明役/教え役のロールプレイング2022/5/19 30
モデリング:練度が不足しているなら実際にやってみて体験知を増やす→ 継続的にモデリング(理解度や練度の差分の体験)→ 複数モデルを作って比較して気づきを増やす→ 教科書的知識と実践とのギャップを体験→ 視点・解像度・視界・照準のコントロールの練習→ 複数モデル間の整合性をチェックして品質改善の練習2022/5/19 31
モデリング:動機が不足しているならアメ and/or ムチ?→ うまみを体験する• 理解しやすくなった• 判断しやすくなった• 伝わりやすくなった→ うまみの体験を強化する(ほめる)→ モデリング不足の痛みの具体例を見つける(ソフトなペナルティ)→ わかりにくい/判断しにくい/伝わりにくいをフィードバック2022/5/19 32
まとめ2022/5/19 33
事業活動/ソフトウェア2022/5/19 34さまざまな要素が複雑に絡み合い多元的に変化する
事業活動/ソフトウェア2022/5/19 35さまざまな要素が複雑に絡み合い多元的に変化する理解の負荷思考の負荷伝達の負荷情報量 vs.人間のワーキングメモリ 状況判断意思決定背景知識の違い注目点の違い
モデリング=簡略化2022/5/19 36さまざまな要素が複雑に絡み合い多元的に変化する情報量 vs.人間のワーキングメモリ 状況判断意思決定背景知識の違い注目点の違い理解を助ける簡略化伝達を助ける簡略化思考を助ける簡略化
モデリングスキルの三段階2022/5/19 37基礎知識技法とツール用途と期待効果効果の認識能力費用の認識能力費用対効果を改善する能力費用対効果を判断する能力