【Prisma 7】The datasource property url is no longer supported エラーの直し方
はじめに
Prisma 7 では、従来の schema.prisma に直接接続 URL を記述する方式が廃止されました。
これにより、Prisma 7 へ移行したプロジェクトでは P1012: The datasource property url is no longer supported エラーが発生します。この変更は Prisma の設計方針転換によるもので、モデル定義と環境依存設定を切り離す構成が採用されました。
本記事では、本エラーの対処方法と背景を解説します。
対象者
- Prisma 6 から Prisma 7 に移行するエンジニア
- Next.js などで Prisma を利用している方
- Prisma の新しい設定体系(prisma.config.ts)を知りたい方
実際のエラーログ(P1012)
Prisma 6 時代の記述のままだと、Prisma 7 では以下のようなエラーが出ました。
これは「schema.prisma の中に url を書くのはもう禁止です」というエラーです。
$ npx prisma migrate dev
Error: P1012
Error: Prisma schema validation - (get-config wasm)
Error code: P1012
error: The datasource property `url` is no longer supported in schema files. Move connection URLs for Migrate to `prisma.config.ts` and pass either `adapter` for a direct database connection or `accelerateUrl` for Accelerate to the `PrismaClient` constructor. See https://pris.ly/d/config-datasource and https://pris.ly/d/prisma7-client-config
--> prisma/schema.prisma:7
| provider = "postgresql"
| url = env("DATABASE_URL")
|
Validation Error Count: 1
結論
P1012 の直し方の手順を先に知りたい方はこちらからご確認ください。
以下の2ステップで修正します。
-
schema.prismaのdatasourceブロックからurl行を削除するdatasource db { provider = "postgresql" // url = env("DATABASE_URL") ← 消す } -
プロジェクトルートに
prisma.config.tsを作成し、接続情報を定義する// prisma.config.ts import { defineConfig } from '@prisma/config'; export default defineConfig({ datasource: { // ここで環境変数を読み込む url: process.env.DATABASE_URL, }, // 必要に応じてジェネレーター設定などもここに移動可能 generator: { name: 'client', provider: 'prisma-client-js', }, }); -
DATABASE_URL(およびテスト・ステージング等に必要な URL)を環境変数として設定する -
npx prisma migrate dev/npx prisma generateを再実行して動作確認
以上の流れで The datasource property "url" is no longer supported(P1012)は解消できます。
なぜ schema.prisma に url が書けなくなったのか
Prisma 7 からは、接続情報の設定の責務を schema.prisma から外す、という設計方針になりました。
これまでの問題点
以前の schema.prisma は、以下の2つの役割が混在していました。
- データモデリング: テーブル定義やリレーション(静的な情報)
- ランタイム設定: データベースURLやプロバイダー設定(環境に依存する動的な情報)
Prisma 7 の設計方針
Prisma 7 からは、schema.prisma は純粋なデータ構造の定義のみに集中するという方針になりました。
- schema.prisma: テーブル定義だけを書く(言語に依存しない共通定義)。
- prisma.config.ts: 接続先 URL やクライアント生成の設定を書く(TypeScript で記述可能)。
例:環境ごとに URL を切り替える場合
以下のようにすることで、TypeScript である優位性を活用できます。
設定の分岐ロジックを TypeScript 側に書きつつ、schema.prisma はきれいなままに保てます。
// prisma.config.ts
type Env = 'local' | 'staging' | 'production'
const env = (process.env.APP_ENV as Env) ?? 'local'
const urlByEnv: Record<Env, string> = {
local: process.env.DATABASE_URL_LOCAL!,
staging: process.env.DATABASE_URL_STG!,
production: process.env.DATABASE_URL_PROD!,
}
export default defineConfig({
schema: 'prisma/schema.prisma',
datasources: {
db: {
url: urlByEnv[env],
},
},
})
おわりに
Prisma 7 へ移行した途端、これまで問題なく動いていた環境で突然エラーが出ることがあり、私自身とても戸惑いました。schema.prisma に書いていた URL が急に受け付けられなくなるなど、思わぬ変化に驚いた開発者も多いはずです。同じように困っている方にとって、少しでも状況を整理する手助けになれば幸いです。
株式会社ONE WEDGE
【Serverlessで世の中をもっと楽しく】
ONE WEDGEはServerlessシステム開発を中核技術としてWeb系システム開発、AWS/GCPを利用した業務システム・サービス開発、PWAを用いたモバイル開発、Alexaスキル開発など、元気と技術力を武器にお客様に真摯に向き合う価値創造企業です。
Discussion