できない.dev

Prisma で「@prisma/client did not initialize yet」が解決できない(prisma generate 未実行)

Prisma Client がまだ生成されていないと @prisma/client did not initialize yet が出る。
スキーマ変更後やデプロイ時の依存インストール後に prisma generate を実行し、生成物を最新化すれば解消する。

#prisma#generate#client

公開:

要約

@prisma/client did not initialize yet. Please run "prisma generate" は、Prisma Client のコードがまだ生成されていない状態でクライアントを import したときに出る。

Prisma はスキーマ(schema.prisma)から型付きクライアントを prisma generate で生成する設計のため、生成ステップが抜けると初期化前として弾かれる。

スキーマ変更後やデプロイ時の依存インストール後に prisma generate公式: Generating Prisma Client)を走らせれば解消する。

よくある原因

  1. schema.prisma を変更した後に prisma generate を実行していない。
  2. デプロイや CI で依存をインストールしただけで generate が走らず、生成物が存在しない。
  3. monorepo やカスタム output 設定で、生成物の出力先と import 元がずれている。
  4. Docker ビルド時に generate せず本番起動している。

なお Prisma ORM v7 以降は generator の output 指定が必須になり、import 元が生成先パスへ変わる点にも注意する。

解決策

1. prisma generate を実行する

npx prisma generate

スキーマを変更したら毎回必要になる。

2. postinstall / build に組み込む(デプロイ対策)

{
  "scripts": {
    "postinstall": "prisma generate",
    "build": "prisma generate && next build"
  }
}

Vercel や AWS Lambda などは依存キャッシュを復元するだけで generate が走らないことがあるため、ビルド前に明示する。

3. Docker では COPY 後に generate する

COPY prisma ./prisma
RUN npx prisma generate

この記事は役立ちましたか?