2024年6月4日

v5.15 で Prisma スキーマを複数のファイルに整理する

Prisma ORM に新しいプレビュー機能が導入されることをお知らせします。それは、Prisma スキーマを複数のファイルに整理する機能です。プロジェクトでの実装方法、ベストプラクティス、および実践的な例については、サンプルプロジェクトをご覧ください。

An image showing several .prisma files with the text "Split your schema!"

更新 (2025年6月): この機能はv6.7.0で一般提供されました。今後はpreviewFeaturesに含める必要はありません。ドキュメントで詳細をご確認ください。

長い道のりでしたが、Prisma ORM 5.15.0 でついに Prisma スキーマで複数のファイルを使用する機能が導入されました。これにより、データベーススキーマの管理性と整理が向上し、大規模なプロジェクトでの作業が容易になることを目指しています。最も要望の多かった機能の1つとして、prismaSchemaFolder プレビュー機能を試していただき、GitHubでご意見をお聞かせいただければ幸いです。皆様からの継続的なフィードバックが、このような機能の提供に役立ちます!

複数ファイル対応 Prisma スキーマ プレビュー機能に含まれるもの

新しい prismaSchemaFolder プレビュー機能により、prisma ディレクトリの schema サブディレクトリに複数のファイルを定義できます。Prisma がファイルの結合を処理するため、1つのファイルでモデルを定義し、それを他のスキーマファイルでインポートすることなく使用できます。また、Prisma Visual Studio Code 拡張機能も更新され、「定義へ移動」や存在チェックを含む複数スキーマファイルの処理に対応しました。

An image of Visual Studio Code showing multiple .prisma files in a schema sub-directory of the prisma directory.

Prisma スキーマを複数のファイルに分割する方法

まず、prisma@prisma/client が少なくとも 5.15.0 に更新されていることを確認してください。また、IDE でこれらのアップデートを利用するには、Prisma VSCode 拡張機能の最新バージョン (5.15.0) が必要です。

Prisma スキーマを複数のファイルに分割するには、まず generatorpreviewFeatures フィールドに prismaSchemaFolder プレビュー機能を含めることで、これを有効にします。

次に、prisma ディレクトリの下に schema サブディレクトリを作成します。既存の schema.prisma をこのディレクトリに移動できます。

これで、schema ディレクトリに追加のファイルを作成できるようになりました!すべてのモデルはすべてのファイルで参照できるため、リレーションは次のようにファイルをまたぐことができます

prisma generate を実行すると、すべてのスキーマファイルが結合されるため、ワークフローは通常通り継続されます。validateformat などの他の Prisma CLI コマンドも、複数ファイル対応の Prisma スキーマで動作するように更新されています。

複数ファイルスキーマを使用する場合

プロジェクトが成長するにつれて、単一ファイルの Prisma スキーマは、効果的に管理するには大きすぎるという点に達することがあると聞いています。この機能は、次の場合にすぐにメリットが得られます。

  • 複雑なスキーマを持っている場合:スキーマに大きなモデルや複雑なリレーションがある場合、関連するモデルを別のファイルに配置することで、スキーマの理解とナビゲートが容易になります。
  • 大規模なチームを抱えている場合:単一の Prisma スキーマファイルがあり、多くの開発者がコミットしている場合、日中にかなり煩わしいマージ競合に遭遇する可能性があります。大規模なスキーマを複数のファイルに分割することで、この問題を軽減できます。

複数ファイル対応 Prisma スキーマのヒント

この機能でうまく機能し、最大限に活用するのに役立ついくつかのパターンが見つかりました

  • ドメイン別にファイルを整理する:関連するモデルを同じファイルにグループ化します。たとえば、ユーザー関連のすべてのモデルは user.prisma に保持し、投稿関連のモデルは post.prisma に配置します。「何でもあり」のスキーマファイルは避けるようにしてください。
  • 明確な命名規則を使用する:スキーマファイルは明確かつ簡潔に命名する必要があります。user.prismapost.prisma のような名前を使用し、myModels.prismaCommentFeaturesSchema.prisma のような名前は避けてください。
  • 明らかな「メイン」スキーマファイルを持つ:スキーマファイルはいくつでも持つことができますが、datasource および generator ブロックを定義する場所は必要です。これらのブロックを簡単に見つけられるように、明らかに「メイン」となる単一のスキーマファイルを持つことをお勧めします。main.prismaschema.prismabase.prisma は、うまく機能することが確認されている例です。

サンプルプロジェクト

この機能が実際のプロジェクトでどのように見えるかを確認したい場合は、お気に入りの OSS プロジェクトの1つである dub.co の dub のフォークをご覧ください!

フィードバックをお待ちしております!

この新機能についてのご意見をお聞かせください。専用の GitHub ディスカッションにコメントすることで、フィードバックや発生した問題をご共有いただけます。

次の投稿をお見逃しなく!

Prisma ニュースレターに登録する

© . All rights reserved.