Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
業務からはじめよう
Search
scarletplover
January 07, 2026
0
3
業務からはじめよう
WACATE2025冬の資料でした。
scarletplover
January 07, 2026
Tweet
Share
More Decks by scarletplover
See All by scarletplover
WACATE2024冬セッション資料(ユーザビリティ)
scarletplover
0
2.8k
単体テストソムリエになろう!(WACATE参加者用)
scarletplover
0
540
テスト技法おさらい(仮)
scarletplover
9
4.5k
PFDであそぼ
scarletplover
0
500
実際のシステムでテスト技法を編み出そう
scarletplover
0
250
形式手法ってなんだろう?
scarletplover
0
1.9k
Featured
See All Featured
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.6k
Kristin Tynski - Automating Marketing Tasks With AI
techseoconnect
PRO
0
110
Reality Check: Gamification 10 Years Later
codingconduct
0
2k
Thoughts on Productivity
jonyablonski
73
5k
How GitHub (no longer) Works
holman
316
140k
Neural Spatial Audio Processing for Sound Field Analysis and Control
skoyamalab
0
140
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
Why Mistakes Are the Best Teachers: Turning Failure into a Pathway for Growth
auna
0
31
How to Ace a Technical Interview
jacobian
281
24k
Large-scale JavaScript Application Architecture
addyosmani
515
110k
Paper Plane
katiecoart
PRO
0
45k
GitHub's CSS Performance
jonrohan
1032
470k
Transcript
「業務」からはじめよう WACATE2025 冬
業務って大事ですよね? NO 業務、NO SYSMTEM! > 突然ですが・・・
要件以外でも・・・ 要件は果たせてるものの 業務とシステムがずれている・・・ みたいなのは困りますよね・・・ 会議室予約 が・・・ 「会議室予約情報」は まず「作成」してから 「申請」しないと 登録されないんです
> 突然ですが・・・
でも 「品質にかかわるんで、レビューお願いします!」と いきなり言われたら困りますよね・・・? > 突然ですが・・・
「業務」からはじめよう WACATE2025 冬
今回は みなさんに、業務→設計へ落とすためのワークの1つを 実際に体験してもらって、実際に手を動かしながら、 設計の世界を一歩先に覗いてみましょう! > はじめに
自己紹介 山口 寛子(WACATE実行委員会) 金融系で金融系かわからないSEをやっている SN:べにちどり(@scarletplover) 猫派(狐派) > はじめに
業務→設計とは
例えばこういうシステムを作りたい 会議室予約システム ユーザーが会議予約を行い、利用料を払うことができる。 利用ユーザーが会議予約・キャンセルを行ったら通知 メールが送信される。 会議予約日前日になったらリマインドメールが送信され る。
運用ユーザーが会議室情報を登録・削除できる。 会議室には利用不可期間を登録することができる。 > 業務→設計とは
いろんな風につくれますが・・・ 全部1つのクラスでも 作れちゃいますが メンテナンス大変です > 業務→設計とは
いろんな風につくれますが・・・ どこがどこと関連しているかわからない・・・ ビジネスロジックがどこにあるかわからない・・・ > 業務→設計とは
「業務」に沿って作るのがよい ·業務の領域と同じ領域でシステムが区切られ、業務とシステムは同じ言葉を用いる ·ステークホルダー間で共通認識がとりやすく、業務の拡張に応じて拡張・メンテナ ンスが可能 会議室予約 支払 メール送信 会議室管理 料金体系が かわった
会議予約 の業務 見直し > 業務→設計とは
「業務」に沿って作るのがよい 「業務」に従ってシステムが作られるというのは 当たり前のようで、とても大切! 会議室予約の 業務見直しが 入りまして・・・ システムの 会議予約の部分を 変更します >
業務→設計とは
でもどうやってつくる? ? > 業務→設計とは 実際の業務 システム 会議室予約 支払い メール送信 会議室管理
たとえば 業務を分析して 業務や文脈を整理 区切った文脈どうしの 関係性を整理 文脈内のモデリング こういうやり方があります > 業務→設計とは
今回は・・・ 業務を分析して 業務や文脈を整理 区切った文脈どうしの 関係性を整理 文脈内のモデリング こういうやり方があります > 業務→設計とは
今回は・・・ 「イベントストーミング」という手法をつかって、 業務の整理と「区切られた文脈」を設計していきます! > 業務→設計とは
イベントストーミング とは
イベントストーミングとは 複雑なビジネスプロセスやドメインの知識を共有、可視化、 そして理解するための協同作業ベースのモデリング手法 > イベントストーミングとは https://zenn.dev/yamachan0625/books/ddd-hands-on/viewer/chapter5_event_storming 【DDD入門】TypeScript × ドメイン駆動設計ハンズオン より
イベントストーミングのやり方 > イベントストーミングとは 業務のフローを分解 全体像を俯瞰して 区切られた文脈に分割
業務のフローを分解 要素 概要 ポリシー この命令が起動するための 自動ルール リードモデル 使う人が見る画面、データ アクター 使う人
コマンド システムに対して行う命令 集約 操作する概念(データ) 外部システム このシステム外のシステム 業務イベント 業務で結果的に起こった出 来事(過去) イベントストーミングでは業務で行われる 出来事を以下のようなフローに分解して 整理する > イベントストーミングとは
全体像を俯瞰して区切られた文脈に分割 フローの全体像を俯瞰し、区切られた文脈に分割していく > イベントストーミングとは 支払 会議室管理 会議室予約 メール送信
業務領域(サブドメイン) 事業活動の領域全体を業務ごとに細分化したもの > イベントストーミングのやり方 > 全体像を俯瞰して区切られた文脈に分割 会議室管理 会議室予約
会議室管理 会議室予約 モデリングの境界 同じ言葉=ユキビタス 言語をつかえる範囲 予約するもの 物理的な部屋 会議室 区切られた文脈 (バウンデッドコンテキスト、コンテキスト)
> イベントストーミングのやり方 > 全体像を俯瞰して区切られた文脈に分割
業務領域と区切られた文脈 業務領域がユースケースとほぼ同じ結果になるのに対し、区切られた文脈は「設計」 技術的要素、セキュリティなどの非機能要件で分ける場合もある > イベントストーミングのやり方 > 業務領域をみつけて区切られた文脈を整理 支払コンテキスト 会議室予約コンテキスト 会議室予約ドメイン
業務領域をみつけて区切られた文脈を整理 > イベントストーミングのやり方 フローの全体像を俯瞰し、区切られた文脈に分割していく 支払 会議室管理 会議室予約 メール送信
区切られた文脈のメリット イベントストーミングで区切られた文脈をみつける →システムの区切りとして使うことができる! > イベントストーミングのやり方 会議室予約 支払 メール送信 会議室管理 料金体系が
かわった 会議予約 の業務 見直し
例)会議室予約システム ユーザーが会議予約を行い、利用料を払うことができ る。 利用ユーザーが会議予約・キャンセルを行ったら通知 メールが送信される。 会議予約日前日になったらリマインドメールが送信さ れる。
運用ユーザーが会議室情報を登録・削除できる。 会議室には利用不可期間を登録することができる。 > イベントストーミングのやり方
イベントストーミングの手順(詳細) 1.業務イベントを書き出す 2.時系列で並べる 3.リードモデル/アクター/ポリシー/コマンドを埋めてみる 4.ギャップを埋める 5.集約/外部システムを記載する 6.区切られた文脈でわける > イベントストーミングのやり方
業務イベントを書き出す この事業・システムで起こるイベントを「オレンジ色の付箋」で書く 過去起こった出来事として書く > イベントストーミングのやり方 >イベントストーミングの手順(詳細)
時系列で並べる 業務イベントを時系列で並べてみる 同時期に起きるものは並列にする。 > イベントストーミングのやり方 >イベントストーミングの手順(詳細)
リードモデル/アクター/ポリシー/ コマンドを埋めてみる 「何をみて」「だれが」「何をする」(ユーザーイベント)、「どういう 条件で」「何をする」(自動イベント)を明らかにする > イベントストーミングのやり方 >イベントストーミングの手順(詳細)
ギャップを埋める 業務イベントを時系列で並べてみた →おかしいところ、ぬけているところのギャップをうめる →疑問点を記載する 仮予約 →支払 →予約確定 > イベントストーミングのやり方 >イベントストーミングの手順(詳細)
利用不可 期間とは? 利用不可期 間登録失敗
集約/外部システムを記載する 集約=フローで操作する概念を見つけ出す。 > イベントストーミングのやり方 >イベントストーミングの手順(詳細)
区切られた文脈にわける 類似の集約、フェーズの切り替わりから、事業を区切られた 文脈に分割する > イベントストーミングのやり方 >イベントストーミングの手順(詳細)
イベントストーミングのやりかた 1.業務イベントを書き出す 2.時系列で並べる 3.ギャップを埋める 4.リードモデル/アクター/ポリシー/コマンドを埋めてみる 5.集約/外部システムを記載する 6.区切られた文脈でわける > イベントストーミングのやり方
ワークショップ手順 1.お題の読み込み(10分) 2.業務イベントを書き出す(15分) 3.時系列で並べる(5分) 4.もう1回業務イベントを整理する(10分) 5.リードモデル/アクター/ポリシー/コマンドを埋めてみる(10分) 6.ギャップを埋める(5分) 7.集約/外部システムを記載する(5分) 8.区切られた文脈でわける(5分) >
イベントストーミングのやり方
イベントストーミングを やってみよう
ワークショップ手順 1.お題の読み込み(10分) 2.業務イベントを書き出す(15分) 3.時系列で並べる(5分) 4.もう1回業務イベントを整理する(10分) 5.リードモデル/アクター/ポリシー/コマンドを埋めてみる(10分) 6.ギャップを埋める(5分) 7.集約/外部システムを記載する(5分) 8.区切られた文脈でわける(5分) >
イベントストーミングをやってみよう
まずはお題の読み込み 1.お題の読み込み(10分) 2.業務イベントを書き出す(15分) 3.時系列で並べる(5分) 4.もう1回業務イベントを整理する(10分) 5.リードモデル/アクター/ポリシー/コマンドを埋めてみる(10分) 6.ギャップを埋める(5分) 7.集約/外部システムを記載する(5分) 8.区切られた文脈でわける(5分) >
イベントストーミングをやってみよう > 1.お題の読み込み
まずはお題の読み込み 配られた資料「Bug Lite Analytics」システム概要 を読み込んでください。 このシステムにはどういう「業務イベント」が あるのかを意識しながら読み込んでください。 時間は10分! バグ票を 起票した
・・・ バグ票 更新情報 が通知さ れた 要素 概要 業務イベント 業務で起こった出来事 (過去) > イベントストーミングをやってみよう > 1.お題の読み込み
業務イベントを書き出す 1.お題の読み込み(10分) 2.業務イベントを書き出す(15分) 3.時系列で並べる(5分) 4.もう1回業務イベントを整理する(10分) 5.リードモデル/アクター/ポリシー/コマンドを埋めてみる(10分) 6.ギャップを埋める(5分) 7.集約/外部システムを記載する(5分) 8.区切られた文脈でわける(5分) >
イベントストーミングをやってみよう > 2.業務イベントを書き出す
業務イベントを書き出す > イベントストーミングをやってみよう > 2.業務イベントを書き出す この事業・システムで起こるイベントを「オレンジ色の付箋」で書く 過去起こった出来事として書く
▼▼の場 合 業務イベントを書き出す 会議室を 登録 会議室を 検索 ◦◦の場 合 料金を支
払った 過去の言葉で書く システムではなく 業務としての 出来事を書く 会議室を 登録した 会議室を 予約した 分岐を書くのではな く、実際起こった 出来事を書く ※どうしても気になる場合は 薄ピンク付箋で記載 > イベントストーミングをやってみよう > 2.業務イベントを書き出す 料金の支 払に失敗 した
業務イベントを書き出す 模造紙を広げてください。 オレンジ色の付箋にこのシステムで起こった出来 事=業務イベントを書き出してください。 以下に気を付けて業務イベントを書いてください。 •過去の言葉で書く •システムではなく業務としての出来事を書く •分岐を書くのではなく、実際起こった出来事を 書く 15分でお願いします。
15分 バグ票を 起票した ・・・ バグ票 更新情報 が通知さ れた 要素 概要 業務イベント 業務で起こった出来事 (過去) > イベントストーミングをやってみよう > 2.業務イベントを書き出す
念のため・・・ 以下の観点で業務イベントが 記載されてるか確認し、 適宜修正・統合しながら作業をすすめてく ださい。 •過去の言葉で書く •システムではなく業務として何をするのか 書く •分岐を書くのではなく、実際起こった出来 事を書く
15分(あと5分) バグ票を 起票した ・・・ バグ票 更新情報 が通知さ れた > イベントストーミングをやってみよう > 2.業務イベントを書き出す
時系列で並べる 1.お題の読み込み(10分) 2.業務イベントを書き出す(15分) 3.時系列で並べる(5分) 4.もう1回業務イベントを整理する(10分) 5.リードモデル/アクター/ポリシー/コマンドを埋めてみる(10分) 6.ギャップを埋める(5分) 7.集約/外部システムを記載する(5分) 8.区切られた文脈でわける(5分) >
イベントストーミングをやってみよう > 3.時系列で並べる
時系列で並べる > イベントストーミングをやってみよう > 3.時系列で並べる 業務イベントを時系列で並べてみる 同時期に起きるものは並列にする。
時系列で並べてみる > イベントストーミングをやってみよう > 3.時系列で並べる 業務イベントを時系列で並べてみる 同時期に起きるものは並列にする。
時系列で並べてみる 業務イベントを時系列で並べてみる 同時期に起きるものは並列にする。 →「ユーザーが変わる」「フェーズがかわる」「業務の種類がかわる」 を意識して並べる > イベントストーミングをやってみよう > 3.時系列で並べる
時系列で並べる 業務イベントを時系列で並べてみる。 同時期に起きるものは並列にする。 →「ユーザーが変わる」「フェーズがかわ る」「業務の種類がかわる」を意識ながら 並べる あとで付箋の場所が変わることになるので、 矢印を書く場合には直に描くのではなく、 矢印シールを用いてください。 5分でお願いします。
バグ票を 起票した ・・・ バグ票 更新情報が 通知された > イベントストーミングをやってみよう > 3.時系列で並べる
もう1回業務イベントを整理する 1.お題の読み込み(10分) 2.業務イベントを書き出す(15分) 3.時系列で並べる(5分) 4.もう1回業務イベントを整理する(5分) 5.リードモデル/アクター/ポリシー/コマンドを埋めてみる(10分) 6.ギャップを埋める(5分) 7.集約/外部システムを記載する(5分) 8.区切られた文脈でわける(5分) >
イベントストーミングをやってみよう > 4.もう1回業務イベントを整理する
次に行く前に・・・ 会議室を 登録 会議室を 検索 過去の言葉で書く システムではなく 業務として 何をするのか書く 会議室を
登録した 会議室を 予約した > イベントストーミングをやってみよう > 4.もう1回業務イベントを整理する ▼▼の場 合 ◦◦の場 合 料金を支 払った 分岐を書くのではな く、実際起こった 出来事を書く ※どうしても気になる場合は 薄ピンク付箋で記載 料金の支 払に失敗 した
もう1回業務イベントを整理する 以下の観点で業務イベントが 記載されてるか確認し、 適宜修正・統合してください。 •過去の言葉で書く •システムではなく業務として何をするのか書く •分岐を書くのではなく、実際起こった出来事を書く これから業務イベントの前にたくさん(3~4枚)付箋を 並べるので、業務イベントの前にスペースを確保した状 態になるように模造紙を整理してください。
模造紙で広さが十分でない場合、A3の用紙を 付け足してください。 5分 バグ票を 起票した ・・・ バグ票 更新情報が 通知された スペース スペース スペース > イベントストーミングをやってみよう > 4.もう1回業務イベントを整理する
もう1回業務イベントを整理する 1.お題の読み込み(10分) 2.業務イベントを書き出す(15分) 3.時系列で並べる(5分) 4.もう1回業務イベントを整理する(5分) 5.リードモデル/アクター/ポリシー/コマンドを埋めてみる(10分) 6.ギャップを埋める(5分) 7.集約/外部システムを記載する(5分) 8.区切られた文脈でわける(5分) >
イベントストーミングをやってみよう > 5.リードモデル/アクター/ポリシー/コマンドを見つける
リードモデル/アクター/ポリシー/ コマンドを見つける 「何をみて」「だれが」「何をする」(ユーザーイベント)、「どういう条件で」 「何をする」(自動イベント)を明らかにする > イベントストーミングをやってみよう > 5.リードモデル/アクター/ポリシー/コマンドを見つける
リードモデル/アクター/ポリシー/ コマンドを見つける 「何をみて」「だれが」「何をする」(ユーザーイベント)、「どういう条件で」 「何をする」(自動イベント)を明らかにする > イベントストーミングをやってみよう > 5.リードモデル/アクター/ポリシー/コマンドを見つける
リードモデル/アクター/ポリシー/ コマンドを見つける ポリシー、リードモデル、アクター、 コマンドまでを埋める > イベントストーミングをやってみよう > 5.リードモデル/アクター/ポリシー/コマンドを見つける 要素 概要
ポリシー この命令が起動するための 自動ルール リードモデル 使う人が見る画面、データ アクター 使う人 コマンド システムに対して行う命令 集約 操作する概念(データ) 外部システム このシステム外のシステム 業務イベント 業務で結果的に起こった出 来事(過去)
要素 概要 ポリシー この命令が起動するための 自動ルール リードモデル 使う人が見る画面、データ アクター 使う人 コマンド
システムに対して行う命令 集約 操作する概念(データ) 外部システム このシステム外のシステム 業務イベント 業務で結果的に起こった出 来事(過去) リードモデル/アクター/ポリシー/ コマンドを見つける ポリシー、リードモデル、アクター、 コマンドまでを埋める > イベントストーミングをやってみよう > 5.リードモデル/アクター/ポリシー/コマンドを見つける
要素 概要 ポリシー この命令が起動するための 自動ルール リードモデル 使う人が見る画面、データ アクター 使う人 コマンド
システムに対して行う命令 集約 操作する概念(データ) 外部システム このシステム外のシステム 業務イベント 業務で結果的に起こった出 来事(過去) リードモデル/アクター/ポリシー/ コマンドを見つける ユーザーが行うイベント 自動イベント ユーザーが行うイベントと 自動イベントの2通りの書き方がある > イベントストーミングをやってみよう > 5.リードモデル/アクター/ポリシー/コマンドを見つける
ユーザーが行うイベント 【業務イベント】 業務で起こった 出来事(過去) 【リードモデル】 使う人が見る画面、 データ 【アクター】 使う人 【コマンド】
システムに対して行 う命令 【集約】 変化するもの、 データ 【外部システム】 このシステム外の システム 会議室を 仮予約した 【ポリシー】 この命令が起動す るための自動ルー ル > イベントストーミングをやってみよう > 5.リードモデル/アクター/ポリシー/コマンドを見つける
ユーザーが行うイベント 会議室 空き情報 利用ユーザー 会議を予約する (付箋だけ貼って まだかかない) 何を見て 誰が 結果どうなった
何をする 【業務イベント】 業務で起こった 出来事(過去) 【リードモデル】 使う人が見る画面、 データ 【アクター】 使う人 【コマンド】 システムに対して行 う命令 【集約】 変化するもの、 データ 【外部システム】 このシステム外の システム 【ポリシー】 この命令が起動す るための自動ルー ル 会議室を 仮予約した > イベントストーミングをやってみよう > 5.リードモデル/アクター/ポリシー/コマンドを見つける
自動イベント 【業務イベント】 業務で起こった 出来事(過去) 【リードモデル】 使う人が見る画面、 データ 【アクター】 使う人 【コマンド】
システムに対して行 う命令 【集約】 変化するもの、 データ 【外部システム】 このシステム外の システム 【ポリシー】 この命令が起動す るための自動ルー ル > イベントストーミングをやってみよう > 5.リードモデル/アクター/ポリシー/コマンドを見つける 会議室 予約確定した
自動イベント 会議室を予約確定 する (付箋だけ貼って まだかかない) 支払い 完了したら 会議室 予約確定した どういう条件で
結果どうなった 何をする 【業務イベント】 業務で起こった 出来事(過去) 【リードモデル】 使う人が見る画面、 データ 【アクター】 使う人 【コマンド】 システムに対して行 う命令 【集約】 変化するもの、 データ 【外部システム】 このシステム外の システム 【ポリシー】 この命令が起動す るための自動ルー ル > イベントストーミングをやってみよう > 5.リードモデル/アクター/ポリシー/コマンドを見つける
外部システムを使用するイベント どういう条件で 結果どうなった 何をする 【業務イベント】 業務で起こった 出来事(過去) 【リードモデル】 使う人が見る画面、 データ
【アクター】 使う人 【コマンド】 システムに対して行 う命令 【集約】 変化するもの、 データ 【外部システム】 このシステム外の システム 【ポリシー】 この命令が起動す るための自動ルー ル 会議予約完了メー ルを出す (付箋だけ貼って まだかかない) 予約完了したら 会議室予約完了の メールを出した > イベントストーミングをやってみよう > 5.リードモデル/アクター/ポリシー/コマンドを見つける
リードモデル/アクター/ポリシー/ コマンドを埋めてみる 業務イベントについて、リードモデ ル、アクター、ポリシー、コマンド を追加していってください。 集約・外部システムの部分について は付箋のみを貼ってください バグ票を 起票した バグ票
更新情報が 通知された バグ票 テスター バグ票を 起票する バグ票が 更新され たら バグ票 更新通知 メール 送信 要素 概要 ポリシー この命令が起動するための 自動ルール リードモデル 使う人が見る画面、データ アクター 使う人 コマンド システムに対して行う命令 > イベントストーミングをやってみよう > 5.リードモデル/アクター/ポリシー/コマンドを見つける
ギャップを埋める 1.お題の読み込み(10分) 2.業務イベントを書き出す(15分) 3.時系列で並べる(5分) 4.もう1回業務イベントを整理する(10分) 5.リードモデル/アクター/ポリシー/コマンドを埋めてみる(10分) 6.ギャップを埋める(5分) 7.集約/外部システムを記載する(5分) 8.区切られた文脈でわける(5分) >
イベントストーミングをやってみよう > 6.ギャップを埋める
ギャップを埋める 業務イベントを時系列で並べてみた →おかしいところ、ぬけているところのギャップをうめる あれ? 支払失敗の時 予約はどうなる? > イベントストーミングをやってみよう > 6.ギャップを埋める
利用不可期間とは? 予約されてたらどう なる?
ギャップを埋める 業務イベントを時系列で並べてみた →おかしいところ、ぬけているところのギャップをうめる > イベントストーミングをやってみよう > 6.ギャップを埋める 仮予約 →支払 →予約確定
利用不可期間登録失 敗イベントを追加
疑問点を書く 利用不可期 間とはなに か? > イベントストーミングをやってみよう > 6.ギャップを埋める 業務イベントを時系列で並べてみた →おかしいところ、ぬけているところのギャップをうめる
→疑問点を記載する
ギャップを埋める 今作った業務イベントとお題の資 料を見直して、線がつながらない ところ、ギャップがあるところを 見つけたら、埋めてみてください。 また、疑問点が見つかったら ピンク色の付箋にかいてみて ください。 時間は5分! >
イベントストーミングをやってみよう > 6.ギャップを埋める バグ票を 起票した バグ票 更新情報が 通知された バグ票 テスター バグ票を 起票する バグ票が 更新され たら バグ票 更新通知 メール 送信 ?
集約/外部システムを記載する 1.お題の読み込み(10分) 2.業務イベントを書き出す(15分) 3.時系列で並べる(5分) 4.もう1回業務イベントを整理する(5分) 5.リードモデル/アクター/ポリシー/コマンドを埋めてみる(10分) 6.ギャップを埋める(5分) 7.集約/外部システムを記載する(5分) 8.区切られた文脈でわける(5分) >
イベントストーミングをやってみよう > 7.集約/外部システムを記載する
集約/外部システムを記載する > イベントストーミングをやってみよう > 7.集約/外部システムを記載する 集約=フローで操作する概念を見つけ出す。
集約/外部システムを記載する > イベントストーミングをやってみよう > 7.集約/外部システムを記載する 集約=フローで操作する概念を見つけ出す。
集約をまとめる 【業務イベント】 業務で起こった 出来事(過去) 【リードモデル】 使う人が見る画面、 データ 【アクター】 使う人 【コマンド】
システムに対して行 う命令 【集約】 変化するもの、 データ 【外部システム】 このシステム外の システム 会議室 空き情報 利用ユー ザー 会議を予 約する 会議室を 仮予約した 会議室を 予約確定 する 会議室 予約確定し た 【ポリシー】 この命令が起動す るための自動ルー ル 支払い 完了したら 何を見て 誰が 結果どうなった 何をする どの概念に対して どのシステムで どういう条件で 集約をまとめる > イベントストーミングをやってみよう > 7.集約/外部システムを記載する
集約をまとめる 【業務イベント】 業務で起こった 出来事(過去) 【リードモデル】 使う人が見る画面、 データ 【アクター】 使う人 【コマンド】
システムに対して行 う命令 【集約】 変化するもの、 データ 【外部システム】 このシステム外の システム 会議室 空き情報 利用ユー ザー 会議を予 約する 会議室を 仮予約した 会議室 予約 会議室を 予約確定 する 会議室 予約確定し た 【ポリシー】 この命令が起動す るための自動ルー ル 支払い 完了したら 何を見て 誰が 結果どうなった 何をする どの概念に対して どのシステムで どういう条件で > イベントストーミングをやってみよう > 7.集約/外部システムを記載する
外部システムの特定 【業務イベント】 結果 起こったこと 【コマンド】 システムに対して行 う命令 【集約】 変化するもの、デー タ
【外部システム】 このシステム外の システム 【ポリシー】 この命令が起動す るための自動ルー ル 会議予約完了メー ルを出す 予約完了したら 会議室予約完了の メールを出した どういう条件で どの概念に対して 結果どうなった 何をする どのシステムで 【リードモデル】 使う人が見る画面、 データ 【アクター】 使う人 > イベントストーミングをやってみよう > 7.集約/外部システムを記載する
外部システムの特定 【業務イベント】 結果 起こったこと 【コマンド】 システムに対して行 う命令 【集約】 変化するもの、デー タ
【外部システム】 このシステム外の システム 【ポリシー】 この命令が起動す るための自動ルー ル 会議予約完了メー ルを出す 予約完了したら 会議室予約完了の メールを出した どういう条件で どの概念に対して 結果どうなった 何をする どのシステムで 【リードモデル】 使う人が見る画面、 データ 【アクター】 使う人 メール システム > イベントストーミングをやってみよう > 7.集約/外部システムを記載する
今回の注意点 今回は大きい付箋を用意するのが 難しいのと、付箋の場所を移すの が難しいので、その場で、操作す る概念が同じなのはどこか、意識 しながら集約を決めていってくだ さい。 > イベントストーミングをやってみよう >
7.集約/外部システムを記載する
集約/外部システムを記載する 模造紙の各フローの「集約」「外部シ ステム」の付箋にそれぞれ、「操作す る概念」「該当する外部システム」を 埋めていってください。 5分でお願いします。 バグ票を 起票した バグ票 更新情報が
通知された バグ票 テスター バグ票を 起票する バグ票 バグ票が 更新され たら バグ票 更新通知 メール 送信 メール システム > イベントストーミングをやってみよう > 7.集約/外部システムを記載する 要素 概要 集約 操作する概念(データ) 外部システム このシステム外のシステム
区切られた文脈でわける 1.お題の読み込み(10分) 2.業務イベントを書き出す(15分) 3.時系列で並べる(5分) 4.ギャップを埋める(5分) 5.もう1回業務イベントを整理する(10分) 6.リードモデル/アクター/ポリシー/コマンドを埋めてみる(10分) 7.集約/外部システムを記載する(5分) 8.区切られた文脈でわける(5分) >
イベントストーミングをやってみよう > 8.区切られた文脈でわける
区切られた文脈でわける 類似の集約、フェーズの切り替わりから、事業を区切られた 文脈に分割する > イベントストーミングをやってみよう > 8.区切られた文脈でわける
区切られた文脈でわける 類似の集約、フェーズの切り替わりから、事業を区切られた 文脈に分割する > イベントストーミングをやってみよう > 8.区切られた文脈でわける
会議室管理 会議室予約 モデリングの境界 同じ言葉=ユキビタス言語を つかえる範囲 業務領域がユースケースとほ ぼ同じ結果になるのに対し、
区切られた文脈は「設計」 技術的要素、セキュリティなど の非機能要件で分ける場合もあ る 予約するもの 物理的な部屋 会議室 区切られた文脈とは(再掲) > イベントストーミングをやってみよう > 8.区切られた文脈でわける
注意点 一般的にワークフロー、ステータス変更は文脈をわけない →状態が変わるということは同じ集約を扱っているということ > イベントストーミングをやってみよう > 8.区切られた文脈でわける
中核の業務領域をみつける 区切られた文脈の中でこのシステムの中核の業務 領域を見つけ出す。 →中核の業務領域はビジネスロジックがシステム 特有かつ複雑になる。 一方で他の文脈(一般的な業務領域・補完的な業 務領域)は他システムと同一のものにしたり、他 の製品で代替を検討することが可能 会議室予約=中核の業務領域! 業務領域区分
概要 中核の業務領域 競合他社との違いを生 み出す業務活動 システムの中核業務 一般的な業務領域 どの会社でも同じやり 方をする業務領域 補完的な業務領域 そのシステムを支える ための業務活動 > イベントストーミングをやってみよう > 8.区切られた文脈でわける
中核の業務領域をみつける =中核の業務領域! > イベントストーミングをやってみよう > 8.区切られた文脈でわける 支払 会議室管理 会議室予約 メール送信
区切られた文脈をわける イベントストーミング図を みて、区切られた文脈を分 割してみましょう。 時間があれば、中核の業務 領域はどれか考えてみま しょう。 時間は5分です。 バグ票を 起票した
バグ票 更新情報が 通知された バグ票 テスター バグ票を 起票する バグ票 バグ票が 更新され たら バグ票 更新通知 メール 送信 メール システム 中核の業務領域 補完的な業務領域 > イベントストーミングをやってみよう > 8.区切られた文脈でわける
完了です!お疲れ様でした! 1.お題の読み込み(10分) 2.業務イベントを書き出す(15分) 3.時系列で並べる(5分) 4.ギャップを埋める(5分) 5.もう1回業務イベントを整理する(10分) 6.リードモデル/アクター/ポリシー/コマンドを埋めてみる(10分) 7.集約/外部システムを記載する(5分) 8.区切られた文脈でわける(5分) >
イベントストーミングをやってみよう
イベントストーミングの あと・・・
イベントストーミング完了! 事業を分析、フローを整理して業務領域をみつける →事業を区切られた文脈にわけていく > イベントストーミングのあと・・・ 支払 会議室管理 会議室予約 メール送信
イベントストーミングのあと・・・ > イベントストーミングのあと・・・ 業務を分析して 業務や文脈を整理 区切った文脈どうしの 関係性を整理 文脈内のモデリング
区切られた文脈の関係性を整理 区切られた文脈の関係性によって、区切 られた文脈どうしの通信パターンを決め ていきます 通信パターン 概要 パートナーシップ 一蓮托生。同期を取り合う 共有カーネル コードの一部を物理的に共有
顧客/供給者 下流のために上流が機能を実装 順応者 上流のモデルを下流が受け取る 腐敗防止層 上流のモデルを変換 公開ホストサービス 誰でも使える窓口を提供 > イベントストーミングのあと・・・
ドメインモデリング(例) 区切られた文脈の中での各要素のビジネスルールを形にしたものを作成 値オブジェクト このドメインで使われる データの各要素がどんな値 なのかを定義 エンティティ ビジネスにおいて必要な、 ライフサイクルをもつ データ群と
データ群に紐づくビジネス ロジック 集約 操作する概念→ ビジネスにおいて、必ず セットに保つ必要のあるエ ンティティの範囲 v > イベントストーミングのあと・・・ ドメインサービス 複数の集約やオブジェクト にかかるビジネスルールを 記載 腐敗防止層 他コンテキストからのイン ターフェースを当コンテキ ストにあうように変換した もの
ドメインモデリング(例) 区切られた文脈の中での各要素のビジネスルールを形にしたものを作成 値オブジェクト このドメインで使われる データの各要素がどんな値 なのかを定義 ドメインサービス 複数の集約やオブジェクト にかかるビジネスルールを 記載
腐敗防止層 他コンテキストからのイン ターフェースを当コンテキ ストにあうように変換した もの 集約 操作する概念→ ビジネスにおいて、必ず セットに保つ必要のあるエ ンティティの範囲 エンティティ ビジネスにおいて必要な、 ライフサイクルをもつ データ群と データ群に紐づくビジネス ロジック ポリシー 業務 イベント コマンド コマンド 業務 イベント ポリシー 集約 ※諸説あります v > イベントストーミングのあと・・・
ドメインモデリング 会議情報の中にはどんな情報があるのか どういう値のルールがあるのか どういうビジネスルールがあるのか ビジネスと同じ言葉で システムを実装する! 集約 コマンド 業務 イベント
(から導出) ※諸説あります 集約 > イベントストーミングのあと・・・
で、実装するとこうなります > イベントストーミングのあと・・・ 会議室予約 支払 メール送信 会議室管理
ドメイン駆動設計 ・技術ではなく「ドメイン=(ここでは)解決したい問題領 域)」を主軸においてソフトウェアを設計する手法 業務を理解して業務の複雑さを解決するための手法 > イベントストーミングのあと・・・
それ以外でも・・・ ∙開発メンバーの業務理解を深める ∙業務を担当しているメンバーと開発メンバーの共通認識を持たせる ∙リリース後のシステムと業務の乖離を把握する・・・ > イベントストーミングのあと・・・ ドメイン駆動設計を選択しない場合でも イベントストーミングは有意義!
困ったときの参考文献 •ヤマユ. (2024). 【DDD入門】TypeScript × ドメイン駆動設計ハンズオン. Zenn. https://zenn.dev/yamachan0625/books/ddd-hands-on •Khononov, V.
(2024). ドメイン駆動設計をはじめよう: ソフトウェアの実装と事 業戦略を結びつける実践技法 (増田亨 & 綿引琢磨, 訳). オライリー・ジャパン. •Vernon, V. (2015). 実践ドメイン駆動設計 (髙木正弘, 訳). 翔泳社. •Evans, E. (2011). エリック・エヴァンスのドメイン駆動設計: ソフトウェアの 核心にある複雑さに立ち向かう (今関剛, 和智右桂, 牧野祐子, 金井哲夫, 訳). 翔泳社. > イベントストーミングのあと・・・
業務からはじめよう! ご清聴ありがとうございました!!!! > イベントストーミングのあと・・・