変更履歴
MBC CQRS Serverlessのすべての注目すべき変更がここに記録されています。このプロジェクトはセマンティックバージョニングとConventional Commitsに従っています。
バージョン体系
x.y.z- 本番リリースx.y.z-beta.n- テスト用ベータリリースx.y.z-alpha.n- 早期アクセス用アルファリリース
安定版リリース (1.x)
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に
CI/CD
- npm OIDC trusted publishingに切り替え、
NPM_TOKENシークレットへの依存を排除 (PR #357)- 組み込みOIDCサポートのためlernaをv8からv9にアップグレード
- publishジョブに
id-token: writeパーミッションを追加 - Node 22+互換性のためlockfile同期ステップを追加
テスト
CsvImportSfnEventHandlerのfinalize_parent_jobロジックの包括的なテストを追加- failedRows > 0の場合のFAILEDステータスをテスト
- 全行成功時のCOMPLETEDステータスをテス ト
- 処理が未完了の場合にステータスが更新されないことをテスト
- S3ストリームが読み取れない場合のエラーハンドリングをテスト
1.1.2 (2026-02-25)
新機能
- master: マスター設定とデータのビルトインupsertメソッドを追加 (詳細を見る)
- MasterSettingService用の
upsertTenantSetting()、upsertSetting()、upsertBulk() - MasterDataService用の
upsert()、upsertSetting()、upsertBulk() - 新規レコードの作成、変更レコードの更新、未変更レコードのスキップを自動的に行う
- ソフト削除されたレコードの再作成をサポート
- MasterSettingService用の
- master: 統合バルクupsert API(
/api/master-bulk/)を追加 (詳細を見る)- 設定とデータの両方を処理する単一エンドポイント
settingCodeフィールドの有無でアイテムをルーティング- レスポンスで元の入力順序を保持
- テナントコードバリデーションを適用
- master: すべてのバルクDTOに
@ArrayMaxSize(100)バリデーションを追加 - master: 個別のバルク エンドポイント(
/api/master-setting/bulk、/api/master-data/bulk)にテナントコードバリデーションを追加
バグ修正
- core:
checkVersionのエラーメッセージが実際のcommandVersionではなくハードコードされた値を使用していた問題を修正 (PR #331) - master:
createSettingでseq === 0がfalsyとして扱われる問題をnullチェック(seq == null)に変更して修正 - master:
createSettingでseq変更前にattributesをクローンしてDTOミューテーションを修正
テスト
- MasterBulkControllerの包括的なユニットテストを追加(8テストケース)
- MasterDataServiceのupsertおよびupsertBulkメソッドのユニットテストを追加
- MasterSettingServiceのupsertTenantSettingおよびupsertBulkメソッドのユニットテストを追加
- マスターデータと設定のupsertシナリオの統合テストを追加
1.1.1 (2026-02-07)
バグ修正
- cli: 不足していた
import_tmp.jsonDynamoDBテーブルテンプレートを追加 (詳細を見る) (PR #323)- CLIテンプレートに
import_tmpテーブル定義が含まれておらず、npm run offline:slsが失敗していました serverless.ymlが参照するLOCAL_DDB_IMPORT_TMP_STREAM環境変数は、マイグレーション時にテーブルが作成される必要があります- 以前のバージョンを使用している場合の回避策はよくある問題を参照
- CLIテンプレートに
1.1.0 (2026-02-03)
破壊的変更
- tenant:
TENANT_COMMONのenum値を'COMMON'から'common'(小文字)に変更- この変更はパーティションキーのフォーマットに影響します:
TENANT#COMMON→TENANT#common - マイグレーション必須:
TENANT#COMMONパーティションキーを持つ既存データの移行が必要です - 詳細な手順はマイグレーションガイドを参照してください
- この変更はパーティションキーのフォーマットに影響します:
- core: 非推奨の
CommandService.publish()メソッドを削除 (詳細を見る)- 代わりに
CommandService.publishAsync()を使用してください
- 代わりに
- core: 非推奨の
CommandService.publishPartialUpdate()メソッドを削除- 代わりに
CommandService.publishPartialUpdateAsync()を使用してください
- 代わりに
- sequence: 非推奨の
SequencesService.genNewSequence()メソッドを削除- 代わりに
SequencesService.generateSequenceItem()を使用してください
- 代わりに
新機能
- core: 大文字小文字を区別しないマッチングのためのテナントコード正規化を追加 (詳細を見る)
- テナントコードは自動的に小文字に正規化されるようになりました
getUserContext()は正規化されたテナントコードを返します- すべてのDynamoDB操作は一貫性のため正規化されたテナントコードを使用します
- core: 明示的な正規化のための
normalizeTenantCode()ユーティリティ関数を追加 - core: 共通テナント検出のための
isCommonTenant()ユーティリテ ィ関数を追加 - core: AWS SESメールのカテゴリ分けとフィルタリング用EmailTagsサポートを追加 (詳細を見る)
EmailNotificationインターフェースに新しいemailTagsオプション- タグはSESに渡されメールのカテゴリ分けとトラッキングに使用
- core: RolesGuardに拡張可能なテナント検証を追加 (詳細を見る)
isHeaderOverride(): ヘッダーベースのテナントオーバーライドを検出canOverrideTenant(): クロステナントアクセスの権限をチェックgetCommonTenantCodes(): 設定可能な共通テナントリストgetCrossTenantRoles(): 設定可能なクロステナントロール(デフォルト: 'system_admin')
- cli: スキル更新用のnpmレジストリバージョンチェックを追加
- ローカルのpackage.jsonではなくnpmレジストリから最新バージョンを取得
- ネットワークリクエストを削減するための24時間キャッシュ
- オフライン時はキャッシュバージョンにフォールバック
セキュリティ
- core: テナントコードヘッダーオーバーライドをシステム管理者のみに制限
- 以前は
custom:tenantCognito属性のないユーザーがヘッダー経由で任意のテナントを指定可能でした - 現在はグローバル
system_adminロールを持つユーザーのみがx-tenant-codeヘッダーでテナントコードをオーバーライド可能 - 一般ユーザーはCognitoで
custom:tenantを設定する必要があります
- 以前は
バグ修正
- master: MasterSettingServiceとMasterDataServiceでの
TENANT_COMMON定数の使用を修正- 以前ハードコードされていた
'COMMON'文字列はSettingTypeEnum.TENANT_COMMONを使用するようになりました - フレームワーク全体で一貫したパーティションキー生成を保証
- 以前ハードコードされていた
テスト
- tenant: TenantServiceメソッドの包括的なテストを追加
getTenant(): 取得テストupdateTenant(): 更新と属性マージテストdeleteTenant(): ソフト削除テストaddTenantGroup(): グループ管理テストcustomizeSettingGroups(): 設定カスタマイズテストcreateTenantGroup(): テナントグループ作成テスト
- tenant: SettingTypeEnum検証テストを追加
TENANT_COMMON = 'common'(小文字)を検証- enumの完全性と一貫性を保証
- core: テナントコード正規化テストを追加(70件以上のテストケース)
- core: テナント正規化コマンドテストを追加(30件以上のテストケース)
- core: 包括的な依存関係統合テストを追加(3400以上のテスト)
- AWS SDK統合テスト(DynamoDB、S3、SNS、SQS、Step Functions、SES)
- NestJS動作テスト(デコレーター、設定、DI、Swagger)
- サードパーティライブラリテスト(class-transformer、class-validator、RxJS)
ドキュメント
- v1.1.0テナントコード変更のマイグレーションガイドを追加
1.0.26 (2026-01-26)
新機能
- cli: 環境変数によるローカルサービスポートの設定機能を追加 (詳細を見る) (PR #300)
LOCAL_HTTP_PORT、LOCAL_DYNAMODB_PORT、LOCAL_RDS_PORTなどのポート変数をサポート- 他のサービスとのポート競合を解決可能に
- 設定はDocker Compose、Serverless Offline、トリガースクリプトに自動的に適用
セキュリティ
- セキュリティ修正のため
diffパッケージを4.0.2から4.0.4に更新 (PR #297, PR #299) - プロトタイプ汚染修正のため
lodashパッケージを4.17.21から4.17.23に更新 (PR #298)
1.0.25 (2026-01-19)
新機能
- core: 高度な変数置換によるインラインテンプレートメールの機能強化 (詳細を見る)
- ネストプロパティアクセスのサポート(例:
{{user.profile.name}}) - テンプレート変数でのUnicode/日本語キーのサポート
- プレースホルダー内の空白トリミング(例:
{{ name }}は{{name}}と同等) - テンプレートコンパイルのローカル開発フォールバック機能の改善
- ネストプロパティアクセスのサポート(例:
1.0.24 (2026-01-17)
新機能
- mcp-server: ガイド付き開発支援のためのClaude Code Skillsを追加 (詳細を見る)
/mbc-generate: ボイラープレートコードを生成(モジュール、サービス、コントローラー、DTO、ハンドラー)/mbc-review: ベストプラクティスとアンチパターン(20パターン)のコードレビュー/mbc-migrate: バージョン移行と破壊的変更のガイド/mbc-debug: 一般的な問題のデバッグとトラブルシューティング- Skillsはnpmパッケージ経由で配布され、
~/.claude/skills/または.claude/skills/にインストール可能
- cli: 簡単なskillsインストールのための
mbc install-skillsコマンドを追加 (詳細を見る)- skillsを個人ディレクトリ(
~/.claude/skills/)またはプロジェクトディレクトリ(.claude/skills/)にインストール - オプション:
--project,--force,--list
- skillsを個人ディレクトリ(