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

Prisma ORM とは?

Prisma ORMは、オープンソースの次世代ORMです。以下の部分で構成されています。

  • Prisma Client: Node.jsとTypeScript用の自動生成された型安全なクエリビルダー

  • Prisma Migrate: マイグレーションシステム

  • Prisma Studio: データベース内のデータを表示・編集するためのGUI

    情報

    Prisma Studio は、Prisma ORM の唯一の非オープンソース部分です。Prisma Studio はローカルでのみ実行できます。

Prisma Client は、Node.js (サポートされているバージョン) または TypeScript のあらゆるバックエンドアプリケーション (サーバーレスアプリケーションやマイクロサービスを含む) で使用できます。これには、REST APIGraphQL API、gRPC API、その他データベースを必要とするものすべてが含まれます。

Prisma ORMの仕組み

Prismaスキーマ

Prisma ORM ツールキットのツールを使用するすべてのプロジェクトは、Prisma スキーマから始まります。Prisma スキーマを使用すると、開発者は直感的なデータモデリング言語でアプリケーションモデルを定義できます。また、データベースへの接続が含まれており、ジェネレーターを定義します。

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

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

model Post {
id Int @id @default(autoincrement())
title String
content String?
published Boolean @default(false)
author User? @relation(fields: [authorId], references: [id])
authorId Int?
}

model User {
id Int @id @default(autoincrement())
email String @unique
name String?
posts Post[]
}

注意:Prismaスキーマには強力なデータモデリング機能があります。たとえば、「Prismaレベル」のリレーションフィールドを定義でき、これによりPrisma Client APIでのリレーションの操作が容易になります。上記の例では、Userpostsフィールドは「Prismaレベル」でのみ定義されており、これは基盤となるデータベースに外部キーとして現れないことを意味します。

このスキーマでは、3つのことを設定します。

  • データソース: データベース接続を指定します(環境変数経由)
  • ジェネレーター: Prisma Clientを生成することを示します
  • データモデル: アプリケーションモデルを定義します

Prismaスキーマデータモデル

このページでは、データモデルに焦点を当てます。データソースジェネレーターについては、それぞれのドキュメントページで詳しく学ぶことができます。

Prismaスキーマデータモデルの機能

データモデルはモデルの集合体です。モデルには2つの主要な機能があります。

  • リレーショナルデータベースのテーブルまたはMongoDBのコレクションを表す
  • Prisma Client APIにおけるクエリの基盤を提供する

データモデルの取得

Prismaスキーマにデータモデルを「取得」するための主要なワークフローは2つあります。

  • データモデルを手動で記述し、Prisma Migrateを使用してデータベースにマッピングする
  • データベースをイントロスペクトしてデータモデルを生成する

データモデルが定義されると、定義されたモデルに対してCRUDなど、より多くのクエリを公開するPrisma Clientを生成できます。TypeScriptを使用している場合、すべてのクエリ(モデルフィールドのサブセットのみを取得する場合でも)に対して完全な型安全性が得られます。

Prisma Clientでデータベースにアクセスする

Prisma Clientの生成

Prisma Clientを使用する際の最初のステップは、@prisma/client および prisma npm パッケージをインストールすることです。

npm install prisma --save-dev
npm install @prisma/client

次に、prisma generate を実行できます。

npx prisma generate

prisma generate コマンドは、Prisma スキーマを読み取り、Prisma Client コードを生成します。コードはデフォルトでnode_modules/.prisma/client フォルダーに生成されます

データモデルを変更した後、node_modules/.prisma/client 内のコードが更新されるように、手動で prisma generate を実行して Prisma Client を再生成する必要があります。

Prisma Client を使用してデータベースにクエリを送信する

Prisma Clientが生成されたら、コードにインポートしてデータベースにクエリを送信できます。これがセットアップコードです。

Prisma Clientのインポートとインスタンス化
import { PrismaClient } from '@prisma/client'

const prisma = new PrismaClient()

これで、生成されたPrisma Client API経由でクエリを送信できます。ここにいくつかのサンプルクエリがあります。Prisma Clientのすべてのクエリは通常のJavaScriptオブジェクトを返すことに注意してください。

Prisma Client APIリファレンスで利用可能な操作について詳しく学ぶことができます。

データベースからすべてのUserレコードを取得する
// Run inside `async` function
const allUsers = await prisma.user.findMany()
返された各Userオブジェクトにpostsリレーションを含める
// Run inside `async` function
const allUsers = await prisma.user.findMany({
include: { posts: true },
})
「prisma」を含むすべてのPostレコードをフィルタリングする
// Run inside `async` function
const filteredPosts = await prisma.post.findMany({
where: {
OR: [
{ title: { contains: 'prisma' } },
{ content: { contains: 'prisma' } },
],
},
})
同じクエリで新しいUserと新しいPostレコードを作成する
// Run inside `async` function
const user = await prisma.user.create({
data: {
name: 'Alice',
email: 'alice@prisma.io',
posts: {
create: { title: 'Join us for Prisma Day 2020' },
},
},
})
既存のPostレコードを更新する
// Run inside `async` function
const post = await prisma.post.update({
where: { id: 42 },
data: { published: true },
})

TypeScriptでの使用

TypeScriptを使用する場合、このクエリの結果は静的に型付けされるため、存在しないプロパティに誤ってアクセスすることがなく(タイプミスもコンパイル時に捕捉されます)、安心してください。Prisma Clientの生成された型の活用方法については、ドキュメントの生成された型の高度な使用ページを参照してください。

Prisma ORMの典型的なワークフロー

前述のとおり、データモデルをPrismaスキーマに「取得」する方法は2つあります。どちらのアプローチを選択するかによって、主要なPrisma ORMワークフローは異なる場合があります。

Prisma Migrate

Prisma ORM に統合されたデータベースマイグレーションツールである Prisma Migrate を使用すると、ワークフローは次のようになります。

  1. Prismaスキーマデータモデルを手動で調整する
  2. prisma migrate dev CLIコマンドを使用して開発データベースをマイグレートする
  3. アプリケーションコードでPrisma Clientを使用してデータベースにアクセスする

Typical workflow with Prisma Migrate

Prisma Migrate ワークフローの詳細については、以下を参照してください。

SQLマイグレーションとイントロスペクション

何らかの理由でPrisma Migrateを使用できない、または使用したくない場合でも、イントロスペクションを使用してデータベーススキーマからPrismaスキーマを更新できます。SQLマイグレーションとイントロスペクションを使用する際の典型的なワークフローは若干異なります。

  1. SQLまたはサードパーティのマイグレーションツールを使用してデータベーススキーマを手動で調整する
  2. データベースを(再)イントロスペクトする
  3. 必要に応じてPrisma Client APIを(再)設定する
  4. Prisma Clientを(再)生成する
  5. アプリケーションコードでPrisma Clientを使用してデータベースにアクセスする

Introspect workflow

イントロスペクションのワークフローの詳細については、イントロスペクションのセクションを参照してください。

© . All rights reserved.