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

業務からはじめよう

Avatar for scarletplover scarletplover
January 07, 2026
3

 業務からはじめよう

WACATE2025冬の資料でした。

Avatar for scarletplover

scarletplover

January 07, 2026
Tweet

Transcript

  1. 業務のフローを分解 要素 概要 ポリシー この命令が起動するための 自動ルール リードモデル 使う人が見る画面、データ アクター 使う人

    コマンド システムに対して行う命令 集約 操作する概念(データ) 外部システム このシステム外のシステム 業務イベント 業務で結果的に起こった出 来事(過去) イベントストーミングでは業務で行われる 出来事を以下のようなフローに分解して 整理する > イベントストーミングとは
  2. まずはお題の読み込み 配られた資料「Bug Lite Analytics」システム概要 を読み込んでください。 このシステムにはどういう「業務イベント」が あるのかを意識しながら読み込んでください。 時間は10分! バグ票を 起票した

    ・・・ バグ票 更新情報 が通知さ れた 要素 概要 業務イベント 業務で起こった出来事 (過去) > イベントストーミングをやってみよう > 1.お題の読み込み
  3. ▼▼の場 合 業務イベントを書き出す 会議室を 登録 会議室を 検索 ◦◦の場 合 料金を支

    払った 過去の言葉で書く システムではなく 業務としての 出来事を書く 会議室を 登録した 会議室を 予約した 分岐を書くのではな く、実際起こった 出来事を書く ※どうしても気になる場合は 薄ピンク付箋で記載 > イベントストーミングをやってみよう > 2.業務イベントを書き出す 料金の支 払に失敗 した
  4. 次に行く前に・・・ 会議室を 登録 会議室を 検索 過去の言葉で書く システムではなく 業務として 何をするのか書く 会議室を

    登録した 会議室を 予約した > イベントストーミングをやってみよう > 4.もう1回業務イベントを整理する ▼▼の場 合 ◦◦の場 合 料金を支 払った 分岐を書くのではな く、実際起こった 出来事を書く ※どうしても気になる場合は 薄ピンク付箋で記載 料金の支 払に失敗 した
  5. リードモデル/アクター/ポリシー/ コマンドを見つける ポリシー、リードモデル、アクター、 コマンドまでを埋める > イベントストーミングをやってみよう > 5.リードモデル/アクター/ポリシー/コマンドを見つける 要素 概要

    ポリシー この命令が起動するための 自動ルール リードモデル 使う人が見る画面、データ アクター 使う人 コマンド システムに対して行う命令 集約 操作する概念(データ) 外部システム このシステム外のシステム 業務イベント 業務で結果的に起こった出 来事(過去)
  6. 要素 概要 ポリシー この命令が起動するための 自動ルール リードモデル 使う人が見る画面、データ アクター 使う人 コマンド

    システムに対して行う命令 集約 操作する概念(データ) 外部システム このシステム外のシステム 業務イベント 業務で結果的に起こった出 来事(過去) リードモデル/アクター/ポリシー/ コマンドを見つける ポリシー、リードモデル、アクター、 コマンドまでを埋める > イベントストーミングをやってみよう > 5.リードモデル/アクター/ポリシー/コマンドを見つける
  7. 要素 概要 ポリシー この命令が起動するための 自動ルール リードモデル 使う人が見る画面、データ アクター 使う人 コマンド

    システムに対して行う命令 集約 操作する概念(データ) 外部システム このシステム外のシステム 業務イベント 業務で結果的に起こった出 来事(過去) リードモデル/アクター/ポリシー/ コマンドを見つける ユーザーが行うイベント 自動イベント ユーザーが行うイベントと 自動イベントの2通りの書き方がある > イベントストーミングをやってみよう > 5.リードモデル/アクター/ポリシー/コマンドを見つける
  8. ユーザーが行うイベント 【業務イベント】 業務で起こった 出来事(過去) 【リードモデル】 使う人が見る画面、 データ 【アクター】 使う人 【コマンド】

    システムに対して行 う命令 【集約】 変化するもの、 データ 【外部システム】 このシステム外の システム 会議室を 仮予約した 【ポリシー】 この命令が起動す るための自動ルー ル > イベントストーミングをやってみよう > 5.リードモデル/アクター/ポリシー/コマンドを見つける
  9. ユーザーが行うイベント 会議室 空き情報 利用ユーザー 会議を予約する (付箋だけ貼って まだかかない) 何を見て 誰が 結果どうなった

    何をする 【業務イベント】 業務で起こった 出来事(過去) 【リードモデル】 使う人が見る画面、 データ 【アクター】 使う人 【コマンド】 システムに対して行 う命令 【集約】 変化するもの、 データ 【外部システム】 このシステム外の システム 【ポリシー】 この命令が起動す るための自動ルー ル 会議室を 仮予約した > イベントストーミングをやってみよう > 5.リードモデル/アクター/ポリシー/コマンドを見つける
  10. 自動イベント 【業務イベント】 業務で起こった 出来事(過去) 【リードモデル】 使う人が見る画面、 データ 【アクター】 使う人 【コマンド】

    システムに対して行 う命令 【集約】 変化するもの、 データ 【外部システム】 このシステム外の システム 【ポリシー】 この命令が起動す るための自動ルー ル > イベントストーミングをやってみよう > 5.リードモデル/アクター/ポリシー/コマンドを見つける 会議室 予約確定した
  11. 自動イベント 会議室を予約確定 する (付箋だけ貼って まだかかない) 支払い 完了したら 会議室 予約確定した どういう条件で

    結果どうなった 何をする 【業務イベント】 業務で起こった 出来事(過去) 【リードモデル】 使う人が見る画面、 データ 【アクター】 使う人 【コマンド】 システムに対して行 う命令 【集約】 変化するもの、 データ 【外部システム】 このシステム外の システム 【ポリシー】 この命令が起動す るための自動ルー ル > イベントストーミングをやってみよう > 5.リードモデル/アクター/ポリシー/コマンドを見つける
  12. 外部システムを使用するイベント どういう条件で 結果どうなった 何をする 【業務イベント】 業務で起こった 出来事(過去) 【リードモデル】 使う人が見る画面、 データ

    【アクター】 使う人 【コマンド】 システムに対して行 う命令 【集約】 変化するもの、 データ 【外部システム】 このシステム外の システム 【ポリシー】 この命令が起動す るための自動ルー ル 会議予約完了メー ルを出す (付箋だけ貼って まだかかない) 予約完了したら 会議室予約完了の メールを出した > イベントストーミングをやってみよう > 5.リードモデル/アクター/ポリシー/コマンドを見つける
  13. リードモデル/アクター/ポリシー/ コマンドを埋めてみる 業務イベントについて、リードモデ ル、アクター、ポリシー、コマンド を追加していってください。 集約・外部システムの部分について は付箋のみを貼ってください バグ票を 起票した バグ票

    更新情報が 通知された バグ票 テスター バグ票を 起票する バグ票が 更新され たら バグ票 更新通知 メール 送信 要素 概要 ポリシー この命令が起動するための 自動ルール リードモデル 使う人が見る画面、データ アクター 使う人 コマンド システムに対して行う命令 > イベントストーミングをやってみよう > 5.リードモデル/アクター/ポリシー/コマンドを見つける
  14. ギャップを埋める 今作った業務イベントとお題の資 料を見直して、線がつながらない ところ、ギャップがあるところを 見つけたら、埋めてみてください。 また、疑問点が見つかったら ピンク色の付箋にかいてみて ください。 時間は5分! >

    イベントストーミングをやってみよう > 6.ギャップを埋める バグ票を 起票した バグ票 更新情報が 通知された バグ票 テスター バグ票を 起票する バグ票が 更新され たら バグ票 更新通知 メール 送信 ?
  15. 集約をまとめる 【業務イベント】 業務で起こった 出来事(過去) 【リードモデル】 使う人が見る画面、 データ 【アクター】 使う人 【コマンド】

    システムに対して行 う命令 【集約】 変化するもの、 データ 【外部システム】 このシステム外の システム 会議室 空き情報 利用ユー ザー 会議を予 約する 会議室を 仮予約した 会議室を 予約確定 する 会議室 予約確定し た 【ポリシー】 この命令が起動す るための自動ルー ル 支払い 完了したら 何を見て 誰が 結果どうなった 何をする どの概念に対して どのシステムで どういう条件で 集約をまとめる > イベントストーミングをやってみよう > 7.集約/外部システムを記載する
  16. 集約をまとめる 【業務イベント】 業務で起こった 出来事(過去) 【リードモデル】 使う人が見る画面、 データ 【アクター】 使う人 【コマンド】

    システムに対して行 う命令 【集約】 変化するもの、 データ 【外部システム】 このシステム外の システム 会議室 空き情報 利用ユー ザー 会議を予 約する 会議室を 仮予約した 会議室 予約 会議室を 予約確定 する 会議室 予約確定し た 【ポリシー】 この命令が起動す るための自動ルー ル 支払い 完了したら 何を見て 誰が 結果どうなった 何をする どの概念に対して どのシステムで どういう条件で > イベントストーミングをやってみよう > 7.集約/外部システムを記載する
  17. 外部システムの特定 【業務イベント】 結果 起こったこと 【コマンド】 システムに対して行 う命令 【集約】 変化するもの、デー タ

    【外部システム】 このシステム外の システム 【ポリシー】 この命令が起動す るための自動ルー ル 会議予約完了メー ルを出す 予約完了したら 会議室予約完了の メールを出した どういう条件で どの概念に対して 結果どうなった 何をする どのシステムで 【リードモデル】 使う人が見る画面、 データ 【アクター】 使う人 > イベントストーミングをやってみよう > 7.集約/外部システムを記載する
  18. 外部システムの特定 【業務イベント】 結果 起こったこと 【コマンド】 システムに対して行 う命令 【集約】 変化するもの、デー タ

    【外部システム】 このシステム外の システム 【ポリシー】 この命令が起動す るための自動ルー ル 会議予約完了メー ルを出す 予約完了したら 会議室予約完了の メールを出した どういう条件で どの概念に対して 結果どうなった 何をする どのシステムで 【リードモデル】 使う人が見る画面、 データ 【アクター】 使う人 メール システム > イベントストーミングをやってみよう > 7.集約/外部システムを記載する
  19. 集約/外部システムを記載する 模造紙の各フローの「集約」「外部シ ステム」の付箋にそれぞれ、「操作す る概念」「該当する外部システム」を 埋めていってください。 5分でお願いします。 バグ票を 起票した バグ票 更新情報が

    通知された バグ票 テスター バグ票を 起票する バグ票 バグ票が 更新され たら バグ票 更新通知 メール 送信 メール システム > イベントストーミングをやってみよう > 7.集約/外部システムを記載する 要素 概要 集約 操作する概念(データ) 外部システム このシステム外のシステム
  20. 会議室管理 会議室予約  モデリングの境界  同じ言葉=ユキビタス言語を つかえる範囲  業務領域がユースケースとほ ぼ同じ結果になるのに対し、

    区切られた文脈は「設計」  技術的要素、セキュリティなど の非機能要件で分ける場合もあ る 予約するもの 物理的な部屋 会議室 区切られた文脈とは(再掲) > イベントストーミングをやってみよう > 8.区切られた文脈でわける
  21. 中核の業務領域をみつける 区切られた文脈の中でこのシステムの中核の業務 領域を見つけ出す。 →中核の業務領域はビジネスロジックがシステム 特有かつ複雑になる。 一方で他の文脈(一般的な業務領域・補完的な業 務領域)は他システムと同一のものにしたり、他 の製品で代替を検討することが可能 会議室予約=中核の業務領域! 業務領域区分

    概要 中核の業務領域 競合他社との違いを生 み出す業務活動 システムの中核業務 一般的な業務領域 どの会社でも同じやり 方をする業務領域 補完的な業務領域 そのシステムを支える ための業務活動 > イベントストーミングをやってみよう > 8.区切られた文脈でわける
  22. 区切られた文脈をわける イベントストーミング図を みて、区切られた文脈を分 割してみましょう。 時間があれば、中核の業務 領域はどれか考えてみま しょう。 時間は5分です。 バグ票を 起票した

    バグ票 更新情報が 通知された バグ票 テスター バグ票を 起票する バグ票 バグ票が 更新され たら バグ票 更新通知 メール 送信 メール システム 中核の業務領域 補完的な業務領域 > イベントストーミングをやってみよう > 8.区切られた文脈でわける
  23. 区切られた文脈の関係性を整理 区切られた文脈の関係性によって、区切 られた文脈どうしの通信パターンを決め ていきます 通信パターン 概要 パートナーシップ 一蓮托生。同期を取り合う 共有カーネル コードの一部を物理的に共有

    顧客/供給者 下流のために上流が機能を実装 順応者 上流のモデルを下流が受け取る 腐敗防止層 上流のモデルを変換 公開ホストサービス 誰でも使える窓口を提供 > イベントストーミングのあと・・・
  24. ドメインモデリング(例) 区切られた文脈の中での各要素のビジネスルールを形にしたものを作成 値オブジェクト このドメインで使われる データの各要素がどんな値 なのかを定義 エンティティ ビジネスにおいて必要な、 ライフサイクルをもつ データ群と

    データ群に紐づくビジネス ロジック 集約 操作する概念→ ビジネスにおいて、必ず セットに保つ必要のあるエ ンティティの範囲 v > イベントストーミングのあと・・・ ドメインサービス 複数の集約やオブジェクト にかかるビジネスルールを 記載 腐敗防止層 他コンテキストからのイン ターフェースを当コンテキ ストにあうように変換した もの
  25. ドメインモデリング(例) 区切られた文脈の中での各要素のビジネスルールを形にしたものを作成 値オブジェクト このドメインで使われる データの各要素がどんな値 なのかを定義 ドメインサービス 複数の集約やオブジェクト にかかるビジネスルールを 記載

    腐敗防止層 他コンテキストからのイン ターフェースを当コンテキ ストにあうように変換した もの 集約 操作する概念→ ビジネスにおいて、必ず セットに保つ必要のあるエ ンティティの範囲 エンティティ ビジネスにおいて必要な、 ライフサイクルをもつ データ群と データ群に紐づくビジネス ロジック ポリシー 業務 イベント コマンド コマンド 業務 イベント ポリシー 集約 ※諸説あります v > イベントストーミングのあと・・・
  26. 困ったときの参考文献 •ヤマユ. (2024). 【DDD入門】TypeScript × ドメイン駆動設計ハンズオン. Zenn. https://zenn.dev/yamachan0625/books/ddd-hands-on •Khononov, V.

    (2024). ドメイン駆動設計をはじめよう: ソフトウェアの実装と事 業戦略を結びつける実践技法 (増田亨 & 綿引琢磨, 訳). オライリー・ジャパン. •Vernon, V. (2015). 実践ドメイン駆動設計 (髙木正弘, 訳). 翔泳社. •Evans, E. (2011). エリック・エヴァンスのドメイン駆動設計: ソフトウェアの 核心にある複雑さに立ち向かう (今関剛, 和智右桂, 牧野祐子, 金井哲夫, 訳). 翔泳社. > イベントストーミングのあと・・・