主要コンテンツにスキップ

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インスタンスが作成されました。
  • 空の 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 ファイルを更新します。

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つは、リレーションを簡単に扱えることです。このセクションでは、ネストされた書き込みクエリで UserPost レコードを作成する方法を学びます。その後、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を使用する方法を学ぶ

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

GitHubの prisma-examples リポジトリをチェックして、Prisma ORMがお好みのライブラリでどのように使用できるかを確認してください。このリポジトリには、Express、NestJS、GraphQLの例に加え、Next.jsやVue.jsを使用したフルスタックの例など、多数の例が含まれています。

これらの例はデフォルトでSQLiteを使用しますが、プロジェクトのREADMEの指示に従えば、いくつかの簡単なステップでPrisma Postgresに切り替えることができます。


Prismaとつながる

Prismaの旅を続けるには、 活発なコミュニティとつながりましょう。情報を得て、参加し、他の開発者と協力しましょう。

  • Xでフォローする お知らせ、ライブイベント、役立つヒントを配信しています。
  • Discordに参加する 質問したり、コミュニティと交流したり、会話を通じて活発なサポートを受けたりできます。
  • YouTubeを購読する チュートリアル、デモ、配信を視聴できます。
  • GitHubで貢献する リポジトリにスターを付けたり、問題を報告したり、問題に貢献したりして参加しましょう。
皆様のご参加を心より歓迎し、コミュニティの一員となることを楽しみにしております!

© . All rights reserved.