🐙
Cloudflare D1 × Drizzle を使ったセットアップ手順
はじめに
こんにちは。D.sukeです。
現在開発しているプロジェクトでCloudflareを利用しており、データベースをCloudflare D1 × Drizzleを使ってセットアップしたので、その手順を簡単にまとめました。
環境
- node: 20.18.1
- next: 15.3.1
- drizzle-orm: 0.43.1
- drizzle-kit: 0.31.0
- @cloudflare/workers-types: 4.20250430.0
Step1: Cloudflare D1データベースの作成
CloudflareのDashboardにログイン
- 対象のアカウント・プロジェクトを選択
- 左メニュー「ストレージとデータベース」→「D1 SQL データベース」へ移動
- 「Create Database」ボタンを押下
- 以下を入力して作成
Database name: 例)my-database
Step2: wrangler.tomlの作成
wrangler.toml
name = "worker_name" # Workerの名前
compatibility_date = "2024-05-01"
[[d1_databases]]
binding = "DB"
database_name = "" # Step1で作成した名前
database_id = "" # Cloudflare側で確認
migrations_dir = "./migrations" # Drizzle用マイグレーション出力先
database_id はCloudflareのD1詳細画面から取得できます。
step3: drizzle.config.tsの作成
drizzle.config.ts
import type { Config } from 'drizzle-kit'
export default {
schema: './src/db/schema.ts',
out: './migrations',
driver: 'd1-http',
dialect: 'sqlite',
dbCredentials: {
accountId: '',
databaseId: '',
token: '',
},
} satisfies Config
accountId
プロパティには、Cloudflare Account IDを指定します。
- CloudflareのダッシュボードからWorkers & Pagesを開く
- 画面内に表示されているAccount ID取得
databaseId
プロパティには、Cloudflare D1 Database IDを指定します。
- CloudflareのダッシュボードからD1を開く
- 任意のデータベースからDatabase IDを取得
token
プロパティには、Cloudflare API Tokensを指定します。
- CloudflareのダッシュボードからWorkers & Pagesを開いて、Account IDの下にある「APIトークンの管理」を開く
- APIトークンを作成→「カスタム トークン」
- 任意のトークン名を入力
- 権限: 「D1」、「編集」を選択
- アカウント リソース: すべてのアカウントからあなたのアカウントを選択
- 概要に進むを押して、トークンを作成を押す
- 作成されたAPIトークンを取得
※accountId
, databaseId
, token
は.env
に記載しておくと安全です。
step4: schema.tsの作成
src/db/schema.ts
import { integer, sqliteTable, text } from 'drizzle-orm/sqlite-core'
export const users = sqliteTable('users', {
id: integer('id').primaryKey({ autoIncrement: true }),
email: text('email').notNull(),
createdAt: text('created_at').notNull(),
})
step5: SQLマイグレーションファイルの生成
bash
$ npx drizzle-kit generate
migrations/ ディレクトリに .sql ファイルが生成されます。
step6: マイグレーション
bash
$ npx wrangler d1 migrations apply {database_name} --remote
--remote を付けないとローカル環境にしか適用されません。
補足
データベースの中身を確認するには?
bash
$ npx wrangler d1 execute my-database --remote --command "SELECT * FROM users;"
drizzle-kitとwranglerの関係
-
drizzle-kit
: マイグレーションファイル(SQL)を生成 -
wrangler
: 生成した.sql
をD1に適用
Discussion