🐙

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にログイン

  1. 対象のアカウント・プロジェクトを選択
  2. 左メニュー「ストレージとデータベース」→「D1 SQL データベース」へ移動
  3. 「Create Database」ボタンを押下
  4. 以下を入力して作成

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を指定します。

  1. CloudflareのダッシュボードからWorkers & Pagesを開く
  2. 画面内に表示されているAccount ID取得

databaseIdプロパティには、Cloudflare D1 Database IDを指定します。

  1. CloudflareのダッシュボードからD1を開く
  2. 任意のデータベースからDatabase IDを取得

tokenプロパティには、Cloudflare API Tokensを指定します。

  1. CloudflareのダッシュボードからWorkers & Pagesを開いて、Account IDの下にある「APIトークンの管理」を開く
  2. APIトークンを作成→「カスタム トークン」
  3. 任意のトークン名を入力
  4. 権限: 「D1」、「編集」を選択
  5. アカウント リソース: すべてのアカウントからあなたのアカウントを選択
  6. 概要に進むを押して、トークンを作成を押す
  7. 作成された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(),
})

https://orm.drizzle.team/docs/column-types/sqlite

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に適用
GitHubで編集を提案

Discussion