メインコンテンツへスキップ

Prisma Schemaの概要

Prisma Schema(略してschema)は、Prisma ORMのセットアップにおける主要な設定方法です。以下の部分で構成されています

通常、schema.prismaという単一のファイル(または.prismaファイル拡張子を持つ複数のファイル)で、定義済みだがカスタマイズ可能な場所に保存されます。必要であれば、Prismaスキーマを複数のファイルに整理することもできます。

スキーマの各セクションの詳細については、PrismaスキーマAPIリファレンスを参照してください。

prismaコマンドが呼び出されるたびに、CLIは通常、スキーマからいくつかの情報を読み取ります。例:

  • prisma generate: 正しいデータソースクライアントコード(例:Prisma Client)を生成するために、Prismaスキーマから上記のすべての情報を読み取ります。
  • prisma migrate dev: 新しいマイグレーションを作成するために、データソースとデータモデル定義を読み取ります。

CLIコマンドが呼び出されたときに構成オプションを提供するために、スキーマ内で環境変数を使用することもできます。

以下は、指定するPrisma Schemaの例です

  • データソース(PostgreSQLまたはMongoDB)
  • ジェネレーター(Prisma Client)
  • 2つのモデル(1つのリレーションを含む)と1つのenumを持つデータモデル定義
  • 複数のネイティブデータ型属性@db.VarChar(255), @db.ObjectId
datasource db {
provider = "postgresql"
url = env("DATABASE_URL")
}

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

model User {
id Int @id @default(autoincrement())
createdAt DateTime @default(now())
email String @unique
name String?
role Role @default(USER)
posts Post[]
}

model Post {
id Int @id @default(autoincrement())
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
published Boolean @default(false)
title String @db.VarChar(255)
author User? @relation(fields: [authorId], references: [id])
authorId Int?
}

enum Role {
USER
ADMIN
}

構文

Prisma SchemaファイルはPrisma Schema Language (PSL)で記述されています。詳細と例については、データソースジェネレーターデータモデル定義、そしてもちろんPrisma Schema APIリファレンスの各ページを参照してください。

VS Code

PSLのシンタックスハイライトは、VS Code拡張機能で利用できます(これにより、Prismaスキーマのコンテンツを自動フォーマットしたり、赤い波線で構文エラーを表示したりすることもできます)。エディターでPrisma ORMをセットアップする方法について詳しく学んでください。

GitHub

GitHub上のPSLコードスニペットも、.prismaファイル拡張子を使用するか、Markdownのフェンス付きコードブロックにprismaと注釈を付けることで、シンタックスハイライト付きでレンダリングできます。

```prisma
model User {
id Int @id @default(autoincrement())
createdAt DateTime @default(now())
email String @unique
name String?
}
```

スキーマからの環境変数へのアクセス

CLIコマンドが呼び出されるとき、またはPrisma Clientクエリが実行されるときに、環境変数を使用して構成オプションを提供できます。

スキーマにURLを直接ハードコーディングすることは可能ですが、セキュリティリスクを伴うため推奨されません。スキーマで環境変数を使用すると、スキーマから機密情報を分離することができ、これにより異なる環境でスキーマを使用できるようになるため、スキーマのポータビリティが向上します

環境変数はenv()関数を使用してアクセスできます

datasource db {
provider = "postgresql"
url = env("DATABASE_URL")
}

env()関数は以下の場所で使用できます

  • データソースURL
  • ジェネレーターバイナリターゲット

開発中に.envファイルを使用する方法の詳細については、環境変数を参照してください。

コメント

Prisma Schema Languageでは、2種類のコメントがサポートされています

  • // comment: このコメントは読者の理解を助けるためのものであり、スキーマの抽象構文木(AST)には存在しません。
  • /// comment: これらのコメントは、スキーマの抽象構文木(AST)にASTノードの説明として表示されます。ツールはこれらのコメントを使用して追加情報を提供できます。すべてのコメントは次の利用可能なノードに添付されます — 自由な位置のコメントはサポートされておらず、ASTには含まれません。

いくつかの異なる例を以下に示します

/// This comment will get attached to the `User` node in the AST
model User {
/// This comment will get attached to the `id` node in the AST
id Int @default(autoincrement())
// This comment is just for you
weight Float /// This comment gets attached to the `weight` node
}

// This comment is just for you. It will not
// show up in the AST.

/// This comment will get attached to the
/// Customer node.
model Customer {}

自動フォーマット

Prisma ORMは.prismaファイルの自動フォーマットをサポートしています。.prismaファイルをフォーマットするには、2つの方法があります

設定オプションはありません — フォーマットルールは固定されています(Golangのgofmtに似ていますが、Javascriptのprettierとは異なります)

フォーマットルール

設定ブロックは=記号で整列されます

block _ {
key = "value"
key2 = 1
long_key = true
}

フィールド定義は2つ以上のスペースで区切られた列に整列されます

block _ {
id String @id
first_name LongNumeric @default
}

空行はブロックの整列とフォーマットルールをリセットします

block _ {
key = "value"
key2 = 1
key10 = true

long_key = true
long_key_2 = true
}
block _ {
id String @id
@default

first_name LongNumeric @default
}

複数行のフィールド属性は、他のフィールド属性と適切に整列されます

block _ {
id String @id
@default
first_name LongNumeric @default
}

ブロック属性はブロックの最後にソートされます

block _ {
key = "value"

@@attribute
}
© . All rights reserved.