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

なぜ「Event Sourcing」を選択したのか〜事実に基づくことの重要性〜/Why did...

なぜ「Event Sourcing」を選択したのか〜事実に基づくことの重要性〜/Why did we choose "Event Sourcing"?

More Decks by 株式会社ビットキー / Bitkey Inc.

Other Decks in Technology

Transcript

  1. 2 Copyright © 2025 Bitkey Inc. All right reserved. 目次

    1. なぜ Event Sourcing を導入しようと思ったのか? 2. なぜ Event Sourcing が「良い」と思ったのか? 3. 導入してみて感じたこと 4. 今後やりたいこと
  2. 3 Copyright © 2025 Bitkey Inc. All right reserved. 自己紹介

    佐藤 拓人 Sato Takuto 2015.04 2019.05 2020.01 大学(建築学専攻)卒業後、 株式会社ワークスアプリケーションズに入社 会計システムのソフトウェア開発を担当 特に財務会計の仕訳関連 ビットキーへ参画 ECサイトの開発 / 保守、社内システムの開発 TaKuTyの開発 今のHome事業の前身となるResidenceチームに配属 スマートロックを扱う管理画面やバックエンド、スマ ホアプリの開発に従事 Now Home事業のプロダクト責任者 複雑な事象を読み解いて構造化し、抽象化 / 汎用化で きるように設計し、低コストで多くの価値をだせる開 発をすることを好む
  3. 5 Copyright © 2025 Bitkey Inc. All right reserved. 1.

    なぜ Event Sourcing を導入しようと思ったのか
  4. 6 Copyright © 2025 Bitkey Inc. All right reserved. 1.

    なぜ Event Sourcing を導入しようと思ったのか プロダクト特性
  5. 7 Copyright © 2025 Bitkey Inc. All right reserved. 1.

    なぜ Event Sourcing を導入しようと思ったのか プロダクト特性
  6. 8 Copyright © 2025 Bitkey Inc. All right reserved. 1.

    なぜ Event Sourcing を導入しようと思ったのか プロダクト特性 ※ かなり簡易化した図となっています
  7. 9 Copyright © 2025 Bitkey Inc. All right reserved. 1.

    なぜ Event Sourcing を導入しようと思ったのか プロダクト特性 ※ かなり簡易化した図となっています
  8. 10 Copyright © 2025 Bitkey Inc. All right reserved. 1.

    なぜ Event Sourcing を導入しようと思ったのか プロダクト特性 ※ かなり簡易化した図となっています
  9. 11 Copyright © 2025 Bitkey Inc. All right reserved. 1.

    なぜ Event Sourcing を導入しようと思ったのか プロダクト特性 ※ かなり簡易化した図となっています 解錠できるか / できないが コントロールできない ... ↓ 事業リスク
  10. 12 Copyright © 2025 Bitkey Inc. All right reserved. 1.

    なぜ Event Sourcing を導入しようと思ったのか プロダクト特性 ※ かなり簡易化した図となっています 状況を適切に把握することが 重要
  11. 13 Copyright © 2025 Bitkey Inc. All right reserved. 1.

    なぜ Event Sourcing を導入しようと思ったのか プロダクト特性 Event Sourcing
  12. 14 Copyright © 2025 Bitkey Inc. All right reserved. 2.

    なぜ Event Sourcing が「良い」と思ったのか?
  13. 15 Copyright © 2025 Bitkey Inc. All right reserved. 2.

    なぜ Event Sourcing が「良い」と思ったのか? State管理だと難しい?
  14. 16 Copyright © 2025 Bitkey Inc. All right reserved. 2.

    なぜ Event Sourcing が「良い」と思ったのか? State管理だと難しい? 設置状況として 「処理開始」「処理中」「処理完了」 …と管理すればできるかもしれない (雑すぎるかもですが ...)
  15. 17 Copyright © 2025 Bitkey Inc. All right reserved. 2.

    なぜ Event Sourcing が「良い」と思ったのか? State管理だと難しい? でも... 設置状況: 「処理中」 …ってどんな状況?
  16. 18 Copyright © 2025 Bitkey Inc. All right reserved. 2.

    なぜ Event Sourcing が「良い」と思ったのか? State管理だと難しい? 設置状況: 「処理中」 …ってどんな状況? そもそも「設置状況」とは何?
  17. 19 Copyright © 2025 Bitkey Inc. All right reserved. 2.

    なぜ Event Sourcing が「良い」と思ったのか? State管理だと難しい? 設置状況: 「処理中」 …ってどんな状況? そもそも「設置状況」とは何? 「処理状況」がどんな状態を 表現するかがソースに 依存してしまう
  18. 20 Copyright © 2025 Bitkey Inc. All right reserved. 2.

    なぜ Event Sourcing が「良い」と思ったのか? State管理だと難しい? 設置状況: 「処理中」 …ってどんな状況? そもそも「設置状況」とは何? 「処理状況」がどんな状態を 表現するかがソースに 依存してしまう そのうち必要な処理 (実装)が 変わるかもしれない ... ステータスと乖離するかも ...
  19. 21 Copyright © 2025 Bitkey Inc. All right reserved. 2.

    なぜ Event Sourcing が「良い」と思ったのか? State管理だと難しい? 設置状況: 「処理中」 …ってどんな状況? そもそも「設置状況」とは何? 「処理状況」がどんな状態を 表現するかがソースに 依存してしまう そのうち必要な処理 (実装)が 変わるかもしれない ... ステータスと乖離するかも ... 「状態」は現実には存在しない「概念」 そのため移ろいやく そして壊れやすい
  20. 22 Copyright © 2025 Bitkey Inc. All right reserved. 2.

    なぜ Event Sourcing が「良い」と思ったのか? State管理だと難しい? State管理の課題 (個人的な課題 ) 1. 人によって認識の仕方が異なる 2. 事業のフェーズやドメイン理解が深まることによって、あるべき定義が変わ りやすい 3. 状態の根拠が「ソースコード」になり、変更されやすい
  21. 24 Copyright © 2025 Bitkey Inc. All right reserved. 3.

    導入してみて感じたこと Positive 1. CQRSやデータストアを CQで分離しなくても活用はできた 2. 事実から状態を構築する処理のパフォーマンスは問題なかった 3. 「事実が記録されていること」の安心感はある 4. 設計で新たな「概念」を生み出す必要がないため、事実の整理に注力しや すい 5. 設計の解像度は上がりやすい (…気がする) 6. 関数型と相性が良い (…気がする) 7. 総じて設計のプロセスを簡易化することができそう (...に感じた)
  22. 25 Copyright © 2025 Bitkey Inc. All right reserved. 1.

    調査では記録した「事実」を確認することもあるが、ログを見た方が早いこと が多かった 2. 事実を記録する …といっても、そもそも実装がミスってて事実が記録されて なかった…みたいなことがあった 3. 事実から現在の状態を構築する処理は複雑化しやすい 4. ドメイン知識 / 制約をどう集約するか …はまだ手探り 3. 導入してみて感じたこと Negative
  23. 27 Copyright © 2025 Bitkey Inc. All right reserved. 1.

    Query用のデータストアを用意する or Snapshotを記録する 2. Event Sourcingの実装ポリシーを整える 3. 設計プロセスを型化して展開する 4. 今後やりたいこと Next