Turborepo で Prisma ORM を使用する方法
Prisma はデータベースを管理するための強力な ORM であり、Turborepo はモノレポのワークフローを簡素化します。これらのツールを組み合わせることで、プロジェクトのスケーラブルでモジュール式のアーキテクチャを作成できます。
このガイドでは、Turborepo モノレポで Prisma をスタンドアロンパッケージとしてセットアップする方法について説明します。これにより、複数のアプリにわたる効率的な構成、型共有、およびデータベース管理が可能になります。
学習内容:
- Turborepo モノレポで Prisma をセットアップする方法。
- パッケージ間で PrismaClient を生成および再利用する手順。
- モノレポ内の他のアプリケーションへの Prisma パッケージの統合。
このガイドは、Turborepo バージョン 2.3.3
および Prisma ORM バージョン 6.1.0
を使用してテストされました。
1. turborepo を使用してモノレポを作成する
hello-world
という名前の Turborepo モノレポをセットアップするには、次のコマンドを実行します
npx create-turbo@latest hello-world
セットアップ後、プロジェクトのパッケージマネージャーを選択します。プロジェクトのルートディレクトリに移動し、Turborepo を開発依存関係としてインストールします
- npm
- yarn
- pnpm
cd ./hello-world
npm install turbo --save-dev
cd ./hello-world
yarn add turbo --dev --ignore-workspace-root-check
cd ./hello-world
pnpm add turbo --save-dev --ignore-workspace-root-check
Turborepo のインストールに関する詳細については、公式 Turborepo ガイドを参照してください。
2. 新しい database
パッケージを hello-world
モノレポに追加する
packages
ディレクトリ内に database
パッケージを作成します。次に、パッケージの package.json
ファイルを次のコマンドを実行して作成します
cd packages/
mkdir database
cd database
touch package.json
package.json
ファイルを次のように定義します
{
"name": "@repo/db",
"version": "0.0.0"
}
次に、Prisma ORM を使用するために必要な依存関係をインストールします。お好みのパッケージマネージャーを使用してください
- npm
- yarn
- pnpm
npm install prisma --save-dev
npm install @prisma/client
yarn add prisma --dev
yarn add @prisma/client
pnpm add prisma --save-dev
pnpm add @prisma/client
3. prisma init
を実行して prisma を初期化する
database
ディレクトリ内で、prisma を初期化するには、次を実行します
- npm
- yarn
- pnpm
npx prisma init
yarn prisma init
pnpm prisma init
これにより、packages/database
内にいくつかのファイルが作成されます
schema.prisma
は、Prisma スキーマが置かれる場所です。ここでは、データベースの形状を変更できます。prisma init
コマンドは、デフォルトでPostgreSQL
を使用するように構成を作成します。スキーマを変更して、Prisma ORM でサポートされているデータベースを使用できます。.gitignore
は、いくつかの無視されるファイルを git に追加します.env
を使用すると、prisma のDATABASE_URL
を手動で指定できます。
packages/database/.env
内の DATABASE_URL
を有効なデータベース URL に置き換えてください。
database/prisma/schema.prisma
の Prisma スキーマにモデルを追加します
datasource db {
provider = "postgresql"
url = env("DATABASE_URL")
}
generator client {
provider = "prisma-client-js"
output = "../generated/client"
}
model User {
id Int @id @default(autoincrement())
createdAt DateTime @default(now())
email String @unique
name String?
}
カスタムディレクトリで Prisma 型を生成することの重要性
schema.prisma
ファイルでは、Prisma が型を生成するカスタム output
パスを指定します。これにより、Prisma の型がさまざまなパッケージマネージャー間で正しく解決されるようになります。
このガイドでは、型は
database/generated/client
ディレクトリに生成されます。
4. Prisma CLI コマンドを実行するスクリプトを作成する
packages/database
内の package.json
にいくつかのスクリプトを追加しましょう
{
"scripts": {
"db:generate": "prisma generate",
"db:migrate": "prisma migrate dev --skip-generate",
"db:deploy": "prisma migrate deploy"
}
}
ルートの turbo.json
にもこれらのスクリプトを追加しましょう
{
"tasks": {
"db:generate": {
"cache": false
},
"db:migrate": {
"cache": false,
"persistent": true // This is necessary to interact with the CLI and assign names to your database migrations.
},
"db:deploy": {
"cache": false
}
}
}
1. prisma.schema
を移行して型を生成する
プロジェクトのルートに移動し、次のコマンドを実行してデータベースを自動的に移行します
- npm
- yarn
- pnpm
npx turbo db:migrate
yarn turbo db:migrate
pnpm turbo db:migrate
2. prisma.schema
を生成する
Prisma スキーマから型を生成するには、プロジェクトのルートから次を実行します
- npm
- yarn
- pnpm
npx turbo db:generate
yarn turbo db:generate
pnpm turbo db:generate
5. モノレポ全体で使用される Prisma 型と PrismaClient
のインスタンスをエクスポートする
次に、生成された型と PrismaClient
のインスタンスをエクスポートして、アプリケーションで使用できるようにします。
packages/database
ディレクトリで、src
フォルダーを作成し、client.ts
ファイルを追加します。このファイルは、PrismaClient
のインスタンスを定義します
import { PrismaClient } from "../generated/client";
const globalForPrisma = global as unknown as { prisma: PrismaClient };
export const prisma =
globalForPrisma.prisma || new PrismaClient();
if (process.env.NODE_ENV !== "production") globalForPrisma.prisma = prisma;
次に、src
フォルダーに index.ts
ファイルを作成して、生成された prisma 型と PrismaClient
インスタンスを再エクスポートします
export { prisma } from './client' // exports instance of prisma
export * from "../generated/client" // exports generated types from prisma
ジャストインタイムパッケージングパターンに従い、packages/database/package.json
内にパッケージへのエントリポイントを作成します
{
"exports": {
".": "./src/index.ts"
}
}
これらの手順を完了すると、Prisma 型と PrismaClient
インスタンスがモノレポ全体でアクセス可能になります。
6. database
パッケージをモノレポの web
アプリにインポートする
hello-world
プロジェクトには、apps/web
に web
というアプリが必要です。database
依存関係を apps/web/package.json
に追加します
- npm
- yarn
- pnpm
{
"dependencies": {
"@repo/db": "*"
}
}
{
"dependencies": {
"@repo/db": "*"
}
}
{
"dependencies": {
"@repo/db": "workspace:*"
}
}
apps/web
ディレクトリ内でパッケージマネージャーのインストールコマンドを実行します
- npm
- yarn
- pnpm
cd apps/web
npm install
cd apps/web
yarn install
cd apps/web
pnpm install
web
アプリの page.tsx
ファイルで、database
パッケージからインスタンス化された prisma
クライアントをインポートしましょう
import styles from "./page.module.css";
import { prisma } from "@repo/db";
export default async function Home() {
const user = await prisma.user.findFirst()
return (
<div className={styles.page}>
{user?.name ?? "No user added yet"}
</div>
);
}
次に、web
ディレクトリに .env
ファイルを作成し、DATABASE_URL
を含む database
ディレクトリの .env
ファイルの内容のコピーを作成します。
DATABASE_URL="Same database url as used in the database directory"
Turborepo セットアップのアプリとパッケージ全体でルートディレクトリに単一の .env
ファイルを使用する場合は、dotenvx
のようなパッケージの使用を検討してください。
これを実装するには、各パッケージまたはアプリの package.json
ファイルを更新して、共有 .env
ファイルから必要な環境変数をロードするようにします。詳細な手順については、Turborepo 用の dotenvx
ガイドを参照してください。
Turborepo は、モジュール性を高め、潜在的な競合を回避するために、パッケージごとに個別の .env
ファイルを使用することを推奨していることに注意してください。
7. 依存タスクをセットアップする
db:generate
および db:deploy
スクリプトは、モノレポセットアップ用にまだ最適化されていませんが、dev
および build
タスクには不可欠です。
新しい開発者が最初に db:generate
を実行せずにアプリケーションで turbo dev
を実行すると、エラーが発生します。
これを防ぐには、dev
または build
を実行する前に、db:generate
が常に実行されるようにしてください。さらに、db:deploy
と db:generate
の両方が db:build
の前に実行されるようにしてください。turbo.json
ファイルでこれを構成する方法を次に示します
{
"tasks": {
"dev": {
"dependsOn": ["^db:generate"],
"cache": false
// Additional configuration for dev tasks
},
"build": {
"dependsOn": ["^db:generate"],
// Additional configuration for build tasks
}
}
}
8. プロジェクトを開発で実行する
開発サーバーを起動する前に、Next.js v15.2.0 を使用している場合は、既知の問題があるため、Turbopack を使用しないでください。apps/web/package.json
を更新して、dev スクリプトから Turbopack を削除します
"script":{
"dev": "next dev --turbopack --port 3000",
"dev": "next dev --port 3000",
}
次に、プロジェクトのルートからプロジェクトを実行します
- npm
- yarn
- pnpm
npx turbo run dev --filter=web
yarn turbo run dev --filter=web
pnpm turbo run dev --filter=web
http://localhost:3000
に移動すると、次のメッセージが表示されます
No user added yet
シードスクリプトを作成するか、Prisma Studio を手動で使用して、データベースにユーザーを追加できます。
Prisma Studio を使用して GUI 経由で手動でデータを追加するには、packages/database
ディレクトリに移動し、パッケージマネージャーを使用して prisma studio
を実行します
- npm
- yarn
- pnpm
npx prisma studio
yarn prisma studio
pnpm prisma studio
このコマンドは、http://localhost:5555 で GUI を備えたサーバーを起動し、データを表示および変更できるようにします。
おめでとうございます。Turborepo 用の Prisma のセットアップが完了しました!
Prisma とのつながりを維持する
以下とつながることで Prisma の旅を続けましょう アクティブなコミュニティ。最新情報を入手し、参加し、他の開発者と協力してください
- X でフォローしてください お知らせ、ライブイベント、役立つヒントを入手してください。
- Discord に参加する 質問をしたり、コミュニティと話したり、会話を通じて積極的なサポートを受けたりできます。
- YouTube でチャンネル登録する チュートリアル、デモ、ストリームをご覧ください。
- GitHub でエンゲージする リポジトリにスターを付けたり、問題を報告したり、問題に貢献したりしてください。