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

Schema の場所

Prisma Schema のデフォルト名は、`prisma` フォルダー内の単一のファイル `schema.prisma` です。スキーマがこのように命名されている場合、Prisma CLI は自動的にそれを検出します。

`prismaSchemaFolder` プレビュー機能を使用している場合、`prisma/schema` ディレクトリ内のすべてのファイルが自動的に検出されます。

Prisma Schema の場所

Prisma CLI は、Prisma Schema を次の場所で、次の順序で探します

  1. `--schema` フラグで指定された場所。これは、`introspect`、`generate`、`migrate`、および `studio` を実行するときに利用できます。

    prisma generate --schema=./alternative/schema.prisma
  2. `package.json` ファイルで指定された場所(バージョン 2.7.0 以降)

    "prisma": {
    "schema": "db/schema.prisma"
    }
  3. デフォルトの場所

    • ./prisma/schema.prisma
    • ./schema.prisma

Prisma CLI は、使用されるスキーマのパスを出力します。次の例は、`prisma db pull` のターミナル出力を示しています。

Environment variables loaded from .env
Prisma Schema loaded from prisma/schema.prisma

Introspecting based on datasource defined in prisma/schema.prisma …

✔ Introspected 4 models and wrote them into prisma/schema.prisma in 239ms

Run prisma generate to generate Prisma Client.

マルチファイル Prisma Schema (プレビュー)

Prisma スキーマを複数のファイルに分割したい場合は、次のようなセットアップにできます

my-app/
├─ ...
├─ prisma/
│ ├─ schema/
│ │ ├─ post.prisma
│ │ ├─ schema.prisma
│ │ ├─ user.prisma
├─ ...

使用方法

`generator` ブロックで `prismaSchemaFolder` プレビュー機能を有効にすることで、Prisma スキーマを複数のファイルに分割できます

schema.prisma
generator client {
provider = "prisma-client-js"
previewFeatures = ["prismaSchemaFolder"]
}

v6.6.0 以降、Prisma スキーマフォルダーの場所を常に明示的に指定する必要があります。デフォルトの場所での Prisma スキーマフォルダーの「マジック」検出はもうありません。

これを行うには、次の 3 つの方法のいずれかがあります

  • Prisma CLI コマンドに `--schema` オプションを渡す(例:`prisma migrate dev --schema ./prisma/schema`)
  • `package.json` で `prisma.schema` フィールドを設定する
    // package.json
    {
    "prisma": {
    "schema": "./schema"
    }
    }
  • `prisma.config.ts` で `schema` プロパティを設定する
    import path from 'node:path'
    import type { PrismaConfig } from 'prisma'

    export default {
    earlyAccess: true,
    schema: path.join('prisma', 'schema'),
    } satisfies PrismaConfig<Env>

`datasource` ブロックを定義する `.prisma` ファイルの隣に `migrations` ディレクトリを配置する必要もあります。

たとえば、`schema.prisma` が `datasource` を定義していると仮定すると、migrations フォルダーを配置する方法は次のとおりです

# `migrations` and `schema.prisma` are on the same level
.
├── migrations
├── models
│ ├── posts.prisma
│ └── users.prisma
└── schema.prisma

既存の Prisma CLI コマンドを複数の Prisma スキーマファイルで使用する方法

ほとんどの Prisma CLI コマンドでは、マルチファイル Prisma スキーマを操作するために変更は必要ありません。オプションを介してスキーマを提供する必要がある特定の場合にのみ、コマンドを変更する必要があります。これらの場合、ファイルへの参照をディレクトリに置き換えるだけです。例として、次の `prisma db push` コマンド

npx prisma db push --schema custom/path/to/my/schema.prisma

は次のようになります

npx prisma db push --schema custom/path/to/my/schema  # note this is now a directory!

マルチファイル Prisma Schema のヒント

いくつかのパターンがこの機能でうまく機能し、最大限に活用できることがわかりました

  • ドメイン別にファイルを整理する:関連するモデルを同じファイルにグループ化します。たとえば、ユーザー関連のモデルはすべて `user.prisma` に保持し、投稿関連のモデルは `post.prisma` に移動します。「kitchen sink」スキーマファイルを作成しないようにしてください。

  • 明確な命名規則を使用する:スキーマファイルは明確かつ簡潔に命名する必要があります。`user.prisma` や `post.prisma` のような名前を使用し、`myModels.prisma` や `CommentFeaturesSchema.prisma` のような名前は使用しないでください。

  • 明白な「メイン」スキーマファイルを用意する:スキーマファイルを必要なだけ持つことができるようになりましたが、`datasource` および `generator` ブロックを定義する場所は依然として必要です。これらのブロックを簡単に見つけられるように、明らかに「メイン」ファイルである単一のスキーマファイルを用意することをお勧めします。`main.prisma`、`schema.prisma`、および `base.prisma` は、うまく機能することが確認されているいくつかの例です。

dub.co による `dub` の私たちのフォークは、マルチファイル Prisma Schema を使用するように適応された実際のプロジェクトの素晴らしい例です。

`prismaSchemaFolder` プレビュー機能の詳細はこちら

`prismaSchemaFolder` プレビュー機能に関するフィードバックを提供するには、専用の Github ディスカッション を参照してください。