
prisma-import で schema.prisma の分割
prisma React
prismaは便利なのですが、テーブルやリレーションなどが増えてくるとschema.prismaの記述量が増えて管理しづらくなります。
prisma-import を使うことで、schema.prisma を複数のファイルに分けることができ、分割されたファイルは npx prisma-import でまとめて schema.prisma に書き出してくれます。
1. VSCode の拡張機能「prisma-import」のインストール
vscode の拡張機能で「prisma-import」と入力して検索してインストールします。
2.schema ファイルの保存先とアウトプット先を package.json に記載します。
schema ファイル保存先:prisma/models/
schema.prisma 保存先:prisma/
{
"name": "sample project",
"version": "0.1.0",
"private": true,
"scripts": {
"dev": "next dev",
"build": "next build",
"start": "next start",
"prebuild": "prisma generate",
"predev": "prisma generate",
"prisma:migrate": "prisma migrate deploy",
"lint": "next lint"
},
~省略
"prisma": {
"import": {
//ファイル保存先
"schemas": "./prisma/models/*.prisma",
//schema.prisma 保存先
"output": "./prisma/schema.prisma"
}
}
}
3.schema.prisma を分かりやすいように分割する。
※例
●prisma/models/base.prisma
generator client {
provider = "prisma-client-js"
}
datasource db {
provider = "mysql"
url = env("DATABASE_URL")
}
●prisma/models/user.prisma
リレーションをしているmodelがファイルで分かれている場合は、import で読み出す。
import { Post, Comment } from "./post"
model User {
id Int @id @default(autoincrement())
firstName String
lastName String
email String @unique
password String
posts Post[]
comments Comment[]
}
●prisma/models/post.prisma
import { User } from "./user"
model Post {
id Int @id @default(autoincrement())
title String
description String
content String
user User @relation(fields: [userId], references: [id])
userId Int
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
comments Comment[]
}
model Comment {
id Int @id @default(autoincrement())
user User @relation(fields: [userId], references: [id])
userId Int
post Post @relation(fields: [postId], references: [id])
postId Int
message String
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
}
4.prisma-import を実行して schema.prisma に出力
npx prisma-import
※出力後の schema.prisma を開いてみると、モデルにそれぞれコメントが自動挿入されています。