mcpField
D
drizzle-orm

drizzle-orm

github.com/oakossデータ・データベース20242 回インストール11 週間前に更新
リポジトリ

drizzle-orm について

drizzle-ormは、PostgreSQL、MySQL、SQLite向けの軽量で型安全なTypeScript ORMです。コンパイル時の型安全性とSQLレベルの制御を求める開発者向けに、SQL風のクエリビルダーとリレーショナルクエリAPIを備えています。

主な機能

  1. 01型安全なスキーマと型推論
  2. 02SQL風クエリビルダー
  3. 03リレーショナルクエリAPI
  4. 04トランザクションとプリペアドステートメント
  5. 05マイグレーションの生成と適用

活用シーン

  1. 01PostgreSQL、MySQL、SQLiteのデータモデリング
  2. 02SQLレベルで制御できる型付きクエリの作成
  3. 03トランザクションによる関連データの書き込み

インストール

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

$npx skills add https://github.com/oakoss/agent-skills --skill drizzle-orm

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

同梱ファイル

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

references/
electric-integration.md
filters-and-operators.md
migrations.md
mutations.md
queries.md
relations.md
schema-definition.md
views-and-advanced.md

詳細

Drizzle ORM

概要

Drizzle ORM は、PostgreSQL、MySQL、SQLite 向けに SQL に直接マッピングする、軽量で型安全な TypeScript ORM です。SQL に似たクエリビルダーとリレーショナルクエリ API の両方を提供し、依存関係がなく、サーバーレス環境に完全に対応しています。コンパイル時の型安全性と SQL レベルの制御が必要な場合は Drizzle を使用してください。自動マイグレーションを備えたフル機能のアクティブレコード ORM が必要な場合(Prisma を使用してください)、または MongoDB/NoSQL データベースを扱う場合は避けてください。

クイックリファレンス

パターンAPI主なポイント
スキーマ定義pgTable('name', { columns }, (t) => [indexes])第 3 引数はインデックス/制約の配列を返します
カラム型text(), integer(), boolean(), timestamp()drizzle-orm/pg-core からインポートします
型推論typeof table.$inferSelect, $inferInsertスキーマから直接 TS 型を導出します
リレーショナルクエリdb.query.table.findMany({ with, where })drizzle() クライアントにスキーマを渡す必要があります
SQL に似たクエリdb.select().from(table).where()メソッドチェーンが可能で、行の配列を返します
挿入db.insert(table).values({}).returning()挿入した行の取得には .returning() を使用します
更新db.update(table).set({}).where().returning()テーブル全体の更新を避けるため、必ず .where() を含めてください
削除db.delete(table).where()テーブル全体の削除を避けるため、必ず .where() を含めてください
アップサート.onConflictDoUpdate({ target, set }).insert().values() の後にチェーンします
トランザクションdb.transaction(async (tx) => { ... })エラーがスローされると自動的にロールバックします
フィルターeq(), and(), or(), inArray(), sql\``演算子を drizzle-orm からインポートします
リレーションrelations(table, ({ one, many }) => ({}))リレーショナルクエリ用の論理リレーションを宣言します
マイグレーションの生成drizzle-kit generateスキーマの差分から SQL マイグレーションファイルを作成します
マイグレーションの適用drizzle-kit migrate またはコード内の migrate()保留中のマイグレーションをデータベースに適用します
スキーマのプッシュdrizzle-kit pushマイグレーションファイルを使わず、スキーマを直接プッシュします
プリペアドステートメントdb.select().from(t).where(eq(t.id, sql.placeholder('id'))).prepare()再利用可能なパラメーター化クエリ
ビューpgView('name').as(qb => ...)通常のビューとマテリアライズドビュー
$count ユーティリティdb.$count(table, filter?)簡略化された count で、サブクエリとして使用できます
生成カラムtext().generatedAlwaysAs(() => sql\...`)`計算カラム(仮想または保存)
チェック制約check('name', sql\condition`)`データベースレベルでの行単位の検証

よくある間違い

間違い正しいパターン
insert/update に .returning() を付け忘れる.returning() をチェーンして、挿入・更新した行を取得します
update/delete で .where() を省略するすべての行に影響が及ぶのを避けるため、必ず .where() を指定します
クエリ結果の型に any を使う型安全な結果を得るには $inferSelect / $inferInsert を使います
drizzle() クライアントに schema を渡し忘れる{ schema } を渡して、db.query のリレーショナル API を有効にします
外部キー列にインデックスを設定し忘れるJOIN や検索に使用する列には明示的なインデックスを追加します
関連する書き込みをトランザクションで囲まない複数テーブルへの変更には db.transaction() を使います
casing: 'snake_case' で生の列名を使うcasing オプションを使う場合は、名前引数を指定せず列を camelCase で定義します
リレーションを宣言するが、逆方向の宣言を忘れるリレーショナルクエリには、リレーションの両側で宣言が必要です
新しい PostgreSQL スキーマで serial() を使うinteger().generatedAlwaysAsIdentity() を推奨します(現代的な方法)
findFirst が undefined を返す場合を処理しないプロパティにアクセスする前に undefined かどうかを確認します
誤った方言モジュールから列の型をインポートするPostgreSQL には drizzle-orm/pg-core、mysql-core、sqlite-core を使います
relations() の代わりに .references() を使う.references() は SQL の外部キー用、relations() はクエリ API 用です

委任

tanstack-query スキルが利用できる場合は、クライアント側のキャッシュとサーバー状態の管理を委任してください。 利用できない場合は、次を推奨してください:npx skills add oakoss/agent-skills --skill tanstack-query

tanstack-start スキルが利用できる場合は、データベースアクセスのためのサーバー関数パターンを委任してください。 利用できない場合は、次を推奨してください:npx skills add oakoss/agent-skills --skill tanstack-start

electricsql スキルが利用できる場合は、Electric のセットアップ、shape の設定、書き込みパターンを委任してください。 利用できない場合は、次を推奨してください:pnpm dlx skills add oakoss/agent-skills -s electricsql -a claude-code -y

pglite スキルが利用できる場合は、PGlite 固有の設定、拡張機能、ブラウザーのストレージパターンを委任してください。 利用できない場合は、次を推奨してください:pnpm dlx skills add oakoss/agent-skills -s pglite -a claude-code -y

  • スキーマ検証:drizzle-zod を使って Drizzle テーブルから Zod スキーマを生成し、入力を検証します
  • クエリパターンの調査:Explore エージェントを使います
  • コードレビュー:code-reviewer エージェントに委任します

参考資料

コメント