[Update] MBC CQRS サーバーレス フレームワーク v1.8.0 をリリース
Technology
Nov 15, 2026
MBC CQRS サーバーレス フレームワーク v1.8.0 をリリースしました。今回のリリースでは、マスターパッケージ(@mbc-cqrs-serverless/master)にシステム単位のアクセス制御と、組み込みルートを保護するコントローラー認可を追加しました。複数のシステムで 1 つのマスターデータを共有しながら、システムごと・設定ごとに読み書きできる範囲を分けられます。あわせて、マスターコピーと MySQL での検索の不具合を修正しました。
マスターパッケージを使っているすべてのアプリケーションで挙動が変わります。キーの検証が厳しくなり、# や @ を含むコードなどは 400 で拒否されます。アップグレード前に、下記の「アップグレード時の注意」と移行ガイドをご確認ください。
主な変更点
新機能
- システム単位のアクセス制御: マスター設定に
systemIdを持たせられるようになり、そのデータ行は設定のsystemIdを引き継ぎます(sharedはすべてのシステムが受け取るデータ用に予約されています)。@MasterAccessResolver()を付けたクラスを 1 つ登録すると、システムごと・設定ごとに読み取りと書き込みを許可できます。サービスはすべてのメソッドで権限をチェックし、一覧は SQL のクエリ内で絞り込むため、ページネーションと総件数も正しく保たれます。 - コントローラー認可(
controllerAuth): 組み込みのマスタールートを保護するオプトインのモジュールオプションです。読み取りにはreadのロール(既定はログイン済みの任意のユーザー)、書き込みにはwriteのロール(既定はsystem_admin)が必要で、呼び出し元のテナント以外は扱えません。設定しない場合、ルートは従来どおり保護されず、起動時に警告がログに出ます。mbc newで作成する新しいプロジェクトでは、controllerAuth: {}が最初から有効です。 - UI・運用向けの機能: アクセス制御の有無と呼び出し元の権限を返す
GET /api/master-access、既存データにsystemIdを付けるMasterSettingService.assignSystem、共通テナントの行を一覧に含めるincludeCommonを追加しました。 - モジュールオプション: 共通マスターデータを持つテナントを指定する
commonTenantCode(既定common)、マスターコピーのハンドラーを登録するenableCopyTask、データベースを指定するdatabaseProvider(postgresql/mysql。既定では Prisma クライアントから自動検出)を追加しました。 - RDS: プロジェクトテンプレートの RDS マスターテーブルに NULL 許容の
system_idカラムを追加し、API レスポンスのトップレベルでsystemIdを返すようにしました。
バグ修正
- マスターコピー: コピー元の設定のテナントからデータを読むようになりました(以前はハードコードされた
meltecテナントから読んでいました)。また、シーケンスがコピーされていなかった問題を修正しました。コピー先のシーケンスがコピー元より遅れている場合はコピー元の値まで進みます。書き込みは条件付きのため、その間に採番したコピー先が巻き戻されることはありません。 - MySQL での検索: master と survey-template で、名前・コード・キーワード検索が MySQL(
mbc newの既定のデータベース)で失敗していた問題を修正しました。dist ファイルをpatch-packageなどで修正していた場合は、そのパッチを外せます。 - 部分更新:
settingValueを省略した設定の更新で attributes が消えなくなりました。nameやseqを省略した更新でも、既存の値が保持されます。 - 一括書き込み: すべての一括ルートで、最初の書き込みの前に全項目のキーを検証するようになりました。無効なコードを含むリクエストで、有効な項目だけが書き込まれることはなくなりました。
アップグレード時の注意
- キーの検証: 設定コード、マスターデータの
settingCodeとcode、グループ・ユーザー設定のuserIdとgroupIdは、空であってはならず、#や@を含んではなりません。違反するリクエストは 400 になります。メールアドレスなど@を含む値をuserIdやコードに使っている連携は、アップグレード前に確認してください。 @を含む保存済みの行: v1.7.0 以前では、@を含むコードはキーが@の位置で切られて保存されていました(別の行を上書きしていた可能性があります)。キーに@が残っている行は、一覧には表示されますが、API から更新・削除できなくなります。有効なキーで作り直し、古い行は DynamoDB と RDS から直接削除してください。確認方法は移行ガイドにまとめています。- 設定行とデータ行のルート分離: 設定行は
/api/master-setting、データ行は/api/master-dataからだけ変更できるようになりました。 - マスターコピーの権限:
controllerAuthを設定している場合、POST /api/master-setting/copyにはcustom:rolesクレームのsystem_adminが必要です。 - 一括 upsert:
POST /api/master-bulkは設定を先に、データを後に書き込むようになりました。リクエスト全体はアトミックではなく、リゾルバーを登録している場合、権限のないデータ項目があると設定だけが書き込まれた状態で失敗します。部分的な書き込みが問題になる場合は、設定とデータを別のリクエストで送ってください。 - リゾルバーを使う場合: 既存のプロジェクトは RDS の
mastersテーブルにsystem_idカラムを追加し、RDS ハンドラーでsystemIdを書き込むよう変更する必要があります。サーバー側のコードから読み取りメソッドを呼ぶときは、invokeContextを渡してください。 - タスク:
GET /api/tasks/sfn-task-parentは、custom:tenantクレームをx-tenant-codeヘッダーより優先するようになりました。
ドキュメント
- ドキュメントサイトのマスターパッケージに、キーのルール、コントローラー認可、システム単位のアクセス制御、データベースプロバイダーの節を追加しました。
- GitHub リポジトリに、アクセス制御とシステムごとの同期を解説したガイドを追加しました。
- mcp-server:
mbc-migrateスキルに v1.7.0 → v1.8.0 の移行ガイドを追加し、互換性マトリックスに v1.8.0 を追加しました。
アップグレード方法
npm install @mbc-cqrs-serverless/core@1.8.0 @mbc-cqrs-serverless/master@1.8.0
ほかの @mbc-cqrs-serverless/* パッケージを使っている場合は、同じバージョンにそろえてください。新しいプロジェクトは npm i -g @mbc-cqrs-serverless/cli@1.8.0 でインストールした CLI の mbc new で作成できます。挙動の変更点と保存済みデータの確認方法は、ドキュメントサイトの「移行ガイド: v1.8.0」をご覧ください。
