MENU

Drizzle ORMとは|SQLライクな型安全TS ORM

Drizzle ORM アイキャッチ
Drizzle ORM

Drizzle ORM(ドリズルオーム)は、2022年に登場したTypeScript向けの軽量なORM/クエリビルダで、「SQLライクで型安全」というコンセプトを掲げています。PrismaやTypeORMが独自スキーマやデコレーターで抽象化する方向に進む中、DrizzleはあえてSQLの構造を素直にTypeScriptで表現する設計を選びました。Bun、Cloudflare Workers、Vercel Edge Functionsといったエッジ・サーバーレス環境でも軽快に動作し、PostgreSQL、MySQL、SQLite、LibSQL、PlanetScale、Neonなど近年人気のサービスとシームレスに連携できる点が大きな特徴です。

目次

この記事の目次

  1. Drizzleが重視する3つの設計理念
  2. DrizzleとPrismaの設計思想の違い
  3. Drizzleを導入する際の確認項目
  4. Drizzleでアプリを構築する流れ
  5. まとめ

Drizzleが重視する3つの設計理念

Drizzleが重視する3つの設計理念

Drizzle ORMの設計理念は「SQLが書けるなら、Drizzleも書ける」というシンプルな考え方に集約されます。db.select().from(users).where(eq(users.age, 30)).limit(10)というクエリは、ほぼそのままSELECT文に対応しており、SQLを知っている開発者にとって学習コストが非常に低いのが特徴です。Prismaが独自のクエリ表現を導入したのとは対照的に、SQLそのものの構造を尊重しつつ、TypeScriptの型で安全に組み立てるアプローチを選んでいます。

それでいて型安全性は妥協しておらず、テーブル定義から自動的にカラム名・型・nullableが推論され、where句やselect句で存在しないカラムや型の合わないリテラルを書くとコンパイルエラーになります。さらにDrizzleは依存関係が極めて少なく、バンドルサイズも小さいため、Cloudflare WorkersやVercel Edgeなど起動時間とサイズが厳しく問われる環境でも違和感なく動作します。最新のサーバーレスデータベースと相性が良いことから、モダンスタックでの採用が急速に伸びています。

DrizzleとPrismaの設計思想の違い

DrizzleとPrismaの設計思想の違い

DrizzleとPrismaは「型安全なTypeScript ORM」というカテゴリで競合していますが、設計思想は対照的です。Prismaはschema.prismaという独自DSLでスキーマを記述し、generateコマンドでクライアントコードを生成、prisma.user.findMany({ where: ... })のような独自APIで操作します。一方DrizzleはTypeScriptファイル内でpgTableなどの関数を用いてテーブル定義を書き、クエリもselect、from、whereといったSQLそのままのキーワードを用います。スキーマ生成の手間がなく、ホットリロード時の挙動もシンプルです。

ランタイム特性も大きく異なります。PrismaはRustで書かれたQuery EngineをNode.jsから呼び出す構造のためバンドルサイズが大きく、Cloudflare Workersなど一部のサーバーレス環境でデプロイサイズの制約に当たることがあります。対するDrizzleは純粋なTypeScript/JavaScriptで実装されており、ランタイムオーバーヘッドが非常に小さいのが強みです。一方でPrismaの方がDX(開発体験)周辺ツール(Studio、Migrate、Accelerate)が充実しているため、両者は「軽量さとSQL直感性のDrizzle」「総合的なDXのPrisma」というトレードオフで選び分けるのが現実的です。

Drizzleを導入する際の確認項目

Drizzleを導入する際の確認項目

Drizzleを導入する際にまず確認すべきは、利用するデータベースとドライバの組み合わせです。drizzle-orm/postgres-js、drizzle-orm/mysql2、drizzle-orm/better-sqlite3、drizzle-orm/d1、drizzle-orm/neon-httpなど、データベース種別と実行環境に応じて読み込むパッケージが異なります。Edge環境では従来型のTCP接続が使えない場合があるため、Neon HTTPやD1向けのfetchベースドライバを選択する必要があります。

スキーマ管理はTypeScriptファイル上で行い、export const users = pgTable('users', { id: serial('id').primaryKey(), name: text('name') })のように定義します。マイグレーションには公式CLIのdrizzle-kitを併用し、drizzle-kit generateで差分マイグレーションファイルを生成、drizzle-kit migrateで本番に適用するフローが標準です。型推論を最大限活用するためには、tsconfig.jsonでstrictモードを有効化することを強く推奨します。

Drizzleでアプリを構築する流れ

Drizzleでアプリを構築する流れ

Drizzleを使ったアプリケーション構築は、まずschema.tsなどのファイルにテーブル定義を書くところから始まります。pgTable、mysqlTable、sqliteTableなどを使用してテーブル構造を宣言し、リレーションが必要であればrelations()ヘルパーで関連も記述します。続いてdrizzle-kit generateコマンドで初期マイグレーションファイルを生成し、drizzle-kit migrateやpush:pgなどのコマンドでデータベースに反映します。

アプリケーション側ではdrizzle(client, { schema })のように初期化し、dbオブジェクトを通じてクエリを発行します。db.select().from(users).where(eq(users.id, 1))のように、SQLライクなチェーンで型安全なクエリが書けます。挿入はdb.insert(users).values({...}).returning()、更新はdb.update(users).set({...}).where(...)、削除はdb.delete(users).where(...)とSQLに対応した直感的なAPIです。Hono、Next.js、SvelteKit、NestJSなどさまざまなフレームワークと相性が良く、特にエッジ環境を想定したモダンスタックでは第一候補に挙げられるORMとなっています。

まとめ

Drizzle ORMは、SQLライクな直感性とTypeScript型システムの厳密さを高い次元で両立した、現代的なORM/クエリビルダです。軽量で依存が少なく、Cloudflare WorkersやNeonといったモダンなインフラと相性が抜群であるため、エッジ・サーバーレス時代の開発において強力な選択肢となっています。Prismaほどの統合DXは持ちませんが、SQLに精通した開発者やバンドルサイズに厳しい環境では、Drizzleの設計哲学が大きな価値を発揮するでしょう。

※本記事はIT用語辞典の手書きドラフトです。公開前に最新情報・出典を確認のうえ加筆修正してください。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コメント

コメントする

目次