CLIから
このページでは、prisma init --db
でPrisma Postgresをセットアップした後のステップバイステップガイドを提供します。
- Prisma ORMでTypeScriptアプリをセットアップする
- データベースのスキーマをマイグレートする
- TypeScriptからデータベースをクエリする
前提条件
このガイドでは、prisma init --db
でPrisma Postgresインスタンスをセットアップ済みであることを前提としています。
npx prisma@latest init --db
このコマンドが終了すると
- Prisma Data Platformにログインしました。
- 新しいPrisma Postgresインスタンスが作成されました。
- 空の
schema.prisma
ファイルとともにprisma/
フォルダーが作成されました。 DATABASE_URL
環境変数が.env
ファイルに設定されました。
1. プロジェクトディレクトリを整理する
プロジェクトを置きたいフォルダー内で prisma init --db
コマンドを実行した場合は、このステップをスキップして次のセクションに進むことができます。
意図したプロジェクトディレクトリの外(例:ホームフォルダーや別の場所)でコマンドを実行した場合は、生成された prisma
フォルダーと .env
ファイルを専用のプロジェクトディレクトリに移動する必要があります。
プロジェクトを置きたい新しいフォルダー(例:hello-prisma
)を作成し、必要なファイルをそこに移動します。
mkdir hello-prisma
mv .env ./hello-prisma/
mv prisma ./hello-prisma/
プロジェクトフォルダーに移動する
cd ./hello-prisma
プロジェクトが正しい場所にあるので、セットアップを続行します。
2. プロジェクトをセットアップする
2.1. TypeScriptをセットアップする
TypeScriptプロジェクトを初期化し、Prisma CLIを開発依存関係として追加します。
npm init -y
npm install typescript tsx @types/node --save-dev
これにより、TypeScriptアプリの初期設定を含む package.json
ファイルが作成されます。
次に、プロジェクトに tsconfig.json
ファイルを使用してTypeScriptを初期化します。
npx tsc --init
2.2. Prisma ORMをセットアップする
Prisma Postgresを使用するために必要な依存関係をインストールします。
npm install prisma --save-dev
npm install @prisma/extension-accelerate
2.3. TypeScriptスクリプトを作成する
ルートディレクトリに index.ts
ファイルを作成します。これはPrisma ORMでアプリケーションをクエリするために使用されます。
touch index.ts
3. データベーススキーマをマイグレートする
シンプルな User
モデルを含めるように 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 Migrate を使用してデータベースをマイグレートします。
npx prisma migrate dev --name init
4. Prisma ORMでクエリを送信する
以下のボイラープレートを index.ts
に貼り付けます。
import { PrismaClient } from '@prisma/client'
import { withAccelerate } from '@prisma/extension-accelerate'
const prisma = new PrismaClient().$extends(withAccelerate())
async function main() {
// ... you will write your Prisma ORM 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
レコードを作成し、結果のオブジェクトをコンソールにログ出力する小さなクエリから始めましょう。以下のコードを index.ts
ファイルに追加してください。
import { PrismaClient } from '@prisma/client'
import { withAccelerate } from '@prisma/extension-accelerate'
const prisma = new PrismaClient().$extends(withAccelerate())
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)
})
次に、以下のコマンドでスクリプトを実行します。
npx tsx index.ts
{ id: 1, email: 'alice@prisma.io', name: 'Alice' }
お見事です!Prisma Postgresで初めてのデータベースレコードを作成しました!🎉
4.2. すべての User
レコードを取得する
Prisma ORMは、データベースからデータを読み取るための様々なクエリを提供します。このセクションでは、特定のモデルのデータベース内のすべてのレコードを返す findMany
クエリを使用します。
前のPrisma ORMクエリを削除し、代わりに新しい findMany
クエリを追加します。
import { PrismaClient } from '@prisma/client'
import { withAccelerate } from '@prisma/extension-accelerate'
const prisma = new PrismaClient().$extends(withAccelerate())
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 index.ts
[{ id: 1, email: 'alice@prisma.io', name: 'Alice' }]
コンソールで単一の User
オブジェクトが角括弧で囲まれていることに注目してください。これは、findMany
が単一のオブジェクトを含む配列を返したためです。
4.3. リレーションクエリを探索する
Prisma ORMの主要な機能の1つは、リレーションを簡単に扱えることです。このセクションでは、ネストされた書き込みクエリで User
と Post
レコードを作成する方法を学びます。その後、include
オプションを使用してデータベースからリレーションを取得する方法を確認します。
まず、ネストされたクエリを含めるようにスクリプトを調整します。
import { PrismaClient } from '@prisma/client'
import { withAccelerate } from '@prisma/extension-accelerate'
const prisma = new PrismaClient().$extends(withAccelerate())
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 index.ts
{ id: 2, email: 'bob@prisma.io', name: 'Bob' }
User
に属する Post
レコードも取得するには、posts
リレーションフィールドを介して include
オプションを使用できます。
import { PrismaClient } from '@prisma/client'
import { withAccelerate } from '@prisma/extension-accelerate'
const prisma = new PrismaClient().$extends(withAccelerate())
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 index.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
レコードを表しています。
次のステップ
基本的なPrisma Postgresのセットアップを体験しました。キャッシュ機能の追加など、より複雑なクエリを探索したい場合は、公式のクイックスタートをご覧ください。
Prisma Studioでデータを表示・編集する
Prisma ORMには、データベース内のデータを表示・編集するための組み込みGUIが付属しています。以下のコマンドを使用して開くことができます。
npx prisma studio
Prisma Postgresでは、Prisma Studioを直接プロジェクトのStudioタブを選択して使用することもできます。
Next.jsでフルスタックアプリを構築する
フルスタックアプリでPrisma Postgresを使用する方法を学ぶ
- Next.js 15でフルスタックアプリを構築する
- Next.js 15サンプルアプリ (認証機能を含む)
すぐに実行できる例を探索する
GitHubの prisma-examples
リポジトリをチェックして、Prisma ORMがお好みのライブラリでどのように使用できるかを確認してください。このリポジトリには、Express、NestJS、GraphQLの例に加え、Next.jsやVue.jsを使用したフルスタックの例など、多数の例が含まれています。
これらの例はデフォルトでSQLiteを使用しますが、プロジェクトのREADMEの指示に従えば、いくつかの簡単なステップでPrisma Postgresに切り替えることができます。
Prismaとつながる
Prismaの旅を続けるには、 活発なコミュニティとつながりましょう。情報を得て、参加し、他の開発者と協力しましょう。
- Xでフォローする お知らせ、ライブイベント、役立つヒントを配信しています。
- Discordに参加する 質問したり、コミュニティと交流したり、会話を通じて活発なサポートを受けたりできます。
- YouTubeを購読する チュートリアル、デモ、配信を視聴できます。
- GitHubで貢献する リポジトリにスターを付けたり、問題を報告したり、問題に貢献したりして参加しましょう。