mcpField
D
drizzle-orm-patterns

drizzle-orm-patterns

github.com/giuseppe-trisciuoglioデータ・データベース3655.4k 回インストール7 週間前に更新
リポジトリ

drizzle-orm-patterns について

Drizzle ORM で型安全なデータベースアプリケーションを構築する開発者向けの実践ガイドです。複数のデータベース方言を対象に、スキーマ設計からマイグレーションまで扱います。

主な機能

  1. 01スキーマとカラムの定義
  2. 02テーブル間のリレーション
  3. 03型安全な CRUD クエリ
  4. 04結合と集計クエリ
  5. 05トランザクションとロールバック
  6. 06Drizzle Kit によるマイグレーション

活用シーン

  1. 01データベース方言に合わせたスキーマ設計
  2. 02型安全な CRUD・結合クエリの作成
  3. 03複数段階のトランザクション更新
  4. 04スキーママイグレーションの生成と適用

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/giuseppe-trisciuoglio/developer-kit --skill drizzle-orm-patterns

インストール後、Claude Code で/drizzle-orm-patternsを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

references/
best-practices.md
common-patterns.md
examples.md
migrations.md
patterns.md
queries-joins-aggregations.md
relations.md
schema-definition.md
transactions.md

詳細

Drizzle ORM パターン

概要

Drizzle ORM を使用して、型安全なデータベースアプリケーションを構築するためのエキスパートガイドです。サポート対象のすべてのデータベースにおけるスキーマ定義、リレーション、クエリ、トランザクション、マイグレーションについて説明します。

使用する場面

  • テーブル、カラム、制約を含むデータベーススキーマを定義する
  • テーブル間のリレーション(一対一、一対多、多対多)を作成する
  • 型安全な CRUD クエリを記述する
  • 複雑な結合や集計を実装する
  • ロールバックに対応したデータベーストランザクションを管理する
  • Drizzle Kit でマイグレーションを設定する
  • PostgreSQL、MySQL、SQLite、MSSQL、CockroachDB を使用する

クイックリファレンス

データベーステーブル関数インポート
PostgreSQLpgTable()drizzle-orm/pg-core
MySQLmysqlTable()drizzle-orm/mysql-core
SQLitesqliteTable()drizzle-orm/sqlite-core
MSSQLmssqlTable()drizzle-orm/mssql-core
操作メソッド例
挿入db.insert()db.insert(users).values({...})
選択db.select()db.select().from(users).where(eq(...))
更新db.update()db.update(users).set({...}).where(...)
削除db.delete()db.delete(users).where(...)
トランザクションdb.transaction()db.transaction(async (tx) => {...})

手順

  1. データベースの方言を特定する - PostgreSQL、MySQL、SQLite、MSSQL、CockroachDB から選択します
  2. スキーマを定義する - 適切なテーブル関数(pgTable、mysqlTable など)を使用します
  3. リレーションを設定する - relations() または defineRelations() を使用してリレーションを定義します
  4. データベースクライアントを初期化する - 適切な認証情報を使って Drizzle クライアントを作成します
  5. クエリを記述する - クエリビルダーを使用して型安全な CRUD 操作を行います
  6. トランザクションを処理する - 必要に応じて複数ステップの操作をトランザクションで囲みます
  7. マイグレーションを設定する - スキーマ管理に Drizzle Kit を設定します

例

例 1: 基本的なスキーマとクエリ
import { pgTable, serial, text } from 'drizzle-orm/pg-core';
import { drizzle } from 'drizzle-orm/node-postgres';
import { eq } from 'drizzle-orm';

export const users = pgTable('users', {
  id: serial('id').primaryKey(),
  name: text('name').notNull(),
  email: text('email').notNull().unique(),
});

const db = drizzle(process.env.DATABASE_URL);

const [user] = await db.select().from(users).where(eq(users.id, 1));
例 2: CRUD 操作
import { eq } from 'drizzle-orm';

// Insert
const [newUser] = await db.insert(users).values({
  name: 'John',
  email: '[email protected]',
}).returning();

// Update
await db.update(users)
  .set({ name: 'John Updated' })
  .where(eq(users.id, 1));

// Delete
await db.delete(users).where(eq(users.id, 1));
例 3: ロールバックを伴うトランザクション
await db.transaction(async (tx) => {
  const [from] = await tx.select().from(accounts)
    .where(eq(accounts.userId, fromId));

  if (from.balance < amount) {
    tx.rollback();
  }

  await tx.update(accounts)
    .set({ balance: sql`${accounts.balance} - ${amount}` })
    .where(eq(accounts.userId, fromId));
});

高度なトランザクションパターンについては、references/transactions.md を参照してください。

ベストプラクティス

  1. 型安全性: 常に TypeScript を使用し、$inferInsert / $inferSelect を活用します
  2. リレーション: ネストされたクエリには relations() API を使用してリレーションを定義します
  3. トランザクション: 複数ステップの操作をまとめて成功させる必要がある場合は、トランザクションを使用します
  4. マイグレーション: 本番環境では generate + migrate を、開発環境では push を使用します
  5. インデックス: 頻繁にクエリされるカラムと外部キーにインデックスを追加します
  6. 論理削除: 可能であれば、完全削除の代わりに deletedAt タイムスタンプを使用します
  7. ページネーション: 大規模なデータセットにはカーソルベースのページネーションを使用します
  8. クエリの最適化: 必要なデータだけを取得するために .limit() と .where() を使用します

制約と警告

  • 外部キー制約: 循環依存の問題を避けるため、必ずアロー関数 () => table.column を使用して参照を定義します
  • トランザクションのロールバック: tx.rollback() を呼び出すと例外がスローされます。必要に応じて try/catch を使用します
  • Returning 句: すべてのデータベースが .returning() をサポートしているわけではありません。使用する方言との互換性を確認してください
  • バッチ操作: 大規模な一括挿入はデータベースの制限に達する場合があるため、小さなバッチに分割します
  • 本番環境でのマイグレーション: 本番環境に適用する前に、必ずステージング環境でマイグレーションをテストします

参考資料

コアコンセプト
高度なトピック

コメント