クイックスタート
このクイックスタートガイドでは、プレーンな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
ディレクトリを除外します。
generated/prisma/
2. 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つのことを行いました
prisma/migrations
ディレクトリにこのマイグレーションの新しいSQLマイグレーションファイルを作成しました。- SQLマイグレーションファイルをデータベースに対して実行しました。
- バックグラウンドで
prisma generate
を実行しました(これにより、@prisma/client
パッケージがインストールされ、モデルに基づいて調整されたPrisma Client APIが生成されました)。
SQLiteデータベースファイルが以前に存在しなかったため、このコマンドは.env
ファイル内の環境変数で定義されている名前dev.db
でprisma
ディレクトリ内に作成しました。
おめでとうございます、これでデータベースとテーブルの準備ができました。いくつかのクエリを送信してデータを読み書きする方法を学びましょう!
4. Prisma Clientでデータベースにクエリを送信する方法を調べる
Prisma Clientを使い始めるには、@prisma/client
パッケージをインストールする必要があります
npm install @prisma/client
インストールコマンドはprisma generate
を呼び出し、Prismaスキーマを読み取り、モデルに合わせて調整されたPrisma Clientのバージョンを生成します。
データベースにクエリを送信するには、Prisma Clientクエリを実行するためのTypeScriptファイルが必要です。この目的のためにscript.ts
という名前の新しいファイルを作成します
touch 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
ファイルに追加します
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
{ id: 1, email: 'alice@prisma.io', name: 'Alice' }
素晴らしい、Prisma Clientで最初のデータベースレコードを作成しました!🎉
次のセクションでは、データベースからデータを読み取る方法を学びます。
4.2. すべてのUser
レコードを取得する
Prisma Clientは、データベースからデータを読み取るためのさまざまなクエリを提供します。このセクションでは、特定のモデルのデータベース内のすべてのレコードを返すfindMany
クエリを使用します。
前のPrisma Clientクエリを削除し、代わりに新しいfindMany
クエリを追加します
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
[{ id: 1, email: 'alice@prisma.io', name: 'Alice' }]
単一のUser
オブジェクトがコンソールで角かっこで囲まれていることに注目してください。これは、findMany
が単一のオブジェクトを含む配列を返したためです。
4.3. Prisma Clientでリレーションクエリを調べる
Prisma Clientの主な機能の1つは、リレーションの操作が容易であることです。このセクションでは、ネストされた書き込みクエリでUser
レコードとPost
レコードを作成する方法を学びます。その後、include
オプションを使用してデータベースからリレーションを取得する方法を確認します。
まず、ネストされたクエリを含めるようにスクリプトを調整します
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
{ id: 2, email: 'bob@prisma.io', name: 'Bob' }
デフォルトでは、Prisma Clientはクエリの結果オブジェクトでスカラーフィールドのみを返します。そのため、新しいUser
レコードの新しいPost
レコードも作成しましたが、コンソールには3つのスカラーフィールド(id
、email
、およびname
)を持つオブジェクトのみが出力されました。
User
に属するPost
レコードも取得するには、posts
リレーションフィールドを介してinclude
オプションを使用できます
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
[
{ 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-starter | Prisma Accelerateのキャッシングとコネクションプーリングを使用したNext.jsプロジェクト |
svelte-starter | Prisma Accelerateのキャッシングとコネクションプーリングを使用したSvelteKitプロジェクト |
solidstart-starter | Prisma Accelerateのキャッシングとコネクションプーリングを使用したSolidstartプロジェクト |
remix-starter | Prisma Accelerateのキャッシングとコネクションプーリングを使用したRemixプロジェクト |
nuxt-starter | Prisma Accelerateのキャッシングとコネクションプーリングを使用したNuxt.jsプロジェクト |
astro-starter | Prisma Accelerateのキャッシングとコネクションプーリングを使用したAstroプロジェクト |
Prisma ORMでアプリを構築する
Prismaブログでは、Prisma ORMに関する包括的なチュートリアルを紹介しています。最新のものをチェックしてください
Prismaとのつながりを保つ
以下とつながることで、Prismaの旅を続けましょう アクティブなコミュニティ。最新情報を入手し、参加し、他の開発者と協力する
- Xでフォローしてください お知らせ、ライブイベント、役立つヒントを入手できます。
- Discordに参加する 質問をし、コミュニティと話し、会話を通じてアクティブなサポートを受ける。
- YouTubeで購読する チュートリアル、デモ、ストリームを入手できます。
- GitHubでエンゲージする リポジトリにスターを付けたり、問題を報告したり、問題に貢献したりできます。