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

クイックスタート

このクイックスタートガイドでは、プレーンなTypeScriptプロジェクトとローカルのSQLiteデータベースファイルを使用して、Prisma ORMを最初から始める方法を学びます。ここでは、データモデリングマイグレーション、およびデータベースのクエリについて説明します。

独自のPostgreSQL、MySQL、MongoDB、またはその他のサポートされているデータベースでPrisma ORMを使用する場合は、代わりにこちらをご覧ください

前提条件

マシンにNode.jsがインストールされている必要があります(公式にサポートされているバージョンについては、システム要件を参照してください)。

1. TypeScriptプロジェクトを作成し、Prisma ORMをセットアップする

最初のステップとして、プロジェクトディレクトリを作成し、そこに移動します

mkdir hello-prisma
cd hello-prisma

次に、npmを使用してTypeScriptプロジェクトを初期化します

npm init -y
npm install typescript tsx @types/node --save-dev

これにより、TypeScriptアプリの初期設定を含むpackage.jsonが作成されます。

情報

インストール手順を参照して、別のパッケージマネージャーを使用してPrismaをインストールする方法を学んでください。

次に、TypeScriptを初期化します

npx tsc --init

次に、Prisma CLIを開発依存関係としてプロジェクトにインストールします

npm install prisma --save-dev

最後に、Prisma CLIのinitコマンドでPrisma ORMをセットアップします

npx prisma init --datasource-provider sqlite --output ../generated/prisma

これにより、schema.prismaファイルを含む新しいprismaディレクトリが作成され、データベースとしてSQLiteが構成されます。これで、データをモデル化し、テーブルを含むデータベースを作成する準備が整いました。

注意

最良の結果を得るには、生成されたクライアントをアプリケーションから除外するために、.gitignoreに1行追加してください。この例では、generated/prismaディレクトリを除外します。

.gitignore
generated/prisma/

2. Prismaスキーマでデータをモデル化する

Prismaスキーマは、データをモデル化するための直感的な方法を提供します。次のモデルをschema.prismaファイルに追加します

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

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

Prismaスキーマのモデルには、主に2つの目的があります

  • 基盤となるデータベースのテーブルを表す
  • 生成されたPrisma Client APIの基盤として機能する

次のセクションでは、Prisma Migrateを使用してこれらのモデルをデータベーステーブルにマッピングします。

3. マイグレーションを実行してPrisma Migrateでデータベーステーブルを作成する

現時点では、Prismaスキーマはありますが、データベースはまだありません。ターミナルで次のコマンドを実行して、SQLiteデータベースと、モデルで表されるUserテーブルとPostテーブルを作成します

npx prisma migrate dev --name init

このコマンドは3つのことを行いました

  1. prisma/migrationsディレクトリにこのマイグレーションの新しいSQLマイグレーションファイルを作成しました。
  2. SQLマイグレーションファイルをデータベースに対して実行しました。
  3. バックグラウンドでprisma generateを実行しました(これにより、@prisma/clientパッケージがインストールされ、モデルに基づいて調整されたPrisma Client APIが生成されました)。

SQLiteデータベースファイルが以前に存在しなかったため、このコマンドは.envファイル内の環境変数で定義されている名前dev.dbprismaディレクトリ内に作成しました。

おめでとうございます、これでデータベースとテーブルの準備ができました。いくつかのクエリを送信してデータを読み書きする方法を学びましょう!

4. Prisma Clientでデータベースにクエリを送信する方法を調べる

Prisma Clientを使い始めるには、@prisma/clientパッケージをインストールする必要があります

npm install @prisma/client

インストールコマンドはprisma generateを呼び出し、Prismaスキーマを読み取り、モデルに合わせて調整されたPrisma Clientのバージョンを生成します。

データベースにクエリを送信するには、Prisma Clientクエリを実行するためのTypeScriptファイルが必要です。この目的のためにscript.tsという名前の新しいファイルを作成します

touch script.ts

次に、次のボイラープレートを貼り付けます

script.ts
import { PrismaClient } from '../generated/prisma'

const prisma = new PrismaClient()

async function main() {
// ... you will write your Prisma Client queries here
}

main()
.then(async () => {
await prisma.$disconnect()
})
.catch(async (e) => {
console.error(e)
await prisma.$disconnect()
process.exit(1)
})

このコードには、スクリプトの最後に呼び出されるmain関数が含まれています。また、データベースへのクエリインターフェースを表すPrismaClientをインスタンス化します。

4.1. 新しいUserレコードを作成する

データベースに新しいUserレコードを作成し、結果のオブジェクトをコンソールにログ出力する小さなクエリから始めましょう。次のコードをscript.tsファイルに追加します

script.ts
import { PrismaClient } from '../generated/prisma'

const prisma = new PrismaClient()

async function main() {
const user = await prisma.user.create({
data: {
name: 'Alice',
email: 'alice@prisma.io',
},
})
console.log(user)
}

main()
.then(async () => {
await prisma.$disconnect()
})
.catch(async (e) => {
console.error(e)
await prisma.$disconnect()
process.exit(1)
})

コードをコピーする代わりに、エディターで入力して、Prisma Clientが提供するオートコンプリートを体験できます。キーボードのCTRL+SPACEキーを押して、オートコンプリートを積極的に呼び出すこともできます。

次に、次のコマンドでスクリプトを実行します

npx tsx script.ts
表示CLI結果
{ id: 1, email: 'alice@prisma.io', name: 'Alice' }

素晴らしい、Prisma Clientで最初のデータベースレコードを作成しました!🎉

次のセクションでは、データベースからデータを読み取る方法を学びます。

4.2. すべてのUserレコードを取得する

Prisma Clientは、データベースからデータを読み取るためのさまざまなクエリを提供します。このセクションでは、特定のモデルのデータベース内のすべてのレコードを返すfindManyクエリを使用します。

前のPrisma Clientクエリを削除し、代わりに新しいfindManyクエリを追加します

script.ts
import { PrismaClient } from '../generated/prisma'

const prisma = new PrismaClient()

async function main() {
const users = await prisma.user.findMany()
console.log(users)
}

main()
.then(async () => {
await prisma.$disconnect()
})
.catch(async (e) => {
console.error(e)
await prisma.$disconnect()
process.exit(1)
})

スクリプトを再度実行します

npx tsx script.ts
表示CLI結果
[{ id: 1, email: 'alice@prisma.io', name: 'Alice' }]

単一のUserオブジェクトがコンソールで角かっこで囲まれていることに注目してください。これは、findManyが単一のオブジェクトを含む配列を返したためです。

4.3. Prisma Clientでリレーションクエリを調べる

Prisma Clientの主な機能の1つは、リレーションの操作が容易であることです。このセクションでは、ネストされた書き込みクエリでUserレコードとPostレコードを作成する方法を学びます。その後、includeオプションを使用してデータベースからリレーションを取得する方法を確認します。

まず、ネストされたクエリを含めるようにスクリプトを調整します

script.ts
import { PrismaClient } from '../generated/prisma'

const prisma = new PrismaClient()

async function main() {
const user = await prisma.user.create({
data: {
name: 'Bob',
email: 'bob@prisma.io',
posts: {
create: [
{
title: 'Hello World',
published: true
},
{
title: 'My second post',
content: 'This is still a draft'
}
],
},
},
})
console.log(user)
}

main()
.then(async () => {
await prisma.$disconnect()
})
.catch(async (e) => {
console.error(e)
await prisma.$disconnect()
process.exit(1)
})

スクリプトを再度実行してクエリを実行します

npx tsx script.ts
表示CLI結果
{ id: 2, email: 'bob@prisma.io', name: 'Bob' }

デフォルトでは、Prisma Clientはクエリの結果オブジェクトでスカラーフィールドのみを返します。そのため、新しいUserレコードの新しいPostレコードも作成しましたが、コンソールには3つのスカラーフィールド(idemail、およびname)を持つオブジェクトのみが出力されました。

Userに属するPostレコードも取得するには、postsリレーションフィールドを介してincludeオプションを使用できます

script.ts
import { PrismaClient } from '../generated/prisma'

const prisma = new PrismaClient()

async function main() {
const usersWithPosts = await prisma.user.findMany({
include: {
posts: true,
},
})
console.dir(usersWithPosts, { depth: null })
}

main()
.then(async () => {
await prisma.$disconnect()
})
.catch(async (e) => {
console.error(e)
await prisma.$disconnect()
process.exit(1)
})

スクリプトを再度実行して、ネストされた読み取りクエリの結果を確認します

npx tsx script.ts
表示CLI結果
[
{ id: 1, email: 'alice@prisma.io', name: 'Alice', posts: [] },
{
id: 2,
email: 'bob@prisma.io',
name: 'Bob',
posts: [
{
id: 1,
title: 'Hello World',
content: null,
published: true,
authorId: 2
},
{
id: 2,
title: 'My second post',
content: 'This is still a draft',
published: false,
authorId: 2
}
]
}
]

今回は、2つのUserオブジェクトが出力されていることがわかります。どちらにもpostsフィールドがあり("Alice"の場合は空で、"Bob"の場合は2つのPostオブジェクトが入力されています)、それらに関連付けられたPostレコードを表しています。

usersWithPosts配列内のオブジェクトも完全に型付けされていることに注意してください。これは、オートコンプリートを取得し、TypeScriptコンパイラーが誤って入力するのを防ぐことを意味します。

5. 次のステップ

このクイックスタートガイドでは、プレーンなTypeScriptプロジェクトでPrisma ORMを始める方法を学びました。findManyクエリにフィルタリング、ソート、ページネーションオプションを含めたり、updateクエリやdeleteクエリなどのより多くの操作を調べたりするなど、Prisma Client APIをもう少し自分で自由に探索してください。

Prisma Studioでデータを探索する

Prisma ORMには、データベース内のデータを表示および編集するための組み込みGUIが付属しています。次のコマンドを使用して開くことができます

npx prisma studio

独自のデータベースでPrisma ORMをセットアップする

独自のPostgreSQL、MySQL、MongoDB、またはその他のサポートされているデータベースを使用してPrisma ORMを進めたい場合は、Prisma ORMのセットアップガイドに従ってください

Prisma Optimizeでクエリの洞察と分析を取得する

Prisma Optimizeは、洞察を生成し、データベースクエリを高速化するのに役立つ推奨事項を提供します。

Optimizeは、すべてのスキルレベルの開発者が効率的なデータベースクエリを作成し、データベースの負荷を軽減し、アプリケーションの応答性を高めることを目指しています。

すぐに実行できるPrisma ORMの例を探索する

prisma-examples GitHubのリポジトリをチェックして、Prisma ORMをお気に入りのライブラリで使用する方法を確認してください。リポジトリには、Express、NestJS、GraphQLの例だけでなく、Next.jsやVue.jsを使用したフルスタックの例、その他多数が含まれています。

Prisma Accelerateでデータベースクエリを高速化する

Prisma Accelerateは、データベースクエリを大幅に高速化できるコネクションプーラーおよびグローバルデータベースキャッシュです。スピードテストをチェックするか、お気に入りのフレームワークでAccelerateを試してみてください

デモ説明
nextjs-starterPrisma Accelerateのキャッシングとコネクションプーリングを使用したNext.jsプロジェクト
svelte-starterPrisma Accelerateのキャッシングとコネクションプーリングを使用したSvelteKitプロジェクト
solidstart-starterPrisma Accelerateのキャッシングとコネクションプーリングを使用したSolidstartプロジェクト
remix-starterPrisma Accelerateのキャッシングとコネクションプーリングを使用したRemixプロジェクト
nuxt-starterPrisma Accelerateのキャッシングとコネクションプーリングを使用したNuxt.jsプロジェクト
astro-starterPrisma Accelerateのキャッシングとコネクションプーリングを使用したAstroプロジェクト

Prisma ORMでアプリを構築する

Prismaブログでは、Prisma ORMに関する包括的なチュートリアルを紹介しています。最新のものをチェックしてください


Prismaとのつながりを保つ

以下とつながることで、Prismaの旅を続けましょう アクティブなコミュニティ。最新情報を入手し、参加し、他の開発者と協力する

私たちはあなたの参加を心から大切にし、コミュニティの一員としてあなたをお迎えできることを楽しみにしています!