はじめに
最近Prismaを使い始めたんですが schema.prisma
が肥大化していって辛くなってきたので分割を考えました
分割方法を調査
調べたところ、同じことを思ってる人はいるようでissueがありました
Prisma1の場合はPrismaがよしなにしてくれたようなのですが、2にはその機能がないみたいなので自前でmergeするみたいです
そこで紹介されているこちらのパッケージを使ってみます
分割する
現在 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
が生成されていれば成功です