Skip to content

非公式本サイトは非公式の日本語ドキュメントであり、Cloudflare 公式サイトではありません。最新情報はdevelopers.cloudflare.comをご確認ください。

Prisma ORM で D1 をクエリする

最終更新 Markdown で表示Agent セットアップ

Prisma ORM とは

Prisma ORM は、次世代の JavaScript / TypeScript ORM です。直感的なデータモデル、自動マイグレーション、型安全、自動補完により、データベース作業の開発体験を高めます。

Prisma ORM の詳細は Prisma のドキュメント を参照してください。

Prisma ORM を使って Cloudflare Worker から D1 をクエリする

D1 データベースにアクセスする Cloudflare Worker を、いちからセットアップしてデプロイする手順です。

クイックスタート

手順を省略してすぐに始める場合は、下の Deploy to Cloudflare を選びます。

Deploy to Cloudflare

GitHub アカウントにリポジトリが作成され、アプリケーションが Cloudflare Workers にデプロイされます。Cloudflare Workers に慣れていて、手順を飛ばしたい場合に使います。

Cloudflare Workers が初めての場合は、手順を手作業で進めることをおすすめします。

前提条件

1. Cloudflare Worker を作成する

ターミナルを開き、Cloudflare の hello-world テンプレートで Cloudflare Worker を作成します。

npm create cloudflare@latest prisma-d1-example -- --type hello-world

ターミナルで、プロジェクトに関する質問が続きます。

  1. TypeScript を使うか聞かれたら yes と答えます。
  2. Worker をデプロイするか聞かれたら no と答えます。

2. Prisma ORM を初期化する

Prisma ORM を設定するには、プロジェクトディレクトリに移動し、Prisma CLI をインストールします。

cd prisma-d1-example
npm i -D prisma

次に、Prisma Client パッケージと D1 用のドライバーアダプターをインストールします。

npm i @prisma/client @prisma/adapter-d1

最後に、次のコマンドで Prisma ORM に必要なファイルを作成します。

npx prisma init --datasource-provider sqlite

このコマンドは次を行います。

  1. Prisma schema ファイルを含む prisma ディレクトリを作成します。
  2. Prisma CLI が読む環境変数を設定する .env ファイルを作成します。

このチュートリアルでは .env ファイルは使いません。Prisma ORM と D1 の接続は バインディング で行います。次の手順でこのバインディングを設定します。

現在 Preview の ドライバーアダプター 機能を使うため、generator ブロックの previewFeatures フィールドで明示的に有効にします。

schema.prisma を開き、generator ブロックを次のように変更します。

schema.prismaprisma
generator client {
  provider        = "prisma-client-js"
  output          = "../src/generated/prisma"
  previewFeatures = ["driverAdapters"]
}

3. D1 データベースを作成する

この手順では 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 にクエリを送るためのテーブルをデータベースに作成します。

4. データベースにテーブルを作成する

Prisma Migrate はまだ D1 に対応していないため、prisma migrate devprisma db push の標準ワークフローは使えません。

D1 はスキーマ変更の管理に マイグレーション を使います。Prisma CLI は、その更新に必要な SQL の生成を支援できます。以降の手順では、両方のツールでマイグレーションを作成し、データベースに適用します。

まず wrangler で新しいマイグレーションを作成します。

npx wrangler d1 migrations create prisma-demo-db create_user_table

migrations フォルダーを作成するか聞かれたら yes と答えます。

コマンドにより migrations ディレクトリと、その中の空ファイル 0001_create_user_table.sql が作成されます。

  • prisma-d1-example
    • migrations
      • 0001_create_user_table.sql

次に、User テーブルを作成する SQL 文をそのファイルに追加します。

schema.prisma を開き、次の User モデルをスキーマに追加します。

schema.prismaprisma
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.sql
npx prisma migrate diff --from-empty --to-schema-datamodel ./prisma/schema.prisma --script --output migrations/0001_create_user_table.sql

先に作ったマイグレーションファイルに、新しい User テーブルを作成する SQL 文が保存されます。内容は次のとおりです。

0001_create_user_table.sqlsql
-- 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");

emailUNIQUE 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
('jane@prisma.io', 'Jane Doe (Local)');" --local
# For the remote database
npx wrangler d1 execute prisma-demo-db --command "INSERT INTO  \"User\" (\"email\", \"name\") VALUES
('jane@prisma.io', 'Jane Doe (Remote)');" --remote

5. Worker からデータベースをクエリする

Prisma ORM で Worker からデータベースをクエリするには、次を行います。

  1. Env インターフェースに DB を追加します。
  2. PrismaD1 ドライバーアダプターで PrismaClient をインスタンス化します。
  3. Prisma Client でクエリを送り、結果を返します。

src/index.ts を開き、内容をすべて次に置き換えます。

index.jsjs
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);
	},
};
index.tsts
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

6. Worker をローカルで実行する

データベースクエリを用意し、Prisma Client を生成したら、Worker をローカルで実行します。

npm run dev

ブラウザーで http://localhost:8787 を開き、データベースクエリの結果を確認します。

[{ "id": 1, "email": "jane@prisma.io", "name": "Jane Doe (Local)" }]

7. Worker をデプロイする

Worker をデプロイするには、次のコマンドを実行します。

npm run deploy

https://prisma-d1-example.USERNAME.workers.dev で Worker にアクセスします。ブラウザーには、リモートの D1 データベースから取得した次のデータが表示されます。

[{ "id": 1, "email": "jane@prisma.io", "name": "Jane Doe (Remote)" }]

このチュートリアルを完了すると、D1 をデータベースとして使う Cloudflare Worker をデプロイし、Prisma ORM でクエリできるようになります。

関連リソース

役に立ちましたか?