⛏️
Next.js 15 + Prisma v6.6.0で遭遇した「payload」エラーとその解決策
やりたいこと
Next.js 15とReact 19を使用したウェブアプリケーションで、TiDB Cloudをデータベースとして採用し、Prisma ORMを介してデータアクセスを行いたい。具体的には、ユーザー認証サービスであるClerkからのWebhookを受け取り、新規ユーザー登録時にデータベースにユーザー情報を保存する機能を実装したい
エラー内容
Clerkのwebhookをトリガーに新規ユーザーを作成しようとした際に、以下のエラーが発生
TypeError: The "payload" argument must be of type object. Received null
at createUser (src/lib/user.ts:23:14)
at async POST (src/app/api/webhook/clerk/route.ts:56:19)
調査内容
エラー解決のために以下の調査を実施
- パッケージバージョンの確認
Prisma: v6.6.0
@tidbcloud/prisma-adapter: v5.20.0
@tidbcloud/serverless: v0.2.0
Next.js: 15.1.2
React: 19.0.0
-
スキーマと実際のデータベース構造の検証
スキーマ定義と実際のデータベース構造に不整合がないか確認 -
使用しているパッケージのバージョンの互換性
Prisma、TiDBアダプター、Next.js、Reactなど各パッケージのバージョン間の互換性を調査
原因
Next.js 15とprismaの互換性
Next.js 15とPrisma v6.6.0の組み合わせで発生する「TypeError: The "payload" argument must be of type object. Received null」というエラーは、実際にはPrismaが発生させた本来のエラーをNextjsが飲み込んでしまって、上記エラーを吐き出しているらしい。
解決策
今回は、暫定的にPrismaのバージョンをv6.6.0→v6.0.1下げることで対応。
参考
まとめ
- エラーメッセージ「The "payload" argument must be of type object. Received null」はNext.js 15とPrismaの組み合わせで特に発生しやすい問題
- 最新技術を組み合わせる際は、パッケージ間の互換性に注意が必要
Discussion