Prisma ORM ↗ は、次世代の JavaScript / TypeScript ORM です。直感的なデータモデル、自動マイグレーション、型安全、自動補完により、データベース作業の開発体験を高めます。
Prisma ORM の詳細は Prisma のドキュメント ↗ を参照してください。
D1 データベースにアクセスする Cloudflare Worker を、いちからセットアップしてデプロイする手順です。
手順を省略してすぐに始める場合は、下の Deploy to Cloudflare を選びます。
GitHub アカウントにリポジトリが作成され、アプリケーションが Cloudflare Workers にデプロイされます。Cloudflare Workers に慣れていて、手順を飛ばしたい場合に使います。
Cloudflare Workers が初めての場合は、手順を手作業で進めることをおすすめします。
- マシンに
Node.js↗ とnpm↗ がインストールされていること。 - Cloudflare アカウント ↗。
ターミナルを開き、Cloudflare の hello-world ↗ テンプレートで Cloudflare Worker を作成します。
npm create cloudflare@latest prisma-d1-example -- --type hello-worldターミナルで、プロジェクトに関する質問が続きます。
- TypeScript を使うか聞かれたら
yesと答えます。 - Worker をデプロイするか聞かれたら
noと答えます。
Prisma ORM を設定するには、プロジェクトディレクトリに移動し、Prisma CLI をインストールします。
cd prisma-d1-examplenpm i -D prismayarn add -D prismapnpm add -D prismabun add -d prisma次に、Prisma Client パッケージと D1 用のドライバーアダプターをインストールします。
npm i @prisma/client @prisma/adapter-d1yarn add @prisma/client @prisma/adapter-d1pnpm add @prisma/client @prisma/adapter-d1bun add @prisma/client @prisma/adapter-d1最後に、次のコマンドで Prisma ORM に必要なファイルを作成します。
npx prisma init --datasource-provider sqliteyarn prisma init --datasource-provider sqlitepnpm prisma init --datasource-provider sqliteこのコマンドは次を行います。
- Prisma schema ↗ ファイルを含む
prismaディレクトリを作成します。 - Prisma CLI が読む環境変数を設定する
.envファイルを作成します。
このチュートリアルでは .env ファイルは使いません。Prisma ORM と D1 の接続は バインディング で行います。次の手順でこのバインディングを設定します。
現在 Preview の ドライバーアダプター ↗ 機能を使うため、generator ブロックの previewFeatures フィールドで明示的に有効にします。
schema.prisma を開き、generator ブロックを次のように変更します。
generator client {
provider = "prisma-client-js"
output = "../src/generated/prisma"
previewFeatures = ["driverAdapters"]
}この手順では D1 データベースを用意します。D1 データベースは Cloudflare ダッシュボード ↗ または wrangler で作成できます。このチュートリアルでは wrangler CLI を使います。
ターミナルを開き、次のコマンドを実行します。
npx wrangler d1 create prisma-demo-dbターミナルに次のような出力が表示されます。
✅ Successfully created DB 'prisma-demo-db' in region WEUR
Created your new D1 database.
{
"d1_databases": [
{
"binding": "DB",
"database_name": "prisma-demo-db",
"database_id": "<D1_DATABASE_ID>"
}
]
}Cloudflare アカウントに D1 データベースができ、Cloudflare Worker へのバインディングも用意されています。
コマンド出力の最後の部分をコピーし、Wrangler ファイルに貼り付けます。次のようになります。
{
"$schema": "./node_modules/wrangler/config-schema.json",
"name": "prisma-d1-example",
"main": "src/index.ts",
// Set this to today's date
"compatibility_date": "2026-09-20",
"compatibility_flags": [
"nodejs_compat"
],
"observability": {
"enabled": true
},
"d1_databases": [
{
"binding": "DB", // i.e. available in your Worker on env.DB
"database_name": "prisma-demo-db",
"database_id": "<D1_DATABASE_ID>"
}
]
}"$schema" = "./node_modules/wrangler/config-schema.json"
name = "prisma-d1-example"
main = "src/index.ts"
# Set this to today's date
compatibility_date = "2026-09-20"
compatibility_flags = [ "nodejs_compat" ]
[observability]
enabled = true
[[d1_databases]]
binding = "DB"
database_name = "prisma-demo-db"
database_id = "<D1_DATABASE_ID>"<D1_DATABASE_ID> を D1 インスタンスのデータベース ID に置き換えます。ターミナル出力から取得できなかった場合は、Cloudflare ダッシュボード ↗ で確認するか、ターミナルで npx wrangler d1 info prisma-demo-db を実行します。
次に、Prisma ORM で D1 にクエリを送るためのテーブルをデータベースに作成します。
Prisma Migrate ↗ はまだ D1 に対応していないため、prisma migrate dev や prisma db push の標準ワークフローは使えません。
D1 はスキーマ変更の管理に マイグレーション を使います。Prisma CLI は、その更新に必要な SQL の生成を支援できます。以降の手順では、両方のツールでマイグレーションを作成し、データベースに適用します。
まず wrangler で新しいマイグレーションを作成します。
npx wrangler d1 migrations create prisma-demo-db create_user_tablemigrations フォルダーを作成するか聞かれたら yes と答えます。
コマンドにより migrations ディレクトリと、その中の空ファイル 0001_create_user_table.sql が作成されます。
- prisma-d1-example
- migrations
- 0001_create_user_table.sql
- migrations
次に、User テーブルを作成する SQL 文をそのファイルに追加します。
schema.prisma を開き、次の User モデルをスキーマに追加します。
model User {
id Int @id @default(autoincrement())
email String @unique
name String?
}次に、上の User モデルと同等の User テーブルを作成する SQL 文を生成します。
npx prisma migrate diff --from-empty --to-schema ./prisma/schema.prisma --script --output migrations/0001_create_user_table.sqlnpx prisma migrate diff --from-empty --to-schema-datamodel ./prisma/schema.prisma --script --output migrations/0001_create_user_table.sql先に作ったマイグレーションファイルに、新しい User テーブルを作成する SQL 文が保存されます。内容は次のとおりです。
-- CreateTable
CREATE TABLE "User" (
"id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
"email" TEXT NOT NULL,
"name" TEXT
);
-- CreateIndex
CREATE UNIQUE INDEX "User_email_key" ON "User"("email");email の UNIQUE INDEX が作られるのは、Prisma スキーマの User モデルが email フィールドに @unique ↗ 属性を使っているためです。
この SQL 文を D1 に送るには、wrangler d1 migrations apply コマンドを使います。このコマンドには次の 2 つのオプションがあります。
--local: 文を D1 の ローカル 版に対して実行します。ローカル版の D1 は、プロジェクトの.wrangler/stateディレクトリにある SQLite データベースファイルです。ローカルマシンで Worker を開発・テストするときに使います。詳細は ローカル開発 を参照してください。--remote: 文を D1 の リモート 版に対して実行します。この版は デプロイ済み の Cloudflare Workers が使います。詳細は リモート開発 を参照してください。
このチュートリアルでは、ローカル開発とリモート開発の両方を行います。まず Worker をローカルでテストし、そのあとデプロイします。
ターミナルを開き、両方のコマンドを実行します。
# For the local database
npx wrangler d1 migrations apply prisma-demo-db --local# For the remote database
npx wrangler d1 migrations apply prisma-demo-db --remoteマイグレーションを適用するか確認されたら、どちらも Yes を選びます。
次に、Worker 起動後にクエリできるデータを作成します。今回は SQL 文をファイルに保存せず実行します。
# For the local database
npx wrangler d1 execute prisma-demo-db --command "INSERT INTO \"User\" (\"email\", \"name\") VALUES
('[email protected]', 'Jane Doe (Local)');" --local# For the remote database
npx wrangler d1 execute prisma-demo-db --command "INSERT INTO \"User\" (\"email\", \"name\") VALUES
('[email protected]', 'Jane Doe (Remote)');" --remotePrisma ORM で Worker からデータベースをクエリするには、次を行います。
EnvインターフェースにDBを追加します。PrismaD1ドライバーアダプターでPrismaClientをインスタンス化します。- Prisma Client でクエリを送り、結果を返します。
src/index.ts を開き、内容をすべて次に置き換えます。
import { PrismaClient } from "./generated/prisma/";
import { PrismaD1 } from "@prisma/adapter-d1";
export default {
async fetch(request, env, ctx) {
const adapter = new PrismaD1(env.DB);
const prisma = new PrismaClient({ adapter });
const users = await prisma.user.findMany();
const result = JSON.stringify(users);
return new Response(result);
},
};import { PrismaClient } from './generated/prisma/';
import { PrismaD1 } from '@prisma/adapter-d1';
export interface Env {
DB: D1Database;
}
export default {
async fetch(request, env, ctx): Promise<Response> {
const adapter = new PrismaD1(env.DB);
const prisma = new PrismaClient({ adapter });
const users = await prisma.user.findMany();
const result = JSON.stringify(users);
return new Response(result);
},
} satisfies ExportedHandler<Env>;Worker を実行する前に、次のコマンドで Prisma Client を生成します。
npx prisma generateデータベースクエリを用意し、Prisma Client を生成したら、Worker をローカルで実行します。
npm run devブラウザーで http://localhost:8787 ↗ を開き、データベースクエリの結果を確認します。
[{ "id": 1, "email": "[email protected]", "name": "Jane Doe (Local)" }]Worker をデプロイするには、次のコマンドを実行します。
npm run deployhttps://prisma-d1-example.USERNAME.workers.dev で Worker にアクセスします。ブラウザーには、リモートの D1 データベースから取得した次のデータが表示されます。
[{ "id": 1, "email": "[email protected]", "name": "Jane Doe (Remote)" }]このチュートリアルを完了すると、D1 をデータベースとして使う Cloudflare Worker をデプロイし、Prisma ORM でクエリできるようになります。
- Prisma のドキュメント ↗。
- ヘルプが必要な場合は、新しい GitHub Discussion ↗ を開くか、Prisma ドキュメントの AI ボット ↗ に質問してください。
- Prisma ORM のすぐ実行できる例 ↗。
- Prisma コミュニティ ↗ を確認し、X の Prisma ↗ をフォローし、Prisma Discord ↗ に参加してください。
- Developer Experience Redefined: Prisma & Cloudflare Lead the Way to Data DX ↗。