EasyStarter logoEasyStarter

データベース

Drizzle ORM によるデータベース設定と操作

概要

EasyStarter は Cloudflare D1(エッジ SQLite)と Drizzle ORM を使用して、型安全なデータベース操作を行います。

スキーマ定義

apps/server/src/db/schema/ でデータベーススキーマを定義:

import { sqliteTable, text, integer } from "drizzle-orm/sqlite-core";

export const users = sqliteTable("users", {
	id: text("id").primaryKey(),
	email: text("email").notNull().unique(),
	name: text("name"),
	createdAt: integer("created_at", { mode: "timestamp" }).notNull(),
});

データベースコマンド

コマンド説明
pnpm db:generateスキーマ変更からマイグレーションを生成
pnpm db:pushスキーマを D1 に直接プッシュ(開発のみ)
pnpm db:migrateマイグレーションを実行(本番環境)
pnpm db:studioDrizzle Studio(GUI)を開く

データクエリ

選択

// すべてのユーザーを取得
const allUsers = await db.select().from(users);

// 条件付き
const activeUsers = await db.select().from(users).where(eq(users.status, "active"));

// ページネーション付き
const paginatedUsers = await db.select().from(users).limit(10).offset(0);

挿入

await db.insert(users).values({
	id: crypto.randomUUID(),
	email: "user@example.com",
	name: "山田太郎",
	createdAt: new Date(),
});

更新

await db.update(users).set({ name: "田中花子" }).where(eq(users.id, userId));

削除

await db.delete(users).where(eq(users.id, userId));

リレーション

テーブル間のリレーションを定義:

import { relations } from "drizzle-orm";

export const usersRelations = relations(users, ({ many }) => ({
	posts: many(posts),
}));

export const postsRelations = relations(posts, ({ one }) => ({
	author: one(users, {
		fields: [posts.authorId],
		references: [users.id],
	}),
}));

本番環境の設定

  1. Cloudflare Dashboard で D1 データベースを作成
  2. wrangler.jsonc でデータベースバインディングを更新
  3. マイグレーションを実行:pnpm db:migrate

On this page