0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【学習】実践Next.js でPrisma周りでハマったところ

Last updated at Posted at 2025-05-13

実践Next.js —— App Routerで進化するWebアプリ開発
6章のPrisma周りのエラーにハマったので同じような人向けにその解消方法を備忘録として残す。

マイグレーション

applications/packages/sns-web-2の環境構築のため

$ npm run db-migrate-dev

マイグレーションコマンドを実行したところ以下のようなエラーが出た。

Error: P1010: User `root` was denied access on the database `app-db.public

権限周りが原因だと思い、docker内部でpostgresを起動しrootユーザを作成、権限付与など色々いじっていたが真因は既にローカル上でpostgresがデフォルトポート5432で起動していたためdocker上ではなくローカル上のpostgresに向けてコマンドが実行されていたことがエラーの原因であった。ローカルのpostgresをkillして解決。

上記を解決した上でもう一度マイグレーションコマンドを実行したところ次のようなエラーが出た。

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

解消方法は以下のコマンドを実行してprismaクライアントを作成すればok

$ npx prisma generate

クライアント作成後、再度マイグレーションコマンドを実行したところ、正常に実行され解決。

ハマったところ

結論から言うと、モノレポ構成についてとprismaについての二つの知識が欠けていたのでエラー解消に時間がかかった。

モノレポではサブディレクトリ側にnode_modulesが作成されないので、そのような状態でもエイリアスが正しく効くのか疑っていた。

また自身のnode_modulesの方を参照する
applications/packages/sns-api-2の方は正常にマイグレーションが実行され、かつnpm runでTabの補完が効く一方、sns-web-2ではTabの補完が効かなかったのでモノレポ構成に関する設定に誤りがあるのではないかと疑っていた。

エラーの再現性

なぜこのエラーが起きたのか原因を特定したくて、applicationsディレクトリを削除後、
再度クローンして手順通りにコマンドを実行して再現しようとしたが、同じエラーは発生しなかった。(何それ怖い)
ローカルのポート5432が被っていた状況は再現してないのでそれが関係するかもしれない。また初回では操作ミスで余計にnpm installを実行していたので、そのせいかもしれない。

prismaについて調べてわかったこと

正常にマイグレーションが実行されると

node_modules/.prisma/client/schema.prisma

にスキーマファイルが作成される。

sns-api-2だけモノレポ構成から外している理由は同一のprismaを参照している場合、後発の
prisma migrate devによってnode_modules/.prisma配下のスキーマファイルの内容が上書きされてしまうからだと考えられる。

そう考える理由はsns-web-2の方はnpm installするが、sns-api-2の方はnpm install
しない状態でsns-web-2のディレクトリでnpm run db-migrate-devを実行applications/node_modules/.prisma配下にsns-web-2側の設定でスキーマファイルが完成されるのを確認した後、sns-api-2のディレクトリでnpm run db-migrate-devを実行したところ、親ディレクトリのprismaが呼び出されているらしく、マイグレーションが実行され
applications/node_modules/.prisma/client/schema.prisma
がsns-api-2側の設定で上書きされる挙動をしたことに偶然気づいたからだ。

以上、誰かの役に立てば幸いである。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?