Prismaで環境別にenvやschemaを読み込みたい

やりたいこと

Vite x Prismaで ①Dev環境 ②本番環境 で個別に起動できるようにしたい。
①Dev環境はSQLiteを、②本番環境はPostgreSQLを使うようにしたい。

対応

大まかな手順

  1. envファイル、DB別schemaファイルの作成
  2. prisma migrateを実行してprisma clientを読み込む
  3. npm実行時にenvを指定して読み込む

ファイル構造の最終形態

.env
.env.dev
.env.main
package.json
prisma
├── pg
│  ├── migrations
│  │  ├── 20230329081140_
│  │  │  └── migration.sql
│  │  └── migration_lock.toml
│  └── schema.prisma
├── seed.ts
└── sqlite
    ├── dev.db
    ├── migrations
    │  ├── 20230329080944_
    │  │  └── migration.sql
    │  └── migration_lock.toml
    └── schema.prisma

各ファイルの中身

.env

DATABASE_SQLITE_URL="file:./dev.db"
DATABASE_PG_URL="postgresql://postgres:ooo@ooo.supabase.co:5432/postgres"

.env.dev

# NFT
DOT_UPDATE_AUTHORITY="HXtBm8XZbxaTt41uqaKhwUAa6Z1aPyvJdsZVENiWsetg"
DOT_PFP_COLLECTION="AR9oRpDHsLW4tkb2fgMthaoZGQj9bnKMAoNZ9k9Yuy1K"

.env.prod

# NFT
DOT_UPDATE_AUTHORITY="vir55LvSEGcY55ny876GycLmFCxMXTkoRg7RxDvKiw5"
DOT_PFP_COLLECTION="4BDvhA5emySfqyyTHPHofTJqRw1cwDabK1yiEshetPv9"

package.json(一部抜粋)

  "scripts": {
    "dev": "nodemon -r dotenv/config app.ts dotenv_config_path=.env.dev",
    "prod": "nodemon -r dotenv/config app.ts dotenv_config_path=.env.prod",
  },

prisma/pg/schema.prisma(一部抜粋)

generator client {
  provider = "prisma-client-js"
}

datasource db {
  provider = "postgres"
  url      = env("DATABASE_PG_URL")
}

prisma/sqlite/schema.prisma(一部抜粋)

generator client {
  provider = "prisma-client-js"
}

datasource db {
  provider = "postgres"
  url      = env("DATABASE_SQLITE_URL")
}

起動方法(devの場合)

% npx prisma generate --schema ./prisma/sqlite/schema.prisma
% npm run dev

起動方法(prodの場合)

% npx prisma generate --schema ./prisma/pg/schema.prisma
% npm run prod

参照