DUICUO

Prismaの使用を検討すべき理由

Prismaは急速に私のお気に入りのORMフレームワークになりつつありますが、それには十分な理由があります。Webプロジェクトを作成する際に、データベース接続の設定は常に面倒な作業でした。ORMは以前から存在し、多くの場合このプロセスを簡素化してきましたが、常に何らかの欠点を抱えているように思います。

開発者なら誰でも、ORMフレームワークには改善してほしい点が必ずあります。しかし私にとって、このデザインパターンはデータを素早く表示・編集する機能を提供してくれました。Prismaはこれらの問題だけでなく、私が気づいていなかった問題も解決してくれました。

Prismaとは何ですか?

Prisma は、Node.js、TypeScript、Go 向けの次世代データベース ORM フレームワークであると自称しています。

Prisma は、PostgreSQL、MySQL、MongoDB、SQL Server、SQLite をサポートし、開発者がアプリケーションをより速く構築し、エラーを削減するのに役立つオープンソースのデータベース ツールチェーン プロジェクトです。

プリズマスキーマ

Prismaのコア機能は、Prismaスキーマファイルを通じてデータモデルを定義することです。PrismaスキーマファイルはPSL(Prisma Schema Language)と呼ばれる属性言語で記述されており、習得には数分かかります。スキーマファイルは3つの主要コンポーネントで構成されています。まず、データソースである`datasource`で、データベースのURLとデータベースの種類を設定します。この場合、`provider`は使用するデータベースの種類を示します。以下のようになります。

 データソースdb {
url = env ( "DATABASE_URL" )
プロバイダー= "postgresql"
}

次のセクションは「ジェネレータ」フィールドです。このフィールドでは、データモデルに基づいて生成するクライアントを指定します。この機能を使うと、Prismaによって生成されたクライアントを使用してCRUD操作を実行できます。これらについては後ほど説明しますが、この部分は次のようになります

 ジェネレータクライアント{
プロバイダー= "prisma-client-js"
}

最後に、アプリケーションモデルのデータモデルのフィールドをデータベースに定義する必要があります。これがこのドキュメントの焦点となります。ここでは、アプリケーションモデルとデータのマッピングを作成します。この部分は慣れるまでに最も時間がかかりますが、それでも馴染みのあるものに感じられるでしょう。PSLは通常のJSオブジェクトを作成するのではなく、モデルを異なる方法でフォーマットします。ただし、すべてのフィールドは使い慣れたインタラクションメソッドと同じです。以下はユーザーモデルの例です。

 モデルユーザー{
id Int @id @default ( 自動インクリメント())
作成日時@default ( now ())
メール文字@ユニーク
名前文字?
ロールロール@default ( USER )
投稿投稿[]
}

このユーザーモデルには6つのフィールドがあります。「id」はデフォルト値を持つ整数で、自動的に増加します。他にも標準的な属性と独自の属性がいくつかあります(公式ドキュメントで詳しく確認できます)。次に「モデル間の関係はどのように機能するのか?」という疑問が湧くかもしれません。幸いなことに、関係は非常に簡単に理解できます。以下はユーザーの投稿のモデルです。

 モデル投稿{
id Int @id @default ( 自動インクリメント())
作成日時@default ( now ())
更新日時@updatedAt
公開ブール値@default ( false )
タイトル文字列@db . VarChar ( 255 )
著者ユーザー? @relation ( フィールド: [ authorId ], 参照: [ id ])
著者ID Int ?
}

この関係は投稿のauthorフィールドで定義されています。意味は非常にシンプルです。authorフィールドはユーザーであり、ユーザーモデルUserを参照しています。次に、投稿モデルPostの「authorId」フィールドを使用して、ユーザーモデルUserの「id」フィールドを参照する関係を作成します。最後に解決すべき重要な問題は、データベースと定義済みモデルの同期を維持することです。PrismaはPrisma Migrateを通じてこれを実現します。これは、データベースに加えた変更をすべて移行できるシンプルなコマンドラインツールです。移行機能については公式ドキュメントを参照してください。 <a name="v8LM3"></a>

CRUD

Prisma SchemaファイルのGeneratorセクションを忘れないでください。ここでGeneratorブロックを使用します。PrismaはGeneratorブロックを使用してクライアントの構築方法を決定します。Generatorブロックは、データに対する型安全なクエリを実行するために構築されています。これにより、データクエリを実行する関数がはるかに理解しやすく、使いやすくなります。

 const newUser = prisma.user.create ( { 
データ: {
名前「アリス」
メールアドレス: '[email protected]'
},
})
const users = prisma.user.findMany () 待機します

これはユーザーの作成と検索の例です。データ用のクライアントが生成されると、PrismaはPrismaオブジェクトにデータに完全に関連するメソッドを追加します。ユーザーと投稿の例を続けると、これも実行できるようになります。

 プリズマ.ポスト. 作成( )

複雑なクエリ操作の詳細については、ここを参照してください。 <a name="DrufO"></a>

Prismaの利点

内省


既に異なるORMを使用しているプロジェクトであっても、Prismaを検討する理由となる機能が少なくとも2つあります。イントロスペクションは、既存のデータベースと一致するPrismaスキーマを生成できる機能です。そのため、既に好みのデータベースをセットアップしていてPrismaを試してみたい場合でも、プロセスはシームレスかつシンプルです。Prismaスキーマファイルは既に生成されているので、すぐにPrismaを使い始めることができます。これらすべてが1つのコマンドで実行されます。

 プリズマDB プル

プリズマスタジオ

PrismaはローカルWebクライアントも作成するため、いつでもデータを変更・更新できます。Prisma Studioは、データの迅速な検査や変更のテストに最適です。PgAdminやMySQL Workbenchほど高度ではありませんが、ほとんどのデータベースタスクに十分なオプションを提供しています。唯一の不満は、Sanityのようにインターフェースをカスタマイズできないことです。