Slide 1

Slide 1 text

貴重なデータ、捨ててませんか? OSS で始めるイベントソーシングのススメ

Slide 2

Slide 2 text

Opening

Slide 3

Slide 3 text

株式会社ジェイテックジャパンの紹介 ● 創業50年を超えた総合IT企業、株式会社 ジャパンテクニカルソフトウェア (JTS) のグループ企業。 ● New York 所在 J-Tech Creations, Inc. の 東京拠点。 ● B2C / B2B アプリケーションを 開発‧運⽤する Sler。 ● .NET‧Azure 等 Microsoft の 技術スタックを主に使⽤。

Slide 4

Slide 4 text

Overview イベントソーシングについて ● イベントソーシングって何? ● イベントソーシングを使うと、何 が良いの?デメリットは? ● みんな使ってるの? Sekiban の紹介 ● Sekiban って何? ● 何ができるの? ● 簡単に使えるの?(デモ)

Slide 5

Slide 5 text

イベントソーシングって何?

Slide 6

Slide 6 text

イベントソーシングとは? ● アプリケーション開発における デザインパターンの⼀つ。 ● データの取り扱いと保存の⽅法に関する 考え⽅。 ● データの状態(ステート)ではなく、 状態遷移(イベント)の履歴を保存する。 ● イベントの履歴から 現在のデータの状態を再現する。 ● 対⽴概念はステートソーシングと呼ぶ。

Slide 7

Slide 7 text

ステートとイベント 盤⾯図: ステート 棋譜: イベント履歴

Slide 8

Slide 8 text

ステートとイベント 盤⾯図: ステート 棋譜: イベント履歴 × ○

Slide 9

Slide 9 text

DB ステートソーシング Front-End Web Server Application データ処理の流れ 1. 現在の状態を読み出す。 2. 状態を変更する。 3. 変更後の状態を DB に保存する。 (古い状態は削除される) ステートソーシングの特徴 ● データを処理した結果を保存する。 ● 参照と更新に同じモデルを使える。 (CRUD) 1 2 3 買い物カート コーヒー 紅茶 買い物カート コーヒー

Slide 10

Slide 10 text

イベントソーシング データ処理の流れ 1. イベントを再⽣し、 現在の状態を再現する。 2. コマンドを⽣成し、 どう変更するかを伝える。 3. コマンドを実⾏し、それによって発⽣する イベントを履歴に追加する。 イベントソーシングの特徴 ● データを処理する過程を保存する。 ● 参照と更新のモデルが異なる。 (クエリとコマンド) DB Front-End Web Server Application 買い物カート コーヒー コマンド カートに 紅茶を追加 1 2 3 イベント履歴 コーヒーが 追加された

Slide 11

Slide 11 text

ステートソーシングでは失われるデータ - コーヒー コーヒーを追加する - コーヒー - ジュース - コーヒー - ジュース - 紅茶 - コーヒー - 紅茶 ジュースを追加する 紅茶を追加する ジュースを削除する 1. 購⼊しなかったものの興味を持ったアイテムの情報が保存されない 2. 全ての状態の保存は可能、しかしどのような変更があったかを知るには 状態を⽐較して差分を取る必要がある(状態変化の理由が保存されない)

Slide 12

Slide 12 text

イベントソーシングではどうなる? コーヒーを追加する ジュースを追加する 紅茶を追加する ジュースを削除する コーヒーが追加された コーヒーが追加された ジュースが追加された コーヒーが追加された ジュースが追加された 紅茶が追加された コーヒーが追加された ジュースが追加された 紅茶が追加された ジュースが削除された 1. カートに⼊れた履歴に基づいてサジェストが可能 ー データの利活⽤に有利 2. 状態変化の理由を容易に追跡可能 ー 監査やデバッグに有利

Slide 13

Slide 13 text

ステートソーシングのメリット‧デメリット メリット ● 概念が分かりやすい。 ● データの参照やメンテナンスが 容易。 ● 多くのライブラリや フレームワークを活⽤できる。 デメリット ● 状態変化の履歴が記録されない。 ● 過去の状態の復元が困難。 ● データストアの分割と、 スケーリングがしづらい。

Slide 14

Slide 14 text

イベントソーシングのメリット‧デメリット メリット ● すべての変更が記録される。 ● 過去の状態を再現可能。 ● データの改ざんがしづらい。 ● データストアの分割と、 スケーリングがしやすい。 デメリット ● クエリにイベント再⽣が必要。 (パフォーマンスが悪い) ● 実装が複雑になりやすい。 ● データ量が増⼤しやすい。 ● データメンテナンスがしづらい。

Slide 15

Slide 15 text

Event Sourcing CQRS イベントソーシングとCQRS Client Command Event Event History Projection Query CQRS とは? ● コマンド‧クエリ責任分離 ● データの参照系と更新系を分離する イベントソーシングと組み合わせる理由 ● コマンド実⾏ → 概念上イベントが発⽣ ● コマンド実⾏時に状態を変更するのでは なく、イベントをそのまま記録する ● イベント再⽣ → クエリ実⾏可能 Materialized View

Slide 16

Slide 16 text

イベントソーシングは広く使われている? ● 2000年代から提唱されるようになった。 ● ステートソーシングと⽐べると 使⽤例は多くない。 ● 理解の難易度と実装の敷居が⾼い。 ● 使えるフレームワークが少ない。 使いやすいフレームワークを開発しよう!

Slide 17

Slide 17 text

Sekiban で始める イベントソーシング

Slide 18

Slide 18 text

Sekiban の紹介 ● イベントソーシング / CQRS ⽤のアプリケーション開発フレームワーク ● ⾔語は C# ● データストアに Microsoft Azure Cosmos DB / Amazon DynamoDB、 PostgreSQL にも対応済み。 ● 2023年12⽉にオープンソースソフトウェアとして公開 (Apache 2.0)、 有料プランはない。 ● 名称 Sekiban (⽯板) は、古代の多くの⽂明で耐久性に優れた記録媒体として ⽯の板が使われていたことに由来。⽇本発の OSS として敢えて⽇本語名に。

Slide 19

Slide 19 text

Sekiban でできること ● イベントソーシング / CQRS の構成要素の宣⾔的記述。 ○ Command ○ Event ○ Aggregate ○ Projection ○ Query ● コマンド‧イベントのデータストアへの⾃動保存。 ● データストアへの接続情報だけで実⾏可能なシンプル設計。 ● コマンド‧クエリの⾃動テストを Given-When-Then パターンで書ける テスト⽤フレームワーク。 ● ASP.NET Core による Web API の⾃動⽣成機能。

Slide 20

Slide 20 text

Sekiban のデモ https://github.com/J-Tech-Japan/Osc2024Sample

Slide 21

Slide 21 text

Sekiban の現状と今後 現状 ● 5つ以上のプロジェクトで 使⽤‧運⽤中 ● ⽐較的⼩規模なアプリケーション 開発に有⽤(開発効率の向上) 今後 ● 採⽤事例の増加 ● 対応 DB の拡⼤ ○ MySQL, MongoDB ● ⼤規模システム対応 ○ マテリアライズドビュー ○ 分散システム

Slide 22

Slide 22 text

Closing

Slide 23

Slide 23 text

イベントソーシングという選択肢 ● プログラミング⾔語、プラットフォーム、アーキ テクチャなど、ソフトウェア開発の各分野には 複数の選択肢がある。 ● データ永続化の⼿法にも、状態を保存する以外の 選択肢がある。 ● イベントソーシングによって、将来ビジネス価値 が⽣じるかもしれないデータを保存しておける。 ● ⽣成 AI 時代にはデータ蓄積の重要性が増す。 Event-sourcing is not a silver bullet, but it can be a powerful tool in your toolbox.

Slide 24

Slide 24 text

Sekiban 情報の⼊⼿先とコンタクト X account (DM可) @sekibandev GitHub https://github.com/J-Tech-Japan/Sekiban Landing Page https://www.sekiban.dev/jp J-Tech Japan Tech Blog https://zenn.dev/p/jtechjapan_pub