Upgrade to Pro — share decks privately, control downloads, hide ads and more …

業務理解の深化と実践~ドメインモデリングで基幹システムを捉える

MonotaRO
February 13, 2025
240

 業務理解の深化と実践~ドメインモデリングで基幹システムを捉える

2025.2.13 Developers Summit 13-A-7

MonotaRO

February 13, 2025
Tweet

More Decks by MonotaRO

Transcript

  1. 尾髙 敏之 株式会社MonotaRO CTO-Officeグループ 在庫モダナイズチーム シニアアーキテクト 2 2023年11月にモノタロウ入社。 IT職歴の大半を事業会社のIT部門で過ごし、biz/sysの関係構築や要件定義などの超上流 工程に取り組んできたが、「質とスピード」という言葉に出会ってからは品質→保守性

    に目を開き、モノタロウ入社後は良い構造とは?を求めてチームとすり合わせる日々。 最近はイベントストーミングの企画やファシリテートで声をかけてもらうことが多く なってきた。 撮影は @nrslib さん
  2. システムと組織 BtoB を対象に、 自ら間接資材の在庫を持ち、 自らオンラインで売るEC企業 コールセンター、商 品 採 用、物 流、

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

    スケールアップ=利便性アップ •新規顧客獲得増 •ロングテール商品の購入頻度向上 •商品の在庫化が進むことによって 納期短縮、利便性向上 •プライベートブランド化も 推進し利益率向上 •検索ワード数拡大 •ワンストップショッピングの幅拡大 (取扱商品点数2,475万点) •周辺商品の取扱拡大
  4. 11 • 基幹システムの拡張とビジネスの成長により複雑さが増し、 変更容易性が失われてしまった • 業務の拡張とそれに付随する「複雑性」は モノタロウの差別化ポイントでもある(本質的複雑性) • 継続的な会社の成長のため競争優位の源泉となる複雑性とは何か、 改めて構造的に整理

    • その複雑性を基幹システムに落とし込むことで、 業務とソフトウェアの可変性を取り戻し、会社の成長につなげる • 「複雑性を基幹システムに落とし込む」には、モデリングにより 事業要求に根ざしたアーキテクチャとすることが重要 業務とソフトウェアの可変性を取り戻す
  5. 1. ドメインイベントを洗い出す 2. 時系列に並べる 3. 分割点となるイベント(ピボタルイベント)をマークする 4. 並行処理を見つける 5. 関係者・外部システムを洗い出す

    6. 前から読み上げて曖昧なところがないか検証する 7. グループや集約、ドメイン境界(境界づけられたコンテキスト)を検討する 8. イベントストーミング全体を通じて、業務の認識や言葉の違い・新たな発見がなされる 15 イベントストーミングの進め方 より詳細を知りたい方は、 アマゾンウェブサービスジャパン ソリューションアーキテクトの 福井さんの以下の動画がおすすめ 実践!モノリスからマイクロサービス! Event Stormingによるドメイン駆動設計から実装まで | AWS Dev Day 2023 Tokyo
  6. 各モデルの棲み分け + 観点 20 コンテキストマップ 構造のモデル 流れのモデル ドメイン 全体 ビッグピクチャ

    業務領域 プロセスモデル ドメインモデル 業務的 業務的 ほぼ業務的 (詳細化するとアプリ設計に) アプリ的
  7. 22 やってみてわかったこと • イベントストーミングで、複数の関係者が課題認識や前提を作れるのはかなり有効 • 大規模なイベントストーミングは半日から1日程度。ただしそれで終わりではない • 最初はビジネス全体を対象に、その後詳細化して特定の領域で行っていく • 結果、分析はかなり時間と期間を要す。実際に我々は大まかなドメイン境界を決め、

    実装のPoC開始まで5ヶ月程度かけている。(専任メンバー+関係者) • ソフトウェア設計に落とし込むにはイベントストーミングだけではギャップがあり、 他にも様々なワークでモデルを洗練させていく • モデリングのセオリーはあるがそれを全部やる時間はなく、必要に応じて 領域と手法を変えて探索的にモデルを深めていく必要があり、かなり高度な判断となる モデリングを行っての実際
  8. 何度も実施することで共通する考え方、質問が身についた • そのドメイン(業務領域)の責務は何か、責務に照らして何をすべきか(すべきでないか) • 集約の境界は適切か、過剰な一貫性を要求していないか • 別々の文脈で登場する同じ名前の概念は、まったく同じ値を指しているか • エンティティや属性、振る舞いの名前は適切か •

    ある概念の本質は何か、抽象化して拡張性を持たせるべきか • 一回の分析やワークで全てを決めきらない 別の観点でも(モデルでも)整合性を検証しながら、決まっていく 基本的にはユビキタス言語の発見と徹底した利用、境界に細心の注意を払う、カプセル化など イベントストーミングの説明でも触れたものが重要 23 モデリング進め方のポイント
  9. 26 各種課題を解決するアーキテクチャ PoCアプリケーションが実証したい課題と解決策を要約・抜粋 • 共用DBにある在庫状況は周辺業務の密結合点で、複数の業務の関心事が混在している (業務領域間の結合度を下げる) ◦ 業務領域を基本単位として現行モノリスから切り出し、データも独自に管理する ◦ 他

    業務領域とは非同期連携(イベント駆動)とする • 在庫に関する業務知識が散在しており、また共有DBのデータ構造に依存する業務が多い (業務知識とデータ構造をカプセル化する) ◦ 業務領域ごと独自管理するデータに関する操作もひとまとめにする ◦ 業務が扱うデータと、公開するデータのモデルを分ける(CQRS) • 在庫状況TBLは履歴情報を保有できない (変更の履歴を持ち、任意の時点の状態を再現する) ◦ 業務イベント保有し、その積み上げによって最新の状態を得る(Event Sourcing)
  10. 27 説明: 既存DBの変更をDMSが検知し てReadReplicaに書き込み、 AWS Lambdaがドメインイベ ントに変換する。 ドメインイベントはMSKに割 り当てられたトピックに登録 され、さらに後続のドメイン

    ロジックにより処理されて EventStoreに記録され、 ReadModelにも反映される。 移行ステップは部分的に③の状態 新システムのアーキテクチャ概要
  11. 34 個別領域の検討を加速する • 整理された全体構成の蓋然性を高めるためには、 各領域の内部構造を検討しなければならない ◦ 結果として個別領域の検討を促進することに繋がる ◦ さらに、 「全体俯瞰」「問題領域特定」「改善検討」

    「全体の整合確認」「個別領域検討促進」 のように視点を上下して 俯瞰と個別を行き来しながら検討を進められ、 全体と個別の整合を維持することにも繋がる
  12. 35 整合を維持し アジリティを生む 現状 未来 っっ x っっ x っっ

    x っっ x っっ x っっ x さらに未来 エンジニア個々人が内部品質に対する 意識を上げ、組織がコミットする
  13. 39 まとめ • モノタロウは、サービスを高度化していく中で生じた 偶有的複雑性を取り除くことでビジネスアジリティを 取り戻します ◦ それはドメインモデリングにより業務理解を深め、 認知負荷と予測不能な変更コストの低減で実現します •

    ビジネスの構造に即した柔軟なアーキテクチャは、 全体と個別モデルの整合を保ち、変更容易性が必要な部分を 見極めてモデリングコストを投じることで実現します • 全体と個別で視点を行き来することで 個別領域のモダナイズを促進する効果も期待できます