Claude Codeでイベントリプレイを設計する:プロジェクション再構築・バグ修正後の状態修復・スナップショット連携
はじめに 「バグで集計テーブルの値がずれた。イベントから再計算したい」——Event Sourcingのイベントログからプロジェクション(読み取りモデル)を再構築し、バグ修正後の状態を正確に復元する設計をClaude Codeに生成させる。 CLAUDE.mdにイベントリプレイ設計ルールを書く ## イベントリプレイ設計ルール ### リプレイの安全性 - リプレイ中は読み取りモデルのbui...

Source: DEV Community
はじめに 「バグで集計テーブルの値がずれた。イベントから再計算したい」——Event Sourcingのイベントログからプロジェクション(読み取りモデル)を再構築し、バグ修正後の状態を正確に復元する設計をClaude Codeに生成させる。 CLAUDE.mdにイベントリプレイ設計ルールを書く ## イベントリプレイ設計ルール ### リプレイの安全性 - リプレイ中は読み取りモデルのbuildVersionで管理 - 古いバージョンと新しいバージョンを並行して持ち、切り替え後に古いを削除 - リプレイ中もサービスは停止しない(Blue-Green的アプローチ) ### バッチ処理 - 全イベントを一度にメモリに乗せない(ページング) - チェックポイントを定期的に保存(障害時に途中から再開) - スナップショットがある場合はそこからスタート ### 冪等性 - プロジェクション更新は冪等(同じイベントを2回リプレイしても同じ結果) - INSERT ... ON CONFLICT DO UPDATEでアップサート イベントリプレイ実装の生成 イベントリプレイシステムを設計してください。 要件: - バッチ処理(ページング) - チェックポイント管理 - ゼロダウンタイムリプレイ - 進捗モニタリング 生成ファイル: src/eventsourcing/replay/ 生成されるイベントリプレイ実装 // src/eventsourcing/replay/eventReplayer.ts — イベントリプレイエンジン export interface ReplayOptions { projectionName: string; fromVersion?: number; // 開始バージョン(省略時は最初から) toVersion?: number; // 終了バージョン(省略時は最新まで) batchSize?: number; // 1バッチのイベント数 checkpointEvery?: number; // この件数ごとにチェックポイント保存 } export interface ReplayProgress { projectionName: string; totalEvents: number; processedEvents: number; la