⛏️

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)

調査内容

エラー解決のために以下の調査を実施

  1. パッケージバージョンの確認
Prisma: v6.6.0
@tidbcloud/prisma-adapter: v5.20.0
@tidbcloud/serverless: v0.2.0
Next.js: 15.1.2
React: 19.0.0
  1. スキーマと実際のデータベース構造の検証
    スキーマ定義と実際のデータベース構造に不整合がないか確認

  2. 使用しているパッケージのバージョンの互換性
    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下げることで対応。

参考

https://github.com/prisma/prisma/issues/26178
https://qiita.com/Okina_dev/items/21fc5ed4090d883c0b83
https://nkiri.hatenablog.com/entry/2025/03/01/214349

まとめ

  • エラーメッセージ「The "payload" argument must be of type object. Received null」はNext.js 15とPrismaの組み合わせで特に発生しやすい問題
  • 最新技術を組み合わせる際は、パッケージ間の互換性に注意が必要

Discussion