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

CLIから

このページでは、prisma init --db でセットアップした後の Prisma Postgres のステップバイステップガイドを提供します。

  1. Prisma ORM を使用して TypeScript アプリをセットアップする
  2. データベースのスキーマを移行する
  3. TypeScript からデータベースにクエリを実行する

前提条件

このガイドは、prisma init --dbPrisma Postgres インスタンスをセットアップ済みであることを前提としています。

npx prisma@latest init --db
表示CLI結果

このコマンドが終了すると

  • Prisma Data Platform にログインしました。
  • 新しい Prisma Postgres インスタンスが作成されました。
  • prisma/ フォルダが作成され、空の schema.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 ファイルを更新します。

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 に貼り付けます。

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 ファイルに追加します。

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
表示CLI結果
{ id: 1, email: 'alice@prisma.io', name: 'Alice' }

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

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

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

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

index.ts
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
表示CLI結果
[{ id: 1, email: 'alice@prisma.io', name: 'Alice' }]

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

4.3. 関係クエリを探索する

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

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

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: '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
表示CLI結果
{ id: 2, email: 'bob@prisma.io', name: 'Bob' }

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

index.ts
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
表示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 レコードを表しています。

次のステップ

基本的な Prisma Postgres セットアップを試してみました。キャッシュ機能の追加など、より複雑なクエリを探索したい場合は、公式の クイックスタート を確認してください。

Prisma Studio でデータを表示および編集する

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

npx prisma studio

Prisma Postgres を使用すると、Prisma Studio を直接使用することもできます。プロジェクトの Studio タブを選択します。

Next.js でフルスタックアプリを構築する

フルスタックアプリで Prisma Postgres を使用する方法を学びます

すぐに実行できるサンプルを探索する

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

これらの例ではデフォルトで SQLite が使用されていますが、プロジェクトの README の手順に従って、いくつかの簡単な手順で Prisma Postgres に切り替えることができます。


Prisma とつながる

Prisma の旅を続けるには、以下とつながってください。 アクティブなコミュニティ。常に情報を入手し、参加し、他の開発者と協力してください。

皆様のご参加を心より歓迎し、コミュニティの一員としてお迎えできることを楽しみにしています!