Guide/guides
Guren アップグレードガイド
マイナーバージョン間のアップグレード時に使用する手順です。
Guren アップグレードガイド
マイナーバージョン間のアップグレード時に使用する手順です。
必須アップグレード手順
CHANGELOG.mdとリリースノートを確認docs/ja/guides/release-policy.mdの互換性マトリクスを確認- 依存更新と生成物再生成
bun install
bunx guren codegen
- 検証実行
bun run build
bun run typecheck
bun run test
- 対象バージョンの移行メモを適用
移行メモ
rc → 1.0.0
厳格なマスアサインメント
- 何が変わったか:
fillableを定義したモデルで、許可リスト外のフィールドをcreate()/update()に渡すとMassAssignmentExceptionがスローされるようになりました。以前は余分なフィールドは黙って破棄されていました。 - 誰に影響するか: フィルタリングしていないオブジェクト(スプレッドしたリクエストボディ、マージしたデフォルト値など)を
create()/update()に渡しているコード。 - 移行方法: 許可リスト内のフィールドだけを渡すか、シーダーやシステムレコードなど信頼できるサーバーサイドのデータには
forceCreate()/forceUpdate()を使用してください。特定のモデルで以前の破棄挙動に戻したい場合はstatic strictFillable = falseを設定します。
// Before: authorId silently dropped when not in fillable
await Post.create({ ...data, authorId: user.id })
// After: either add authorId to fillable, or use forceCreate for trusted data
await Post.forceCreate({ ...validated, authorId: user.id })
認証ユーザーレコードのサニタイズ
- 何が変わったか:
auth.user()の返すオブジェクトに、パスワードカラム、remember トークンカラム、モデルのstatic hiddenに列挙したフィールドが含まれなくなりました。 - 誰に影響するか: 認証済みユーザーオブジェクトからこれらのフィールドを読み取っていたコード。
- 移行方法: 生のレコードが必要なまれなサーバーサイド処理では、モデルを明示的にロードしてください(例:
User.findOrFail(user.id))。
SSE ブロードキャスティング
- 何が変わったか: 認可関数が未登録の
private-/presence-チャンネルはデフォルトで拒否されるようになりました。また、購読には SSE のconnectedイベントで配信されるclientIdが必要です。 - 誰に影響するか: SSE ブロードキャスティングエンドポイントを使用しているアプリ。
- 移行方法:
broadcast.privateChannel()/broadcast.presenceChannel()で認可関数を登録し、connectedイベントからclientIdを取得してPOST /broadcasting/authに送信すると、認可と購読が 1 回のリクエストで行われます。詳細はブロードキャスティングガイドを参照してください。
アップグレードの検証:
bun run typecheck && bun run test
破壊的変更テンプレート(今後のリリース用)
各項目で次を記載します。
- 何が変わったか
- なぜ変えたか
- 誰に影響するか
- Before/After のコード例
- 1コマンドでの確認手順