Prismaで"Field does not exist on enclosing type" エラーが発生した時の解決方法
こんにちは!ヒロケイと申します。
今回は、prisma を使ってサーバーの開発をしている時に遭遇した不可解なエラーを解決する方法について紹介します。
心当たりが無いのに、このようなエラーが発生すること、ありませんか?
エラー
Invalid `prisma.User.findUnique()` invocation:
Failed to validate the query: `Field does not exist on enclosing type. `
今回このエラーの解決方法を見つけたので、記録しておきます!
こんな人が読むと役立つ!
-
ブランチを切り替えた途端、prisma のエラーが発生してしまった。。。
-
コードに何も変更は加えていないが、データベースの接続がうまくできていない?
こういった悩みを解決するために役立ちます。
それでは見ていきましょう!
解決方法
コードに何も変更は加えてないが、なぜかエラーが発生している。。。
こんな問題に遭遇した時は、大抵これらのコマンドで解決できます。
プロジェクトのディレクトリの最上層にて、このコマンドで node_modules に保管されている prisma のキャッシュを検索します。
コマンド
find . -name .prisma
そして、検索して出てきたファイルを削除して prisma generate を実行します。
コマンド
rm -rf [findコマンドで検索したファイルの相対パス]/node_modules/.prisma
rm -rf [findコマンドで検索したファイルの相対パス]/node_modules/.cache
yarn prisma generate dev
これで解決できます!
解決できなかった時に見るべき場所

上記のコマンドを実行しても、解決できない時があります。
そんな時は、データベースとの接続がうまくできているかを確認しましょう!
確認事項リスト
-
開発環境のデータベースを Docker で動かしている場合は、ローカルのデータベースが実行されていないか確認
-
Docker Desktop は起動しているか
-
コンテナはしっかり走っている状態か
ローカルのデータベースが切ってあるか
データベースに Docker を使っている場合は、デスクトップアプリでローカルデータベースを切っている必要があります。
確認してみましょう!

Docker Desktop が起動している、かつコンテナが走っていることを確認
データベースを Docker で動かしている場合は、起動しているかの確認をしましょう!

まとめ
今回の不可解なエラーは、想定外の Prisma のキャッシュが残ってしまっていたが故のエラーでした。
この類のエラーは、monorepo で開発している時に良く遭遇するエラーのようです。
最後まで読んでくださり、ありがとうございました。
当ブログでは、プログラミング未経験者が戦力となるエンジニアとして稼ぐまでに役立つ情報をお届けしています。
Discussion