# database > Drizzle ORM を使ったデータベーススキーマの管理とマイグレーションの実行方法 - Author: sunagaku - Repository: sean-sunagaku/brandize - Version: 20260129173003 - Stars: 0 - Forks: 0 - Last Updated: 2026-02-06 - Source: https://github.com/sean-sunagaku/brandize - Web: https://mule.run/skillshub/@@sean-sunagaku/brandize~database:20260129173003 --- --- name: database description: Drizzle ORM を使ったデータベーススキーマの管理とマイグレーションの実行方法 disable-model-invocation: false --- # Database Management (Drizzle ORM) Drizzle ORM を使ったデータベーススキーマの管理とマイグレーションに関するガイド。 ## Overview このプロジェクトでは以下の技術スタックを使用: - **ORM**: Drizzle ORM - **Database**: SQLite (better-sqlite3) - **Migration Tool**: drizzle-kit --- ## Project Structure ``` packages/server/ ├── drizzle.config.ts # Drizzle Kit 設定 ├── drizzle/ # マイグレーションファイル │ ├── 0000_init.sql # 初期マイグレーション │ └── meta/ # マイグレーションメタデータ │ ├── _journal.json │ └── XXXX_snapshot.json └── src/ └── db/ ├── schema.ts # スキーマ定義 └── index.ts # DB接続・マイグレーション実行 ``` --- ## Commands すべてのコマンドは `packages/server` ディレクトリから実行する。 ### マイグレーションファイル生成 スキーマの変更後、マイグレーションファイルを生成: ```bash cd packages/server npm run db:generate # または名前付きで npx drizzle-kit generate --name= ``` ### マイグレーション適用 (CLI) ```bash cd packages/server npm run db:migrate ``` ### スキーマを直接プッシュ (開発用) マイグレーションファイルを作成せずに、スキーマの変更を直接DBに適用: ```bash cd packages/server npm run db:push ``` ⚠️ 本番環境では使用しない。開発中の試行錯誤用。 ### Drizzle Studio (DB GUI) ブラウザでDBを閲覧・編集: ```bash cd packages/server npm run db:studio ``` --- ## Schema Definition スキーマは `packages/server/src/db/schema.ts` で定義。 ### テーブル定義例 ```typescript import { sqliteTable, text, integer } from 'drizzle-orm/sqlite-core'; export const projects = sqliteTable('projects', { id: text('id').primaryKey(), name: text('name').notNull(), description: text('description'), createdAt: text('created_at').notNull(), updatedAt: text('updated_at').notNull(), }); ``` ### リレーション定義 ```typescript export const sessions = sqliteTable('sessions', { id: text('id').primaryKey(), projectId: text('project_id') .notNull() .references(() => projects.id, { onDelete: 'cascade' }), title: text('title').notNull(), }); ``` ### 型定義 ```typescript export type ProjectRecord = typeof projects.$inferSelect; export type NewProjectRecord = typeof projects.$inferInsert; ``` --- ## Workflow: スキーマ変更の手順 ### 1. スキーマを編集 `packages/server/src/db/schema.ts` を編集。 ### 2. マイグレーションファイルを生成 ```bash npm run db:generate ``` 生成されたファイルを確認: - `packages/server/drizzle/XXXX_.sql` ### 3. マイグレーションを適用 アプリケーション起動時に自動適用される。 または手動で: ```bash npm run db:migrate ``` ### 4. 動作確認 ```bash npm run dev:server ``` --- ## 既存テーブル | テーブル | 説明 | 主要カラム | | ---------- | ---------------- | ---------------------------------- | | `projects` | プロジェクト管理 | id, name, description, working_dir | | `sessions` | 会話セッション | id, project_id, title | | `messages` | メッセージ履歴 | id, session_id, role, content | | `logos` | ロゴ生成履歴 | id, project_id, brand_name, svg | --- ## Runtime Migration アプリケーション起動時に `initializeDatabase()` が呼ばれ、未適用のマイグレーションが自動実行される。 ```typescript // packages/server/src/db/index.ts import { migrate } from 'drizzle-orm/better-sqlite3/migrator'; export function initializeDatabase(): void { migrate(db, { migrationsFolder: './drizzle' }); } ``` --- ## Troubleshooting ### "Please install latest version of drizzle-orm" drizzle-kit と drizzle-orm のバージョンが不一致。以下を確認: ```bash npm ls drizzle-orm drizzle-kit ``` 両方が最新かつ互換性のあるバージョンであることを確認。 ### マイグレーションが適用されない 1. `drizzle/` ディレクトリが存在するか確認 2. `drizzle/meta/_journal.json` が正しいか確認 3. ログで `Database migrations applied successfully` が出力されているか確認 ### DBをリセットしたい ```bash rm packages/server/.brandize/brandize.db npm run dev:server # 再起動で再作成 ``` --- ## Best Practices 1. **マイグレーション名は意味のある名前に**: `--name=add-user-table` 2. **本番環境では `db:push` を使わない**: 必ずマイグレーションファイルを使用 3. **マイグレーションファイルはコミットする**: バージョン管理で追跡 4. **破壊的変更は段階的に**: データ移行が必要な場合は複数ステップで