Claude CodeでSagaパターンを設計する:分散トランザクション・補償トランザクション・オーケストレーション

はじめに 「マイクロサービスをまたぐ注文処理が途中で失敗した——どこまで戻せばいい?」——Sagaパターンで分散トランザクションを補償トランザクションで巻き戻し、整合性を保つ設計をClaude Codeに生成させる。 CLAUDE.mdにSagaパターン設計ルールを書く ## Sagaパターン設計ルール ### オーケストレーション型 - SagaオーケストレーターがステップをRedisキュ...

By · · 1 min read

Source: dev.to

はじめに 「マイクロサービスをまたぐ注文処理が途中で失敗した——どこまで戻せばいい?」——Sagaパターンで分散トランザクションを補償トランザクションで巻き戻し、整合性を保つ設計をClaude Codeに生成させる。 CLAUDE.mdにSagaパターン設計ルールを書く ## Sagaパターン設計ルール ### オーケストレーション型 - SagaオーケストレーターがステップをRedisキューで順番に実行 - 各ステップは成功/失敗/補償の3つのハンドラーを持つ - 失敗時は逆順に補償トランザクションを実行 ### 冪等性 - 各ステップはリトライ可能(冪等キー必須) - 補償トランザクションも冪等(二重実行で同じ結果) - SagaログをDBに永続化(クラッシュ後の再開) ### タイムアウト - 各ステップに最大待機時間(例: 30秒) - タイムアウト時は自動補償開始 - SagaID単位でステータスを追跡 Saga実装の生成 Sagaパターンを設計してください。 要件: - オーケストレーション型Saga - 補償トランザクション - 冪等なステップ実行 - Sagaログ永続化 生成ファイル: src/saga/ 生成されるSaga実装 // src/saga/sagaOrchestrator.ts — Sagaオーケストレーター export interface SagaStep<TContext> { name: string; execute: (context: TContext, sagaId: string) => Promise<TContext>; compensate: (context: TContext, sagaId: string) => Promise<void>; timeoutMs?: number; } export interface SagaLog { sagaId: string; stepName: string; status: 'executing' | 'completed' | 'compensating' | 'compensated' | 'failed'; context: unknown; executedAt: Date; completedAt?: