[Update] MBC CQRS サーバーレス フレームワーク v1.7.0 をリリース
Technology
Nov 09, 2026
MBC CQRS サーバーレス フレームワーク v1.7.0 をリリースしました。今回のリリースでは、コマンドの受け付けを DynamoDB の条件チェックとアトミックに判定できる「コマンド受付条件(Command Admission)」を追加しました。メンテナンス中に設定の更新だけを止めたい場合などに、事前チェックとコマンド書き込みの間に生じる競合を防げます。実行時の破壊的変更はなく、新しいフックを使わないアプリケーションはコードを変更せずにアップグレードできます。
主な変更点
新機能
- core(コマンド受付条件):
CommandServiceに protected フックgetCommandAdmissionConditions(command, options)を追加しました。CommandServiceを継承したクラスでこのフックをオーバーライドし、DynamoDB のConditionCheckを返すと、コマンドの初回書き込みと同じTransactWriteItemsで一緒にコミットされます。たとえば「メンテナンスの世代番号が、リクエストを受けた時点から変わっていない場合だけ受け付ける」といった制御を、別途の事前チェックで起こる競合なしに実現できます。フックの既定値は空で、その場合は従来どおりの条件付きPutItemで書き込まれます。 - core(新しい例外): トランザクションがキャンセルされた理由に応じて、例外を分類するようにしました。受付条件のチェックが失敗した場合は
CommandAdmissionRejectedException(409)、コマンド自体の条件(バージョン競合)が失敗した場合は従来どおりConditionalCheckFailedException(409)、TransactionConflictの場合はCommandAdmissionContentionException(503)になります。フレームワークは自動でリトライしません。 - cli(インフラテンプレート):
mbc newで作成するプロジェクトの Lambda ロールにdynamodb:ConditionCheckItemを追加しました。
アップグレード時の注意
- ユニットテストのモック:
CommandServiceはコマンドの初回書き込みに、DynamoDbService.putItemではなく新しいputItemWithConditionsを使うようになりました。本物のCommandServiceを、putItemだけを持つ手書きのDynamoDbServiceモックと組み合わせているテストは失敗します。モックにputItemWithConditionsを追加してください。@golevelup/ts-jestのcreateMockによる自動モックではエラーになりませんが、putItemは呼ばれなくなるため、putItemの呼び出しを検証しているテストは失敗します。本物のDynamoDbServiceのputItemをjest.spyOnで監視しているテストは、そのまま動きます。 - IAM(フックを使う場合のみ): 受付条件のチェック対象テーブルに対して
dynamodb:ConditionCheckItemの権限が必要です。既存のプロジェクトには自動で追加されないため、Lambda ロールに手動で追加してください。 - キャパシティと競合: トランザクションでは、項目ごとに通常の 2 倍のキャパシティを消費します(キャンセルされた場合も同様です)。同じ項目を多数のコマンドが同時にチェックすると、
TransactionConflict(503)が発生する可能性があります。DynamoDB Local では再現しないため、実際の DynamoDB で想定する同時実行数での負荷試験をおすすめします。
ドキュメント
- ドキュメントサイトの CommandService にコマンド受付条件の節を、エラーカタログに新しい例外を、ユニットテストに
DynamoDbServiceのモックの書き方を追加しました。 - GitHub リポジトリに、設計を解説したガイドと、メンテナンス中の更新停止やデータ移行を実装した実行可能なサンプルを追加しました。
- mcp-server:
mbc-migrateスキルに v1.6.0 → v1.7.0 の移行ガイドを追加し、互換性マトリックスに v1.7.0 を追加しました。
アップグレード方法
npm install @mbc-cqrs-serverless/core@1.7.0
ほかの @mbc-cqrs-serverless/* パッケージを使っている場合は、同じバージョンにそろえてください。新しいプロジェクトは npm i -g @mbc-cqrs-serverless/cli@1.7.0 でインストールした CLI の mbc new で作成できます。テストのモックや IAM の変更点は、ドキュメントサイトの「移行ガイド: v1.7.0」をご覧ください。
