はじめに
この記事はアイレット株式会社Advent Calendar 2024 11日目の記事です。
本記事では私が半年ほど業務でイベントストーミングを実践してみて感じたことを記していきます。
そもそもイベントストーミングとは?
イベントストーミングとはソフトウェア開発をする上で、ビジネスプロセスやドメイン(業務、業務領域)の知識を業務に精通した方々(ドメインエキスパート)と共に議論し、その流れを理解しやすい形にモデル化する手法で、主にドメイン駆動設計(DDD)での開発を行う上で利用されます。
後述する付箋紙を使った簡単な表記法を利用することで、参加者のロールに依存せず活発なディスカッションを行われることが期待されています。
取り扱うモデルの表記法
イベントストーミングではホワイトボードやmiroのような大きなボード利用し、カラフルな付箋紙を貼りながらモデルを表現していきます。それぞれの色には意味付けがされており、ここでは登場する各モデルの紹介をします。
ドメインイベント
業務ので起きる出来事を指します。ドメインイベントは過去分詞形で記します。
ex) 在庫が増えた
コマンド
業務で行うリクエストのことを指します。コマンドは動詞で記します。
ex) 本を発注する
アクター
コマンドをリクエストする人やシステムを指します。アクターは名詞で記します。
ex) 書店の店員
ポリシー
イベントに対して反応し、次のリクエストを促すモノを指します。
アクターからではなく暗黙的にアクションが起きている場合はポリシーに該当します。
ex) 在庫が減ってきたことで起動する通知、商品入荷時の商品番号の採番
外部システム
ドメインの外側にある管理対象外のソフトウェアや組織を指します。
ex) 在庫管理票出力システム
集約
コマンドによって処理される概念のことを指します。集約は名詞で記します。
ex) 在庫
ビューモデル
アクションを実行するために必要なモノを指します。ビューモデルは名詞で記します。
ex) 在庫管理票
実施の流れ
1. ドメインイベントを洗い出す
2. 時系列にドメインイベントを並び替える
3. ドメインイベントを元に他の要素を洗いだす
4. 集約を炙り出す
実施の中で表記揺れのある用語がある場合には、認識のズレを生まないようにドメイン内でユビキタス言語と呼ばれる一意の用語を設けて会話するようにします。また、イベントストーミング実施中に疑問や不明点、不確実な要素等が判明した場合はどんどん付箋にて記載していくことで参加者内の認識のすり合わせを進めていきます。
実際にやってみて感じたポイント
良かった点😄
・簡単な表記法を用いて会話ができるので参加者が特定のモデリング技法に対する知識を持っていなくても実施できた
最初は各モデルの概念を理解するためのハードルが高かったので、誰が(アクター)何を行ったことで(コマンド)何が起きるのか(ドメインイベント)くらいの粒度から始めましたが、結果としては概要を掴む上で効果的に働きました。
・開発者とドメインエキスパート間の用語や認識のズレを減らすことができるためコミュニケーションを円滑に進めることができる
イベントストーミング実施後もユビキタス言語とイベントストーミング図を元に会話ができるので便利でした。
・洗い出されたドメインモデルを元に直感的に実装を行いやすい
イベントストーミングで洗い出されたイベントをそのまま記録し、永続化しようとするとCQRS/イベントソーシング前提の設計になるため工夫は必要かなと思います。
・参加者全員が共通認識を持った状態で議論が進んでいくので不明点の洗い出しが行いやすい
・業務の流れをドメインエキスパートと共に整理できるので開発者はビジネスプロセス全体を把握した上で開発を行える
・ドメインエキスパートが参画する機会を得ることができるので、コミュニケーションを行うきっかけにもなりやすい
苦労した点🤔
・業務フロー上で条件分岐が複雑になった場合、視覚的に分かりづらくなる
ユースケースごとにイベントを分けて記載することで視覚的にはわかりやすくなりますが、似たような図が量産されるのでメンテナンス面でも苦労しました。
個人的な感想ですが、条件分岐が多くなることが見えているのであれば、その部分に関してはイベントストーミングで全てを表現しようとせずに他の形式で整理するという選択肢も取れると良いのかなと思いました。
・実施には時間がかかる
実際に0ベースでイベントストーミングを行おうとするとそれなりの時間を要します。
イベントストーミングの性質上、参加者は多くなるのでスケジュールの確保が第1課題でした。
また、参加者それぞれの情報共有や認識齟齬解消をしながら行うので、議論が発散しすぎないようにファシリテーション力は重要なように感じました。
さいごに
本記事では私が業務にてイベントストーミングを実施した上で得た知見や感想を記していきました。
教科書的なやり方ではない部分もあるかとは思いますが、初めて実施される方に少しでも雰囲気が伝われば幸いです。今回はここまで。