kt-tech.blog

画像

【設定・環境構築】Bun + Prisma 7 環境構築ガイド(PrismaPg adapter / seed / migrate)

Share
💡
Bun環境でPrisma 7(PrismaPg adapter必須)を使う際のセットアップ手順とハマりどころを紹介します。

はじめに

Prisma 7ではドライバアダプター(PrismaPg等)が必須になり、PrismaClientの初期化方法が変わりました。BunランタイムでのセットアップにはNode.js時代とは異なるハマりポイントがあります。

前提条件

  • Bun 1.x 以上

  • Prisma 7.x(@prisma/adapter-pg が必須)

  • PostgreSQL 16(ローカルはDocker推奨)

1. PrismaClientの初期化

Prisma 7ではPrismaClientにadapterを渡す必要があります。

// src/lib/prisma.ts
import { PrismaPg } from "@prisma/adapter-pg";
import { PrismaClient } from "@prisma/client";

const adapter = new PrismaPg({
  connectionString: process.env.DATABASE_URL!,
});

const prisma = new PrismaClient({ adapter });
export default prisma;
⚠️
Prisma 6以前の new PrismaClient() だけではエラー: 「PrismaClient needs non-empty PrismaClientOptions」。必ずadapterを渡すこと。

2. prisma.config.ts(Prisma 7の新設定)

// prisma.config.ts
import path from "node:path";
import { defineConfig } from "prisma/config";

export default defineConfig({
  earlyAccess: true,
  schema: path.join("prisma", "schema.prisma"),
  migrations: {
    path: "prisma/migrations",
    seed: "bun ./prisma/seed.ts",  // ← Bun用のseed設定
  },
});
⚠️
Prisma 7ではpackage.jsonの prisma.seed は無視されます。prisma.config.tsのmigrations.seedに設定すること。

3. Seedファイル

seedファイルでもadapterが必要です。アプリ本体のprismaインスタンス(@/lib/prisma)はNext.jsのモジュール解決に依存するため、seed用に別途PrismaClientを作成します。

// prisma/seed.ts
import { PrismaPg } from "@prisma/adapter-pg";
import { PrismaClient } from "@prisma/client";
import "dotenv/config";  // .envを直接読み込む

const adapter = new PrismaPg({
  connectionString: process.env.DATABASE_URL!,
});
const prisma = new PrismaClient({ adapter });

async function main() {
  // upsertでべき等にシード
  await prisma.character.upsert({
    where: { slug: "akari" },
    update: { name: "アカリ", ... },
    create: { slug: "akari", name: "アカリ", ... },
  });
}

main()
  .catch((e) => { console.error(e); process.exit(1); })
  .finally(() => prisma.$disconnect());

4. コマンドまとめ

# マイグレーション作成・適用
bun prisma migrate dev --name add_feature

# シード実行
bun prisma db seed

# Prisma Studio(DB確認GUI)
bun prisma studio

# スキーマからクライアント再生成
bun prisma generate

トラブルシューティング

🔥
PrismaClient needs non-empty PrismaClientOptions → adapterを渡し忘れ。PrismaPg adapterをimportして渡す。
🔥
prisma db seed が「seed command not found」→ package.jsonではなく prisma.config.ts にseed設定を書く(Prisma 7)
🔥
Foreign key constraint violated → JWTのユーザーIDがDBに存在しない。セッションをクリアして再ログイン。

まとめ

  • Prisma 7ではPrismaPg adapterが必須 — アプリ本体もseedも両方に設定

  • seed設定はprisma.config.tsのmigrations.seedに書く

  • seedファイルではdotenv/configで直接.envを読む(Next.jsのモジュール解決は使えない)