「@prisma/client did not initialize yet」エラー|Prisma Client の生成先と import 先が異なる場合の原因と対策

IT Study

prisma generate を実行したにもかかわらず、以下のエラーが表示されて困っていませんか?

@prisma/client did not initialize yet.
Please run "prisma generate" and try to import it again.

一見すると「prisma generate を実行すれば解決する」と思ってしまいますが、generate を実行しても同じエラーが発生しました。

原因はPrisma Client の生成先がPrisma Client の生成先と、コードから読み込もうとしている場所が一致していないことでした。


開発環境

今回の開発環境は以下のとおりです。

  • Next.js
  • Prisma 6.19.3
  • @prisma/client 6.19.3
  • NextAuth.js
  • @next-auth/prisma-adapter 1.0.7
  • Neon PostgreSQL

NextAuth.js と Prisma Adapter を使用して、Google ログインの認証機能を実装しています。


エラーが発生した背景

Prisma Schema に NextAuth.js 用の認証モデルを追加した後、Prisma Adapter と Prisma Client を接続するために lib/prisma.ts を作成しました。

import { PrismaClient } from "@prisma/client";

const prisma = new PrismaClient();

export default prisma;

このファイルで PrismaClient を読み込み、NextAuth.js の設定から Prisma Adapter に渡す構成にしています。

その後、NextAuth.js のログイン API を確認するため、

http://localhost:3000/api/auth/signin

にアクセスしました。

すると、HTTP 500 エラーが発生し、ターミナルには以下のエラーが表示されました。


最初に確認したこと

エラーメッセージには、

Please run “prisma generate”

と書かれていたため、まず Prisma Client を生成しました。

npx prisma generate

実行すると、エラーにはならず、以下のように表示されました。

つまり、prisma generate 自体は正常に実行されています。

それでも /api/auth/signin にアクセスすると、同じエラーが発生しました。


Prisma Client のバージョンを確認

次に、Prisma と @prisma/client のバージョンを確認しました。

npm list prisma @prisma/client

結果:

Prisma と @prisma/client はどちらも 6.19.3 でした。

そのため、今回は Prisma と @prisma/client のバージョンが一致していないことが原因ではありませんでした。


原因

ここで重要だったのが、prisma generate の結果です。

 Generated Prisma Client (6.19.3) to ./app/generated/prisma in 45ms

Prisma Client は以下の場所に生成されていました。

app/generated/prisma

一方、lib/prisma.ts では、@prisma/client から PrismaClient を読み込んでいます。

import { PrismaClient } from "@prisma/client";

つまり、今回確認できた状態は以下のようになっていました。

このため、Prisma Client の生成先と、アプリケーションが Prisma Client を読み込んでいる場所が一致していないことが分かりました。


対策方法

この問題を解決するために、Prisma Client の生成先と import 先が一致するように設定しました。

対策方法:schema.prisma の output 設定を変更する

特別な理由がない限り、Prisma Client はデフォルトの場所(node_modules/.prisma/client)に生成するのが最もシンプルでトラブルが少ないです。

prisma/schema.prisma ファイルを開き、generator client ブロックの output 指定を削除(またはコメントアウト)します。

// prisma/schema.prisma
generator client {
  provider = "prisma-client-js"
  // output   = "../app/generated/prisma"  ← この行を削除またはコメントアウト
}

修正後、再度 generate コマンドを実行します。

npx prisma generate

これにより、import { PrismaClient } from "@prisma/client"; で正常に読み込めるようになります。


まとめ

Prisma で同じエラーが発生した場合、最初からパッケージを再インストールするのではなく、まず以下を確認する。

1. Prisma Client を生成する
npx prisma generate
2. Prisma のバージョンを確認する
npm list prisma @prisma/client
3. Prisma Client の生成先を確認する
Generated Prisma Client to ...

というメッセージを確認する。

4. import の場所を確認する
import { PrismaClient } from "@prisma/client";

など、アプリケーション側でどこから PrismaClient を読み込んでいるか確認する。

Prisma Client の生成先と、コードから PrismaClient を読み込んでいる場所が一致しているか確認することが重要です。

タイトルとURLをコピーしました