PrismaをNext.jsで使うときのベストプラクティス
問題
Prismaのクライアントは初期化時にDBとの接続を行うが、Next.jsでの開発時のホットリロードでこれが何度も初期化されてしまう
解決策
開発時はPrismaClientインスタンスをglobal下に保存する
code:db.ts
import { PrismaClient } from "@prisma/client";
// add prisma to the NodeJS global type
interface CustomNodeJsGlobal extends NodeJS.Global {
prisma: PrismaClient;
}
// Prevent multiple instances of Prisma Client in development
declare const global: CustomNodeJsGlobal;
const prisma = global.prisma || new PrismaClient();
if (process.env.NODE_ENV === "development") global.prisma = prisma;
export default prisma;
つまり
開発時は最初に一度だけ初期化して以降はglobalから再利用
それ以外は常に初期化