PHPカンファレンス関西 2025に登壇レポート: 『ドメインイベントでビジネスロジックを解きほぐす』
こんにちは!TechBowl の梶川(@kajitack)です。
この記事は、2025 年 7 月 19 日に開催された PHPカンファレンス関西 2025 の登壇レポートです。
登壇内容
「ドメインイベントでビジネスロジックを解きほぐす」というタイトルで登壇させていただきました。
今回の登壇では、ドメインイベントの基本概念から実装方法まで段階的に紹介しました。
まず、ドメインイベントとは何かという基本的な説明から始めました。ドメインイベントは、ビジネスドメイン内で起きた重要な出来事を表現するオブジェクトです。「注文した」「ユーザーが登録した」といった出来事を型として表現することで、ビジネスロジックをより明確に記述できるようになります。
次に、同期的なイベント処理の実装方法を解説しました。イベントの発行側と処理側を分離する設計により、各コンポーネントが単一の責務に集中できる構造を実現します。この分離により、それぞれの処理を独立してテストできるようになり、保守性が向上します。
さらに、非同期的なイベント処理への発展について説明しました。同期処理から非同期処理への移行は、システムのスケーラビリティを向上させる重要なステップですが、同時に整合性を保つという新たな課題も生じます。
非同期的なイベント処理では、イベントの発行とその処理が異なるタイミングで実行されます。例えば、「ユーザーデータの永続化」処理と「ユーザー登録イベント」処理を非同期で実行する場合、どちらか一方だけが成功して不整合な状態になる可能性があります。このような状況を防ぐため、トランザクショナルメッセージングのパターンを使用してイベントの確実な配信と処理を保証します。
データベーストランザクション内にイベントを保存し、別プロセスを通じて配信することで確実性を担保します(Transactional Outbox パターン)。また、定期的にイベントテーブルをポーリングして未配信イベントを処理する仕組み(Polling Publisher パターン)を実装することで、整合性を保ちながら非同期処理を実現します。
登壇の振り返り
質疑応答では、イベント駆動型の設計した場合に全体像が分かりづらくなってしまうのではないかという質問をいただきました。
確かに、ドメインイベントを導入することで各ドメインモデルは独立して動作するため、全体のフローが見えにくくなります。
そのため、ドメインイベントを導入する際は、イベントストーミングやドメインイベントのドキュメント化を行い、全体の流れを可視化することが重要です。
また、プロジェクトでのバッチ処理をドメインイベントで置き換えられないかという質問もありました。
まさに、バッチ処理はドメインイベントで置き換えることが可能なケースの 1 つです。
ドメインイベントを活用することで、バッチ処理のトリガーをドメインの状態変化に紐づけることが可能です。
他にも質疑応答や廊下でのでのディスカッションを通じて、私自身もドメインイベントの活用方法について新たな視点を得ることができました。
おわりに
登壇を聞いてくださった皆さま、そして運営スタッフの皆さま、本当にありがとうございました!
今回いただいたフィードバックや懇親会でのディスカッションを活かし、今後も内容をアップデートしていきたいと思います。
Discussion