できない.dev

Prisma で「Environment variable not found: DATABASE_URL」が解決できない

Prisma が .env の DATABASE_URL を読み込めないと、Environment variable not found: DATABASE_URL で停止する。
.env をプロジェクト直下に置き、datasource の url を env() で参照すれば解消する。

公開: 更新:

実行例あり(2026-09-19 に実環境で検証)

要約

Environment variable not found: DATABASE_URL は、schema.prisma の env("DATABASE_URL") に対応する環境変数を Prisma が見つけられないときに出る。

Prisma CLI は .env の内容を process.env に読み込んでから動くため、.env の場所や中身がずれていると参照に失敗する。

.env をプロジェクト直下に置き、DATABASE_URL を正しく定義すれば解消する(公式: 環境変数の管理(新しいタブで開く))。

実行例

.env が無い状態と DATABSE_URL と綴りを誤った状態は、どちらも同じ P1012 で止まる。
綴りを直すと validate は通るが、prisma.config.ts を置くと環境変数の自動読み込みが行われなくなって再び P1012 になり、先頭に dotenv/config を入れたところで通った。

$ npx prisma validate
Prisma schema loaded from prisma/schema.prisma
Error: Prisma schema validation - (get-config wasm)
Error code: P1012
error: Environment variable not found: DATABASE_URL.
  -->  prisma/schema.prisma:3
   | 
 2 |   provider = "postgresql"
 3 |   url      = env("DATABASE_URL")
   | 
 
Validation Error Count: 1
[Context: getConfig]
 
Prisma CLI Version : 6.19.3
終了コード: 1
$ cat .env
DATABSE_URL="postgresql://user:pass@localhost:5432/mydb"
$ npx prisma validate
Environment variables loaded from .env
Prisma schema loaded from prisma/schema.prisma
Error: Prisma schema validation - (get-config wasm)
Error code: P1012
error: Environment variable not found: DATABASE_URL.
  -->  prisma/schema.prisma:3
   | 
 2 |   provider = "postgresql"
 3 |   url      = env("DATABASE_URL")
   | 
 
Validation Error Count: 1
[Context: getConfig]
 
Prisma CLI Version : 6.19.3
終了コード: 1
$ cat .env
DATABASE_URL="postgresql://user:pass@localhost:5432/mydb"
$ npx prisma validate
Environment variables loaded from .env
Prisma schema loaded from prisma/schema.prisma
The schema at prisma/schema.prisma is valid 🚀
終了コード: 0
$ npx prisma validate
Loaded Prisma config from prisma.config.ts.
 
Prisma config detected, skipping environment variable loading.
Prisma schema loaded from prisma/schema.prisma
Error: Prisma schema validation - (get-config wasm)
Error code: P1012
error: Environment variable not found: DATABASE_URL.
  -->  prisma/schema.prisma:3
   | 
 2 |   provider = "postgresql"
 3 |   url      = env("DATABASE_URL")
   | 
 
Validation Error Count: 1
[Context: getConfig]
 
Prisma CLI Version : 6.19.3
終了コード: 1
$ head -n 1 prisma.config.ts
import "dotenv/config";
$ npx prisma validate
Loaded Prisma config from prisma.config.ts.
 
Prisma config detected, skipping environment variable loading.
Prisma schema loaded from prisma/schema.prisma
The schema at prisma/schema.prisma is valid 🚀
終了コード: 0

— 2026-09-19 時点の出力

検証環境

検証日
実行環境
node:20Debian GNU/Linux 12 (bookworm)
バージョン
  • Node.js 20.20.2
  • npm 10.8.2
  • Python 3.11.2
  • Git 2.39.5

この記事の「実行例」は、上記の環境で実際にコマンドを実行して得られた出力をそのまま掲載しています。 再現手順はリポジトリの検証スクリプトとして管理し、定期的に再実行して出力を更新しています。

よくある原因

  1. .env がプロジェクトルート(./.env)に無い、または schema と別階層にある。
  2. .env に DATABASE_URL の行が無い、スペルミス、あるいはコメントアウトされている。
  3. datasource db の url が誤った参照になっている。
  4. prisma.config.ts 利用時に dotenv を読み込まず、変数が process.env に載っていない。

解決策

1. .env をルートに置き DATABASE_URL を定義する

# .env(プロジェクト直下)
DATABASE_URL="postgresql://user:pass@localhost:5432/mydb"

Prisma CLI は ./.env → --schema と同じ階層 → ./prisma の順で .env を探索する。

2. schema 側で env() 参照にする(Prisma ORM 6 まで)

datasource db {
  provider = "postgresql"
  url      = env("DATABASE_URL")
}

Prisma ORM 7 ではこの書き方は受け付けられず、prisma validate が P1012 で止まる(The datasource property url is no longer supported in schema files.)。
7 系では schema から url を外し、接続先は prisma.config.ts の datasource.url に置く。

datasource db {
  provider = "postgresql"
}
// prisma.config.ts
import 'dotenv/config';
import { defineConfig, env } from 'prisma/config';
 
export default defineConfig({
  schema: 'prisma/schema.prisma',
  migrations: { path: 'prisma/migrations' },
  datasource: { url: env('DATABASE_URL') },
});

3. prisma.config.ts では dotenv を読み込む

import 'dotenv/config';

prisma.config.ts を使う構成では、自前で .env を読み込まないと変数が反映されない。

この記事は役立ちましたか?