はじめに
最近Prismaを使い始めたんですが schema.prisma
が肥大化していって辛くなってきたので分割を考えました
分割方法を調査
調べたところ、同じことを思ってる人はいるようでissueがありました
Prisma1の場合はPrismaがよしなにしてくれたようなのですが、2にはその機能がないみたいなので自前でmergeするみたいです
github.com
そこで紹介されているこちらのパッケージを使ってみます
github.com
分割する
現在 prisma init
すると prisma/schema.prisma
が生成されるので
prisma
フォルダ内で作業します
まず base.schema
を作ります
datasource db {
provider = "postgresql"
url = env("DATABASE_URL")
}
generator client {
provider = "prisma-client-js"
}
base.schema
にはdatasourceやgeneratorの設定を入れます
次に models
フォルダに各Modelを1ファイルごとに入れていきます
models/User.prisma
model User {
id Int @id @default(autoincrement())
email String @unique
name String?
posts Post[]
}
models/Post.prisma
model Post {
id Int @id @default(autoincrement())
createdAt DateTime @default(now())
title String
published Boolean @default(false)
author User @relation(fields: [authorId], references: [id])
authorId Int
categories Category[] @relation(references: [id])
}
VSCodeでPrismaの拡張をインストールしていると参照エラーが出ますが気にしないでいきます
最後にコマンドを実行します
デフォルトだと src
以下になっているので各パスを指定します
npx prisma-merge --baseFile prisma/base.prisma --schemaFilePatterns 'prisma/*/*.prisma' --outputFile prisma/schema.prisma
このとき --schemaFilePatterns prisma/*/*.prisma
のようにクォートで囲まないと展開されてエラーになってしまうので注意
prisma/schema.prisma
が生成されていれば成功です