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

概要

Prismaスキーマ(略してschema)は、Prisma ORM設定の主要な構成方法です。以下の部分で構成されています。

通常、schema.prismaという単一のファイル(または.prismaファイル拡張子を持つ複数のファイル)であり、定義済みですがカスタマイズ可能な場所に保存されます。

注意

スキーマを複数のファイルに分割したいですか? マルチファイルPrismaスキーマは、Prisma ORM 5.15.0以降のprismaSchemaFolderプレビュー機能でサポートされています。

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

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

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

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

以下は、指定するPrismaスキーマの例です。

  • データソース(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スキーマファイルは、Prisma Schema Language(PSL)で記述されています。詳細と例については、データソースジェネレーターデータモデル定義、そしてもちろんPrismaスキーマ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ノードの説明として表示されます。ツールはこれらのコメントを使用して、追加情報を提供できます。すべてのコメントは、次に利用可能なノードに添付されます - free-floating comments はサポートされておらず、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
}

改行はブロックの配置をリセットします

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

long_key = true
long_key_2 = true
}

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

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

複数行のフィールド属性は、残りのフィールド属性と適切に揃えられます

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

改行はフォーマットルールをリセットします

block _ {
id String @id
@default

first_name LongNumeric @default
}

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

block _ {
key = "value"

@@attribute
}