Upgrade to PRO for Only $50/Year—Limited-Time Offer! 🔥

ビジネスの構造をアーキテクチャに落とし込みソフトウェアに可変性を注入する

 ビジネスの構造をアーキテクチャに落とし込みソフトウェアに可変性を注入する

20240522 Findy主催「アーキテクチャを突き詰める」登壇資料 
イベントストーミング、ドメインモデリング、CQRS+Event Sourcing

MonotaRO

May 22, 2024
Tweet

More Decks by MonotaRO

Other Decks in Programming

Transcript

  1. システムと組織 4 BtoB を対象に、 自ら間接資材の在庫を持ち、 自らオンラインで売るEC企業 コールセンター、商 品 採 用、物

    流、 マーケティング、データサイエンス、 IT など多くの業務とシステムを 自社開発、自社運用もしている フルスタック EC カンパニー 事業紹介
  2. わたしたちについて 6 事業成長サイクル 取扱商品 点数拡大 顧客数拡大 在庫点数 拡大 売上・利益 拡大

    スケールアップ=利便性アップ •新規顧客獲得増 •ロングテール商品の購入頻度向上 •商品の在庫化が進むことによって 納期短縮、利便性向上 •プライベートブランド化も 推進し利益率向上 •検索ワード数拡大 •ワンストップショッピングの幅拡大 (取扱商品点数2,217万点) •周辺商品の取扱拡大
  3. 9 2つの複雑性 我々が提供しているサービスは高度化していく中で差別化となる必要な業務の複雑性に長 年のビジネス/組織の拡大によって生じた不要な複雑性が付随し、本来取り組むべき課題、 複雑性に集中できなくなっていることが問題。これを取り除き、業務とシステムの可変性 を再び取り戻すことが必要 っっx 取り組むべ き課題 不必要な複雑性、

    煩雑さ 以前 現状 現状 現状 未来 っっ x っっ x っっ x っっ x っっ x っっ x 不必要な複雑性が増え た結果、本来取り組むべ き課題に集中できない 課題を分割すること、不必要な煩雑さ を減らすことで、本来取り組むべき課 題に向き合える状態になる
  4. 10 課題と取り組み内容まとめ • 基幹システムがモノリスアプリケーションであり、拡張とビジネス成 長によって複雑さが増し、変更容易性が失われた。 • 一方で業務のスケールとそれに付随する「複雑性」はモノタロウの差 別化ポイントでもある • 継続的な会社の成長のため競争優位の源泉となる複雑性を改めて構造

    的に理解をする。 • その複雑性をアーキテクチャの構造に落とし込むことで、業務とソフ トウェアの可変性を担保し、会社の成長につなげていくことを行う • アーキテクチャ設計が事業要求に根ざしたものにすることが重要
  5. 1. ドメインイベントを洗い出す 2. 時系列に並べる 3. 分割点となるイベント(ピボタルイベント)をマークする 4. 並行処理を見つける 5. 関係者・外部システムを洗い出す

    6. 前から読み上げて曖昧なところがないか検証する 7. グループや集約、ドメイン境界(境界づけられたコンテキスト)を検討する 8. イベントストーミング全体を通じて、業務の認識や言葉の違い・新たな発見がなされる 13 イベントストーミングの進め方 より詳細が知りたい方はAWSのSA福井さんの以下の動画がおすすめ 実践!モノリスからマイクロサービス! Event Stormingによるドメイン駆動設計から実装まで | AWS Dev Day 2023 Tokyo
  6. • ステークホルダー全員の共通認識のもと分析されたビジネスプロセスが可視化される ◦ ドメイン・集約 = 関心事の凝集 ◦ 境界づけられたコンテキスト = 関心事の分離

    ◦ ユビキタス言語 = 言葉の統一による共通認識の深化 • ドメインモデルが、システム設計のインプットになる ◦ ドメインモデル = (レイヤード|ヘキサゴナル|オニオン)アーキテクチャにおけるド メイン層の実装そのもの • 得られるメリット ◦ 業務側・システム側の共通理解がそのままシステムに反映される ◦ 関心事が分離されているので、各システムが独立して変化できる 14 まとめると
  7. ビジネスドメイン全体から詳細度を上げ分析をする モノリス アプリケーション 大まかな ドメイン境界の発見 境界づけられた コンテキスト 洗練された ドメインモデル Big

    Picture 要素の洗い出し ソフトウェ アデザイン 構造化 プロセス・モ デリング 要素の関連付け Big Picture 要素の洗い出し ソフト ウェアデ ザイン 構造化 プロセス ・モデリ ング 要素の関連付け Big Picture 要素の洗い出し ソフト ウェアデ ザイン 構造化 プロセス ・モデリ ング 要素の関連付け 一度に全てを把握することは不可能。全体から入りつつ、段階的な関心の分離を行っていく 必要がある。抽象度を下げながらそれをサイクリックに進めていくことが必要
  8. やってみてわかったこと • イベントストーミングでは、複数の関係者が課題認識や前提を作るのはかなり有効 • 1回のイベントストーミングは半日から1日程度。ただしそれで終わりではない • 最初は業務全体を対象に、その後詳細度を上げて特定の領域で行っていく • 結果、分析自体はかなり時間と期間がかかる。実際に我々は大まかなドメイン境界を決め、 実装のPoC開始まで5ヶ月程度かけている。(専任メンバー+関係者)

    • ソフトウェア設計に落とし込むにはイベントストーミングだけではギャップがあり、他にも 様々なワークでモデルを洗練させていく(後述) • モデリングのセオリーはあるがそれを全部やる時間はなく、必要に応じて領域と手法を変え て探索的にモデルを深めていく必要があり、かなり高度な判断となる 19 ドメインモデリングを行っての実際
  9. 何度も実施することで共通する考え方、質問が身についた • そのドメイン・エンティティの責務は何か • 集約が大きすぎないか、分けられる点はないか • 別々のコンテキストで登場する同じ名前のものがまったく同じ値を指しているか • エンティティや属性、振る舞いの名前が適切か •

    一回の分析やワークで全てを決めきらない。その後の別の観点での整合性を検証しなが ら、決まっていく 基本的に関心事の凝集・分離・ユビキタス言語の発見など、イベントストーミングで説明され ている基本が重要 20 ドメインモデリング進め方のポイント
  10. 28 ドメインモデルを洗練させるためにやったこと • ドメインモデルを洗練させるとは「深いドメイン知識」をモデルに反映していくこと • そのためには色々な観点でモデルを解釈、整合がされるようにマッピングさせること が重要 観点 ワークショップ例 既存

    AS-IS 業務 • 業務プロセス分析 • シーケンス分析 ソフトウェア • 既存データモデリング分析 • 既存コンポーネント分析 新 To-Be 業務 • バリューストリームマッピング • ドメインビジョン定義 ソフトウェア • プロトタイピング • システムアーキテクチャ
  11. • イベントストーミング ◦ 問題空間の概要をシステム側業務側全員で把握できる。ユビキタス言語の獲得 • データモデルの分析 ◦ 既存のデータモデルから集約を抽出し整理をする。既存システムとのマッピングが しやすい •

    シーケンス分析 ◦ 色々な業務のユースケースを考慮してみることでモデリングが洗練される • 仮想コード ◦ コードに落とし込むことで実装観点での矛盾、開発者のドメイン知識獲得も行える 29 モデリングで我々がよく行ったワーク