Blitzjs 0.25 -> 0.29へのupgrade

3 min read読了の目安(約3100字

Breaking Change

0.28

isAuthorizedのAPI変更

// blitz.config.js
-const { sessionMiddleware, unstable_simpleRolesIsAuthorized } = require("@blitzjs/server")
+const { sessionMiddleware, simpleRolesIsAuthorized } = require("@blitzjs/server")

module.exports = {
  middleware: [
    sessionMiddleware({
-      unstable_isAuthorized: unstable_simpleRolesIsAuthorized,
+      isAuthorized: simpleRolesIsAuthorized,
    }),
  ],

0.29

Prisma 2.13+ Supportに伴うDBのmigrate

これがデカイです・・・。
Prismaが2.13バージョンを発表しました
Prisma自体がseedに対応したり、findFirstのAPIが提供されたりと、大幅な変更がされてました。
blitz.jsコミュニティはこの変更を受け止め、CLIのインタフェースをPrismaに合わせることにしました。[1]

以上により、Prismaのmigrateが必要です。

公式documentに沿って実行します。

1) introspect

blitz@0.29ではblitz prismaprismaコマンドになります。

introspectは次のように実行します。

$ blitz prisma introspect

prisma introspectで実行するとenvファイルが読み込まれないので注意です。

Introspecting based on datasource defined in db/schema.prisma …
Error: Error in datamodel: ErrorCollection { errors: 
[EnvironmentFunctionalEvaluationError 
{ var_name: "DATABASE_URL", span: Span { start: 155, end: 174 } }] }
Introspecting based on datasource defined in db/schema.prisma …

✔ Introspected 11 models and wrote them into db/schema.prisma in 164ms

*** WARNING ***

These DateTime fields were enriched with `@updatedAt` information taken from the previous Prisma schema.
- Model "Hoge", field: "updatedAt"
...

Run prisma generate to generate Prisma Client.

blitz prisma migrate devが実行できない

私の場合、blitz@0.23 or @0.25 を使っていたので、myapp/package.json@prisma/cli2.7.1でした。

最新を取り込みます。

手っ取り早く、blitz new myAppName(blitz@0.29.2)で生成されたpackage.jsonをmyapp@package.jsonコピペします。

"@prisma/cli": "~2.14",
"@prisma/client": "~2.14",
"blitz": "0.29.2",
"react": "0.0.0-experimental-3310209d0",
"react-dom": "0.0.0-experimental-3310209d0",
"react-error-boundary": "3.1.0",
"typescript": "4.1.3",
"zod": "1.11.11"

@prisma/cliが更新されました。

2) If you have a prisma/migrations folder, delete, move, rename, or otherwise archive this folder.

db/migrationsを削除、もしくは別フォルダに退避しましょう。

3) Initialize a new migration history by running the following command:

migrateを実行します。

$ prisma migrate dev --preview-feature

実行ユーザーに権限が足りない場合は、次のようなエラーがでます。
これは内部的にshadow databaseを作成するためです。


Error: A migration failed when applied to the shadow database:

P3014
Prisma Migrate could not create the shadow database. Please make sure the database user has permission to create databases.  More info: https://pris.ly/d/migrate-shadow. Original error: Error code: P1010

こちらを参考に権限を調整後、再度実行しましょう。

お疲れ様デス・・・!

僕の場合これで移行が完了しました。

seedが失われたのはでかいですが、featureとして実装予定なので気長に待ちましょう!


脚注
  1. https://github.com/blitz-js/blitz/discussions/1611 ↩︎