Drizzle ORM ↗ は、型安全を重視した軽量な TypeScript ORM です。この例では、Workers アプリケーションで Cloudflare Hyperdrive 経由の PostgreSQL に Drizzle ORM を使う方法を示します。
- Workers を使える Cloudflare アカウント
- PostgreSQL データベース
- PostgreSQL データベース向けの Hyperdrive 設定
Drizzle ORM と、node-postgres ↗(pg)ドライバーなどの依存関係をインストールします。
npm i drizzle-orm pg dotenv
npm i -D drizzle-kit tsx @types/pg @types/nodewrangler.jsonc に、必要な Node.js 互換フラグと Hyperdrive binding を追加します。
{
// required for database drivers to function
"compatibility_flags": [
"nodejs_compat"
],
// Set this to today's date
"compatibility_date": "2026-09-20",
"hyperdrive": [
{
"binding": "HYPERDRIVE",
"id": "<your-hyperdrive-id-here>"
}
]
}compatibility_flags = [ "nodejs_compat" ]
# Set this to today's date
compatibility_date = "2026-09-20"
[[hyperdrive]]
binding = "HYPERDRIVE"
id = "<your-hyperdrive-id-here>"Drizzle ORM では、生の SQL を書かず、TypeScript でスキーマを定義します。
-
/src/に/db/フォルダーを作成します。 -
schema.tsファイルを作成します。 -
schema.tsで、次のようにusersテーブルを定義します。src/db/schema.tsts // src/db/schema.ts import { pgTable, serial, varchar, timestamp } from "drizzle-orm/pg-core"; export const users = pgTable("users", { id: serial("id").primaryKey(), name: varchar("name", { length: 255 }).notNull(), email: varchar("email", { length: 255 }).notNull().unique(), createdAt: timestamp("created_at").defaultNow(), });
Drizzle ORM を使うときは、データベース向けの Hyperdrive 設定を使います。
index.ts を次のように記述します。
// src/index.ts
import { Client } from "pg";
import { drizzle } from "drizzle-orm/node-postgres";
import { users } from "./db/schema";
export interface Env {
HYPERDRIVE: Hyperdrive;
}
export default {
async fetch(request, env, ctx): Promise<Response> {
// Create a new client instance for each request.
const client = new Client({
connectionString: env.HYPERDRIVE.connectionString,
});
// Connect to the database
await client.connect();
// Create the Drizzle client with the node-postgres connection
const db = drizzle(client);
// Sample query to get all users
const allUsers = await db.select().from(users);
return Response.json(allUsers);
},
} satisfies ExportedHandler<Env>;スキーマに基づく SQL マイグレーションは、Drizzle Kit CLI で生成して実行できます。追加の手順は Drizzle ORM のドキュメント ↗ を参照してください。
-
プロジェクトのルートフォルダーに
.envファイルを作成し、データベースの接続文字列を追加します。Drizzle Kit CLI はこの接続文字列を使って、マイグレーションの作成と適用を行います。.envtoml # .env # Replace with your direct database connection string DATABASE_URL='postgres://user:password@db-host.cloud/database-name' -
プロジェクトのルートフォルダーに
drizzle.config.tsを作成し、Drizzle Kit を設定して次の内容を追加します。drizzle.config.tsts // drizzle.config.ts import "dotenv/config"; import { defineConfig } from "drizzle-kit"; export default defineConfig({ out: "./drizzle", schema: "./src/db/schema.ts", dialect: "postgresql", dbCredentials: { url: process.env.DATABASE_URL!, }, }); -
スキーマファイルに合わせてデータベースのマイグレーションファイルを生成し、データベースにマイグレーションを適用します。
次の 2 つのコマンドを実行します。
npx drizzle-kit generateNo config path provided, using default 'drizzle.config.ts' Reading config file 'drizzle.config.ts' 1 tables users 4 columns 0 indexes 0 fks [✓] Your SQL migration file ➜ drizzle/0000_mysterious_queen_noir.sql 🚀npx drizzle-kit migrateNo config path provided, using default 'drizzle.config.ts' Reading config file 'drizzle.config.ts' Using 'postgres' driver for database querying
Worker をデプロイします。
npx wrangler deploy- Hyperdrive の仕組み について詳しく学びます。
- よくある問題の切り分けは トラブルシューティングガイド を参照してください。
- Cloudflare Workers で使えるほかの ストレージオプション についても確認します。