背景
「AI駆動開発や!」と息巻いて環境構築からAIに頼って理解なく進んだ結果、公式ドキュメントを追っていれば引っかからないような問題に直面してしまいました。
初歩的内容になるが、同じようなところで詰まる人が少なくなるように以下にログを残します。
以下、
@prisma/client
が存在するのに PrismaClient
やモデルが import できない現象に悩まされたので、解決パターンを整理。
結論
Prisma の schema.prisma
で generator client
に output
を指定していた のが原因。
これにより @prisma/client
に Prisma Client のコードが生成されず、型エラーが発生していた。
環境構成
- 技術スタック
- pnpm
- prisma
- NextJs (今回はあまり関係ないかも)
以下のような構成です。
projectName/
├── pnpm-workspace.yaml
├── backend/ ← Prisma 定義・使用場所
│ ├── prisma/
│ │ └── schema.prisma
│ ├── src/
│ │ └── tasks.service.ts (← PrismaClient を使いたい)
├── frontend/
└── infra/
起きていた問題
import { PrismaClient } from '@prisma/client'
のように書いているのに、以下のようなエラーが発生:
Cannot find module '@prisma/client' or its corresponding type declarations.
原因
schema.prisma
に以下のような設定があった:
generator client {
provider = "prisma-client-js"
output = "../node_modules/.prisma/client"
}
これは Prisma Client を通常の @prisma/client
ではなく、別フォルダ(.prisma/client
)に出力する指定です。
結果として:
-
@prisma/client
は存在するが、中身が空に近い状態 - 型定義も
PrismaClient
の実体も import できない - tsconfig やパス設定をいくら調整しても解決しない
解決策
1. schema.prisma
を修正する
generator client {
provider = "prisma-client-js"
- output = "../node_modules/.prisma/client"
}
output 行を削除。
問題解決のために以下を再実行、と検索結果として出たりするのですが、私の場合は関係ありませんでした(問題の本質をちゃんと見極めるためにも、使っているものの理解は大事ですね💦)。
pnpm install
npx prisma generate
2. Prisma Client を再生成
cd backend
pnpm prisma generate
これで正しく @prisma/client
に PrismaClient とモデルの型が出力された。
outputの用途は?
- Prisma Client を複数のサービスで共有したい場合のみ
output
を活用すべき。
📝 まとめ
問題 | 原因 | 解決方法 |
---|---|---|
@prisma/client はあるのに使えない |
output によって生成先が変わっていた |
output を削除して prisma generate
|
補足
この問題とは直接関係ないのですが、以下の修正も必要だったので補足として記載しておきます。
ts.config.jsonのcompilerOptionsに以下を追加
{
"compilerOptions" : {
"baseUrl": ".",
"paths": {
"@prisma/client": ["node_modules/@prisma/client"]
}
}
}
同じ問題で悩んでいる方の参考になれば幸いです!