prisma-import で schema.prisma の分割

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 を開いてみると、モデルにそれぞれコメントが自動挿入されています。

© 2024 Chinta