
【設定・環境構築】Neon → Prisma Postgres 移行とローカル開発環境の構築
accelerateUrl コンストラクタオプション、.env の使い分け、$extends の罠など実践的なポイントをまとめました。はじめに
Cloudflare Workers では TCP ソケットが使えません。Neon のサーバーレス PostgreSQL は TCP 接続が前提のため、Workers 環境では直接接続できません。
HTTP 経由で DB に接続できる Prisma Postgres(旧 Prisma Accelerate)に移行することで、この問題を解決しました。
この記事でわかること
-
Neon から Prisma Postgres への移行理由と手順
-
accelerateUrlコンストラクタオプションの使い方 -
$extends(withAccelerate())が不要な理由 -
ローカル PostgreSQL と Prisma Postgres を
.envで切り替える方法
対象読者
-
Neon から Prisma Postgres に移行を検討している方
-
Workers 環境で DB 接続を構築したい方
前提条件
-
Prisma v7+
-
Prisma Postgres アカウント(prisma.io)
-
ローカルに PostgreSQL が稼働中
1. なぜ Neon から移行するのか
| Neon | Prisma Postgres | |
|---|---|---|
| 接続方式 | TCP | HTTP |
| Workers対応 | × | ○ |
| コネクションプール | Neon独自 | Prismaビルトイン |
Cloudflare Workers では TCP が使えないため、HTTP 経由の Prisma Postgres が最適です。
2. Prisma Postgres のセットアップ
Prisma Console でプロジェクトを作成すると、以下の 2 つの URL が発行されます。
# 接続用(HTTP 経由)
DATABASE_URL="prisma+postgres://accelerate.prisma-data.net/?api_key=..."
# マイグレーション用(TCP 直接)
DIRECT_URL="postgres://[email protected]:5432/postgres?sslmode=require"
prisma/schema.prisma に directUrl を追加します。
datasource db {
provider = "postgresql"
url = env("DATABASE_URL")
directUrl = env("DIRECT_URL")
}
3. accelerateUrl コンストラクタオプション
Prisma v7 では accelerateUrl をコンストラクタに渡すだけで Prisma Postgres 接続が有効になります。
// Workers 環境
const prisma = new PrismaClient({
accelerateUrl: process.env.DATABASE_URL,
});
$extends(withAccelerate()) は 不要 です。accelerateUrl コンストラクタオプションだけで動作します。$extends を使うと TypeScript の include リレーション型が壊れる罠があるので注意。4. .env でローカル/リモートを切り替え
# ローカル開発用
DATABASE_URL="postgresql://postgres:postgres@localhost:5434/anoni"
DIRECT_URL="postgresql://postgres:postgres@localhost:5434/anoni"
# 本番/ステージング用(コメントアウト)
# DATABASE_URL="prisma+postgres://accelerate.prisma-data.net/?api_key=..."
# DIRECT_URL="postgres://[email protected]:5432/postgres?sslmode=require"
ローカルではコメントを切り替えるだけで、リモート DB にも接続できます。
5. $transaction の制限
Prisma Postgres の HTTP 接続プール経由では、interactive transaction が不安定になることがあります。
// OK: 単純なトランザクション
await prisma.$transaction([
prisma.user.update({ ... }),
prisma.account.create({ ... }),
]);
// 注意: interactive transaction は不安定
await prisma.$transaction(async (tx) => {
// HTTP 接続プール経由ではタイムアウトのリスクがある
});
Tips
DIRECT_URL(TCP)経由で実行されます。prisma migrate dev や prisma db push はローカルでもリモートでも同じコマンドで OK。CREATE EXTENSION IF NOT EXISTS vector; をスキーマ反映前に実行しましょう。まとめ
-
Workers の TCP 制約から Neon → Prisma Postgres(HTTP)に移行
-
accelerateUrlコンストラクタオプションでシンプルに接続($extends不要) -
.envのコメント切り替えでローカル/リモートを簡単に切り替え -
interactive transaction は HTTP 経由で不安定なので過度な依存は避ける
最新記事
- 【設定・環境構築】OpenNext でNext.js SSGサイトをCloudflare Workersにデプロイする完全ガイド
2026/3/19
- 【実装】Notion calloutブロックをNext.jsでカラフルなUIコンポーネントとして表示する
2026/3/19
- 【トラブルシューティング】Cloudflare Pages → Workers 移行で遭遇したEdge Runtime問題集
2026/3/19
- 【実践】Next.js 13→16メジャーアップグレードの全記録 — 破壊的変更と対応策
2026/3/19
- 【自動化】Gemini Imagen APIでブログのeyecatch画像を自動生成してR2にアップロードする
2026/3/19
- 【実装】Notion APIでブログシステムを構築する(Next.js 13 App Router × SDK v5)
2026/3/19
- 【移行ガイド】microCMSからNotion APIへブログCMSを完全移行する
2026/3/19
- 【トラブルシューティング】本番デプロイで遭遇した問題と解決策まとめ
2026/3/15
- 【環境構築】Next.js × Cloudflare Workers の本番環境を一から構築する
2026/3/15
- 【設定・環境構築】Neon → Prisma Postgres 移行とローカル開発環境の構築
2026/2/26


