変更履歴
MBC CQRS Serverlessのすべての注目すべき変更がここに記録されています。このプロジェクトはセマンティックバージョニングとConventional Commitsに従っています。
バージョン体系
x.y.z- 本番リリースx.y.z-beta.n- テスト用ベータリリースx.y.z-alpha.n- 早期アクセス用アルファリリース
安定版リリース (1.x)
1.2.5 (2026-04-10)
新機能
- import: ZIPインポート処理をリファクタリング — ZIPジョブ処理を
ImportServiceに直接統合し、独立したZipImportQueueEventHandlerを削除 (詳細を見る) (PR #404)ZipImportQueueEventHandlerを削除。ZIPインポートジョブはImportService内で直接処理されるように変更ImportEventHandlerがZIP_MASTER_JOBイベントに対してSQSパブリッシュをスキップするように変更CreateZipImportDtoのZIPインポートバリデーションを強化- ZIP処理のエラーハンドリングとロギングを改善
- mcp-server:
mbc_check_anti_patternsツールにAP016〜AP020のアンチパターン検出器を追加(合計20パターン) (PR #403)- AP016: リスロー前のエラーロギング欠落(High)
- AP017: 部分更新時の属性マージ誤り(High)
- AP018: Swaggerドキュメント /
@ApiTags欠落(Low) - AP019: リストクエリのページネーション欠落(High)
- AP020: トレーシング用
getCommandSource欠落(Low)
- mcp-server:
mbc-migrateとmbc-debugスキルをv1.1.x・v1.2.x破壊的変更ガイドで更新 (PR #403)
依存 関係
- mcp-server:
@modelcontextprotocol/sdkを1.26.0から1.29.0に更新 (PR #403)
1.2.2 (2026-04-08)
バグ修正
- import:
CsvBatchProcessorにSmart Retryパターンを実装してHead-of-Line Blocking(Poison Pill)を修正 (詳細を見る) (PR #394)- 以前は、先頭行に永続的なバリデーションエラーがあるとバッチ全体が即座にクラッシュしていた
- 各行を独立して処理し、エラーを蓄積してバッチ終了後に集約エラーをスローするよう修正
- 有効な行は正常に保存、失敗行はSQSリトライをトリガー、成功済み行はEQUAL比較でスキップ(冪等性維持)
- import:
ImportQueueEventHandlerがSingleImportProcessorに生のSQSペイロードを渡していた問題を修正 (PR #394)singleImportProcessor.process()にevent.payload(生のSQSペイロード)ではなくevent.importEvent(パース済みオブジェクト)を渡すよう修正
1.2.1 (2026-04-06)
新機能
- core: SQSメッセージ操作のための
SqsServiceとSqsClientFactoryを追加 (詳細を見る) (PR #383)sendMessage()— SQSキューへ単一メッセージを送信sendMessageBatch()— 1回のAPIコールで最大10件のメッセージを送信receiveMessages()—MaxNumberOfMessages(デフォルト: 10)とWaitTimeSeconds(デフォルト: 0)を設定可能なメッセージ受信deleteMessage()— 処理済み単一メッセージの確認・削除deleteMessageBatch()— 1回のAPIコールで最大10件のメッセージを削除SqsServiceはQueueModule(グローバル)に登録され、アプリケーション全体でインジェクション可能- システム属性受信のための
MessageSystemAttributeNamesをサポート(廃止済みのAttributeNamesは非公開)
- core:
SnsClientFactoryをシングルトンSNSClientインスタンス方式にリファクタリング (PR #383)- 以前はトピックARNごとに個別クライアントをキャッシュしていたが、全publishコールでシングルインスタンスを共有するように変更
getClient()のシグネチャがgetClient(topicArn: string)からgetClient()に変更
1.2.0 (2026-04-02)
破壊的変更
- core:
publishSync()とpublishPartialUpdateSync()がコマンドに変更がない場合(no-op)にnullを返すように変更 (詳細を見る) (PR #375)- 戻り値の型が
Promise<CommandModel>からPromise<CommandModel | null>に変更 publishAsync()およびpublishPartialUpdateAsync()の既存の挙動に統一- 移行方法: 戻り値のプロパティにアクセスする前にnullチェックを追加
- 戻り値の型が
- sequence:
SequenceService.genNewSequence()が削除 (詳細を見る) (PR #375)- 代わりに
generateSequenceItem()またはgenerateSequenceItemWithProvideSetting()を使用
- 代わりに
新機能
- core:
SessionServiceとRepositoryによるRead-Your-Writes(RYW)一貫性を追加 (詳細を見る) (PR #375)publishAsync後、DynamoDB Streamの同期が完了する前でも同一ユーザーの後続読み取りがペンディングコマンドデータを返すように- オプトイン:
RYW_SESSION_TTL_MINUTES環境変数を設定して有効化(例:5) CommandModule/@mbc-cqrs-serverless/coreからRepositoryクラスをエクスポート —getItem・listItemsByPk・listItemsでRYWマージを提供- セッションテーブル
{NODE_ENV}-{APP_NAME}-sessionを作成する必要あり(dynamodbs/session.json参照) RYW_SESSION_TTL_MINUTES未設定時は無効 — 既存プロジェクトへの影響なし
- mcp-server: v1.2.0破壊的変更向けのAP013・AP014アンチパターン検出を追加 (PR #377)
- AP013: nullチェックなしで
publishSync/publishPartialUpdateSyncの戻り値を使用するパターンを検出 - AP014: 廃止された
genNewSequence()の使用を検出 migration_guideプロンプトにv1.2.0セクションを追加
- AP013: nullチェックなしで
バグ修正
- import: ZIPオーケストレーターのインポートステータス処理を修正 (PR #370)
ImportStatusHandlerがジョブ失敗時にimportJobStatusを含むタスク成功を送信するように修正ZipImportSfnEventHandlerがCSVタスクの失敗数を集計し最終ジョブステータスを調整
1.1.5 (2026-03-28)
新機能
- import: 大規模CSVインポート向けv2バッチ処理アーキテクチャを実装 (詳細を見る) (PR #366)
- 行ごとの
import_tmp書き込みをLambda内直接コマンドパブリッシュに置き換え、Hot Partitionボトルネックを解消 - Distributed Mapを
MaxItemsPerBatch: 100・MaxConcurrency: 50に設定し、スループットを大幅向上 - 新しい
finalize_parent_jobステートがバッチサマリーを集約し、DynamoDBUpdateItemを1回だけ呼び出して最終ステータスを書き込む CommandFinishedHandlerから行ごとのアトミックカウンター更新を削除し、大規模時のDynamoDBスロットリングを解消ImportEntityProfileにImportPublishModeenum(SYNC/ASYNC)を追加し、エンティティごとのパブリッシュモード設定を可能に- 空の
processingResultsガードを追加: バッチ結果が受信されない場合はジョブをFAILEDとしてマーク
- 行ごとの
破壊的変更
- import: CSVインポートでリアルタイムの行レベル進捗追跡が廃止 (詳細を見る)
processedRows・succeededRows・failedRowsカウンターはStep Functions実行完了時に一括集計されるように変更- 個別のCSV行は
import_tmpDynamoDBテーブルに書き込まれなくなった import-csvステートマシンに新しいfinalize_parent_jobステートとresultPath: '$.processingResults'が必要 — CDKとserverless.ymlをこのパッケージと同時に更新すること
テスト
ImportQueueEventHandlerのSYNC/ASYNCルーティングテストを追加(EQUAL/NOT_EXIST/CHANGED × SYNC/ASYNC + フォールバックの6テストケース)CsvImportSfnEventHandlerの空processingResultsガードテストを追加- バッチ集計テストを追加(1,000 + 500行、COMPLETEDおよびFAILEDシナリオ)
1.1.4 (2026-03-27)
新機能
- core:
publishSyncの監査証跡とHistoryテーブルの一致を復元 (詳細を見る) (PR #363)publishSyncがstatus: 'publish_sync:STARTED'とsyncMode: 'SYNC'でCommandテーブルに不変イベントを書き込むようにpublishSyncがHistoryテーブルに書き込むようになり、非同期Step Functionsパイプラインと一致- コマンドライフサイクルが
publish_sync:STARTED→finish:FINISHED(エラー時はpublish_sync:FAILED)に publishAsyncからisNotCommandDirty早期リターン最適化を移植 — 変更なしの場合はnullを返す- DynamoDB Stream フィルターを更新し
syncMode=SYNCレコードを除外、Step Functionsの二重実行を防止 DefaultEventFactoryもローカル開発環境向けにsyncMode=SYNCレコードをフィルタリング
テスト
publishSyncの監査証跡とHistory一致の包括的なテストを追加
1.1.3 (2026-03-24)
バグ修正
- import: CSVインポートのDistributed Mapステート結果が256KB制限を超える問題を修正 (詳細を見る) (PR #348)
- Distributed Mapに
resultPath: DISCARDを設定し、子実行結果がステートデータに集約されることを防止 CsvImportSfnEventHandlerからMapResult依存を削除し、代わりにS3からcountCsvRows()を使用- S3ストリームが読み取れない場合のエラーハンドリングを追加
- Distributed Mapに