🐷

VercelにNextjsアプリをデプロイしようとしたらPrismaClientInitializationErrorが発生した

2024/02/20に公開

はじめに

個人開発のNextjsアプリケーションをVercelにデプロイしようとした際に発生したエラーの内容と解決方法を備忘録として残しておきます。

発生したエラー

今回はPrismaClientInitializationErrorというエラーが発生しました。

PrismaClientInitializationError: Prisma has detected that this project was built on Vercel, which caches dependencies. This leads to an outdated Prisma Client because Prisma's auto-generation isn't triggered. To fix this, make sure to run the `prisma generate` command during the build process.

日本語訳

PrismaClientInitializationError: Prismaは、このプロジェクトが依存関係をキャッシュするVercelでビルドされたことを検出しました。Prismaの自動生成がトリガーされないため、Prismaクライアントが古くなります。これを修正するには、ビルドプロセス中に prisma generate コマンドを実行するようにしてください。

なぜ発生したか

以下のVercelのドキュメントが参考になりました。
https://www.prisma.io/docs/orm/more/help-and-troubleshooting/help-articles/vercel-caching-issue

Prisma ORMは依存関係がインストールされた際にPrisma Clientを生成するためインストールhookを使用していますが、
Vercelではビルドの高速化のために、ビルド時にモジュールをキャッシュしており最初のデプロイ以降はインストールhookが実行されないことが原因でした。

解決方法

Vercelのビルドログを見てみるとnpm scriptのbuildが実行されていることがわかったため、next buildをする前にprisma generateを実行することでエラーが解消されました。

{
  "script": {
    "build": "prisma generate && next build"
  }
}
GitHubで編集を提案

Discussion