ファランクスブログ

© 2026 all rights reserved.
  1. blog
  2. prisma-2
  • autoincrement():削除後
  • D1
  • migrate 本番D1への適用
  • エラー
  • PrismaConfigEnvError
  • serverAction

Prisma:(2)

2026年4月14日

autoincrement():削除後

id          Int       @id @default(autoincrement())
  • autoincrement()でIDが生成されるようにしている場合、そのデータを削除した後はそのデータに使われていたIDの数字は、以降のデータ挿入時には使われない。DBは「どの数字まで使ったか」を管理している為(Postgresの仕様)。

D1

*そこまで理解していない

Cloudflare D1 + Prisma + Tanstack-Start を使う場合:

pnpm add @prisma/client @prisma/adapter-d1
// schema.prisma

generator client {
  provider = "prisma-client"
  output   = "./generated/prisma"
  runtime  = "cloudflare"
}

datasource db {
  provider = "sqlite"
}
  • String[]や Int[]が使えないので、JSONにするか要素をRelationに分けることで解決する。

import { PrismaD1 } from "@prisma/adapter-d1";

export const getPrismaData = createServerFn().handler(async () => {
  const prisma = new PrismaClient({ adapter: new PrismaD1(env.test_db) });
  return await prisma.todo.findMany();
});
  • Prismaのインスタンス化はserverActionの中で行わないとエラーになる。

  • 開発時はローカルのD1データベースが使われる。

  • wrangler.jsoncのd1-databasesをremote:trueにすると開発時もローカルのD1は使われない。

// wrangler.jsonc

	"d1_databases": [
		{
      ...
      "remote": true
		}
	],

migrate 本番D1への適用

db push/migrateコマンドを本番のD1へ行えない。コマンドが機能しているように見えてもローカルのD1に適用されている。

本番のD1にモデルを適用する手順:

  1. まずmigrate devをローカルで実行して、migrationフォルダにsqlファイルを生成

  2. 以下のコマンドを実行し、sqlファイルの内容を本番のD1に反映させる

// パターンA
npx wrangler d1 execute --remote DB_NAME --file=./prisma/migrations/init/migration.sql

// パターンB
npx wrangler d1 migrations apply DB_NAME --remote
  • パターンBの場合は wrangler.jsoncのmigrations_dirに最新のmigrationフォルダへのパスを書く。

  • いずれもパターンもPrismaのモデルを変更するたびにmigrateを行ない、ファイル/フォルダへのパスを手動で指定するという手順は必要になる。

  • remote: trueにしていない場合はローカルD1への反映も必要になる。

エラー

PrismaConfigEnvError

TypeScript/JavaScript module. Error: PrismaConfigEnvError: Cannot resolve environment variable: DATABASE_URL.

スクラッチで始めたアプリで発生。URL文字列やPrisma関係の設定は間違っていない

対策:以下を prisma.config.tsの上部に追加

import dotenv from "dotenv";
import fs from "fs";

if (fs.existsSync(".env")) {
  dotenv.config({ path: ".env" });
} else {
  dotenv.config({ path: ".env.development" });
}

serverAction

TypeError: The "payload" argument must be of type object. Received null

原因:

  • Schemaファイルのモデルで必須要素にしているのに何も値を渡していない場合

  • action関数内でcreateに渡したデータの型とモデルの型が違う場合

database
/
prisma
orm
postgresql
error
tanstack
  • autoincrement():削除後
  • D1
  • migrate 本番D1への適用
  • エラー
  • PrismaConfigEnvError
  • serverAction