Prisma migrate で DATABASE_URL が見つからないエラーの対処メモ

Web技術メモ

はじめに

今週から Next.js で遊び始めました。

Prismaを設定していた時に、環境変数が見つからない問題でハマったのでメモします。

利用環境

  • Node.js: v22.17.1
  • Next.js: 16.0.0
  • Prisma: 6.18.0
  • SQLite: dev.db
  "dependencies": {
    "@prisma/client": "^6.18.0",
    "next": "16.0.0",
    "prisma": "^6.18.0",
    "react": "19.2.0",
    "react-dom": "19.2.0",
    "zod": "^4.1.12"
  }

問題

prisma migrate 実行時に、以下のエラーが表示されてDB構築できない。

npx prisma migrate dev --name init

Error: PrismaConfigEnvError: Missing required environment variable: DATABASE_URL

前提の設定

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

datasource db {
  provider = "sqlite"
  url      = env("DATABASE_URL")
}
DATABASE_URL="file:./dev.db"
// ❌ Before
import { defineConfig, env } from "prisma/config";

export default defineConfig({
  schema: "prisma/schema.prisma",
  migrations: {
    path: "prisma/migrations",
  },
  engine: "classic",
  datasource: {
    url: env("DATABASE_URL"),
  },
});

対策

.env ファイルを絶対パス指定で読み込みむように変更します。

// ✅ After
import { defineConfig, env } from "prisma/config";
import * as dotenv from "dotenv";
import path from "node:path";

dotenv.config({ path: path.resolve(process.cwd(), ".env") });

export default defineConfig({
  schema: "prisma/schema.prisma",
  migrations: {
    path: "prisma/migrations",
  },
  engine: "classic",
  datasource: {
    url: env("DATABASE_URL"),
  },
});

実行結果

npx prisma migrate dev --name init
Loaded Prisma config from prisma.config.ts.

Prisma config detected, skipping environment variable loading.
Prisma schema loaded from prisma/schema.prisma
Datasource "db": SQLite database "dev.db" at "file:./dev.db"

SQLite database dev.db created at file:./dev.db

Applying migration `20251101033221_init`

The following migration(s) have been created and applied from new schema changes:

prisma/migrations/
  └─ 20251101033221_init/
    └─ migration.sql

Your database is now in sync with your schema.

✔ Generated Prisma Client (6.18.0) to ./src/generated/prisma in 45ms

無事に通りました。

タイトルとURLをコピーしました