Prisma 5がリリースされたよ
はじめに
普段、仕事でも使用しているPrismaの新バージョンPrisma 5がリリースされました。
その変更点を簡潔にまとめてみます。
プレビューから一般提供になった機能
次の機能がプレビューから一般提供になり、デフォルトで使用可能になりました。
jsonProtocol
Prisma Clientとクエリエンジンの間でjsonProtocol
がデフォルトで使用されるようになりました。
以前は、GraphQLライクなプロトコルが使われていましたが、スキーマが大きい場合にCPUとメモリの消費が大きく、パフォーマンスのボトルネックとなる問題がありました。
JSONベースのワイヤープロトコルの導入により、特にコールドスタートのリクエストにおいて、通信が大幅に効率化されるようになりました。
同じテーブルのカラム同士の比較
同じテーブルのカラム同士を比較することが可能になりました。
例えば、以下のクエリは商品の数量の(quantity)が警告の値(warnQuantity)に達したレコードを取得します。
await prisma.product.findMany({
where: {
quantity: { lte: prisma.product.fields.warnQuantity }
},
})
ユニークなレコードの取得におけるユニークではないカラムでのフィルタリング
findUnique
、update
、delete
など、ユニークなレコードを操作するクエリのwhere
句に、ユニークでない列を使用することが可能になりました。
例えば、以下のようなモデルがあった場合、バージョンによるフィルタリングを以前はできませんでした。
model Article {
id Int @id @default(autoincrement())
content String
version Int
}
Prisma 5からは、バージョンのようなユニークでないカラムでもフィルタリングを行うことが可能になりました。
await prisma.article.findUnique({
where: {
id: 5,
version: 1 // filter on the `version` field was not available before Prisma 4.5.0
},
});
依存関係のバージョンの変更
Prismaが必要とするNode.js、TypeScirpt、PostgreSQLの最小バージョンが更新されました。
- Node.js 16.13.0 以上
- TypeScript 4.7 以上
- PostgreSQL 9.6 以上
また、PrismaClient内部のSQLiteのバージョンが3.41.2に上がりました。
修正が必要な変更点
次の変更があったので、必要に応じてコードを修正する必要があります。
対応について詳細はPrisma 5へのアップレードガイドを参照してください。
配列のショートカットの削除
Prisma 4までは、配列を指定する場面で要素が単一の場合、配列ではなく要素を直接指定できました。
しかし、型付けの一貫性のために、Prisma 5からは要素が1つでも必ず配列で渡さなければいけなくなりました。
Prisma 5で削除されたショートカットは以下の通りです。
-
OR
演算子のショートカット -
in
演算子、notIn
演算子のショートカット - PostgreSQLのJSON
path
フィールドのショートカット - スカラーリストのショートカット
- MongoDBのコンポジットタイプのショートカット
以下はOR
演算子の例です。
await prisma.user.findMany({
where: {
- OR: { email: 'alice@prisma.io' }
+ OR: [{ email: 'alice@prisma.io' }]
}
})
runtime/index.js
の削除
Prisma ClientのPrisma 5では、Prisma Clientからruntime/index.js
が削除されました。
@prisma/client/runtime
をimportしている場合、以下のような修正が必要です。
- import { Decimal } from '@prisma/client/runtime'
+ import { Prisma } from '@prisma/client'
// Usage update of Prisma Client's utilities
- Decimal
+ Prisma.Decimal
非推奨の項目の削除
以下の非推奨の項目が削除されました。
- Prisma Client
-
rejectOnNotFound
パラメータの削除
-
- Prisma CLI
- 非推奨なフラグの削除
--preview-feature
-
--experimental
と--early-access-feature
--force
-
--experimental-reintrospection
と--clean
- 非推奨なフラグの削除
- Prisma Schema
-
experimentalFeatures
ジェネレータプロパティの削除
-
- その他
-
prisma2
という名前の実行ファイルを削除
-
その他の変更
その他、以下の変更がありました。
- CockroachDBに接続する場合は
cockroachdb
プロバイダの使用が必須になった-
postgresql
でも接続できていたのは廃止
-
- ライブラリのクエリエンジンの
beforeExit
フックの削除- 代わりにNode.jsの終了イベントを使用する
-
migration-engine
をschema-engine
に名前を変更- 大半のユーザーには影響ない変更
- serverless.ymlのpackageの指定など、一部のケースで影響を受ける場合がある
おわりに
jsonProtocol
の採用によるパフォーマンス向上はうれしいですね。
同じテーブルのカラム同士の比較やユニークではないカラムでのユニークな項目の取得も、そのうち使う場面が出てきそうです。
既存の実装への影響範囲を確認しつつ、積極的にアップデートしたいと思います。
Discussion