マイグレーション管理
Speakeasy のデータベースマイグレーションは Drizzle Kit を使用して管理しています。Cellar(業務DB)と Vault(認証DB)それぞれに独立したマイグレーション管理があります。
マイグレーション設定
Section titled “マイグレーション設定”Cellar DB
Section titled “Cellar DB”import { defineConfig } from 'drizzle-kit';
export default defineConfig({ dialect: 'postgresql', schema: './src/schema/index.ts', out: './drizzle', dbCredentials: { url: process.env.DATABASE_URL! }});Vault DB
Section titled “Vault DB”import { defineConfig } from 'drizzle-kit';
export default defineConfig({ dialect: 'postgresql', schema: './src/schema', out: './drizzle', dbCredentials: { url: process.env.DATABASE_URL! }});マイグレーションコマンド
Section titled “マイグレーションコマンド”Cellar DB(業務データ)
Section titled “Cellar DB(業務データ)”cd packages/cellar
# マイグレーションファイル生成bun run generate
# 開発環境にマイグレーション適用bun run migrate:dev
# 本番環境にマイグレーション適用bun run migrate:deploy
# Drizzle Studio(GUI)で DB を確認bun run studio # 本番bun run studio:dev # 開発Vault DB(認証データ)
Section titled “Vault DB(認証データ)”cd packages/vault
# マイグレーションファイル生成bun run generate
# 開発環境にマイグレーション適用bun run migrate:dev
# 本番環境にマイグレーション適用bun run migrate:deploy
# Drizzle Studio で DB を確認bun run studio # 本番bun run studio:dev # 開発マイグレーションワークフロー
Section titled “マイグレーションワークフロー”1. スキーマ変更
Section titled “1. スキーマ変更”Drizzle ORM のスキーマファイルを編集します。
export const contact = p.pgTable('contact', { // ... 既存カラム newColumn: p.text('newColumn') // 新規カラム追加});2. マイグレーション生成
Section titled “2. マイグレーション生成”cd packages/cellarbun run generatedrizzle/ ディレクトリにマイグレーション SQL ファイルが生成されます。
3. 開発環境で検証
Section titled “3. 開発環境で検証”bun run migrate:dev4. 本番環境にデプロイ
Section titled “4. 本番環境にデプロイ”bun run migrate:deploybetter-auth テーブルの変更
Section titled “better-auth テーブルの変更”Vault DB の多くのテーブルは better-auth が管理しています。これらのテーブルを変更する場合:
- better-auth プラグインの設定変更 が必要な場合がある
- スキーマの同期 — better-auth が期待するスキーマと Drizzle スキーマを一致させる
- カスタムカラムの追加 — better-auth の core テーブルにカスタムカラムを追加する場合は、マイグレーションで直接追加
Relations V2
Section titled “Relations V2”リレーション定義(defineRelations)はマイグレーションの対象外です。リレーション定義は ORM のクエリビルダー(RQBv2)のためのメタデータであり、データベースの外部キー制約とは独立しています。
Hyperdrive との互換性
Section titled “Hyperdrive との互換性”Cloudflare Hyperdrive は接続プーリングを行うため、以下の制約があります:
- トランザクション: Hyperdrive 経由ではロングランニングトランザクションを避ける
- DDL 実行: マイグレーションは Hyperdrive ではなく直接接続で実行する
マイグレーション実行には DATABASE_URL 環境変数が必要です。各パッケージの .dev.vars ファイルまたは環境変数で設定します。