2024-08-04
【Tips - Drizzle】実例でわかるシリーズ
<前置き、挨拶>
みなさんどうも、こんばんみ~。ぎょうざです。
Webアプリ上などでデータベースとのやりとりを実装する際に便利なツール
Drizzle(ドリズル)を利用する際に、ぎょうざが躓いたところを備忘録として記録しておきます。
同じようなケースあるいは現象で困っている方の参考になれば幸いです。
【目次】
<Useful> ▶ 対応するデータベース(2023/06/25時点) ▶ Supabaseデータベースとの接続(Transaction ModeとSession Modeの使い分け) ▶ Drizzle ORM & Neon: サーバーレスDBとの甘美なる接続 <Error> ▶ <Warn> ▶ 〆の一言
<Useful>
▶ 対応するデータベース(2023/06/25時点)

▶特徴(Pros. Cons.)
- 型完全なデータベース操作ができます
- 開発ライブラリに非依存です
- 自動でマイグレーションを生成してくれます
- Zodスキーマ生成ができます
- テーブル定義とクエリのためのSQLライクなシンタックスです
- レコード選択と挿入を別々に行うDBモデルのためのTS型の自動インファリングができます
- SQL関連の学習コストがやや高めです
▶ Supabaseデータベースとの接続(Transaction ModeとSession Modeの使い分け)
重要と思うポイントのみ
- .envファイルの
DATABASE_URL
には Transaction Mode のコネクションURI、DIRECT_URL
には Session Mode のコネクションURL - Transaction Mode では
pgbouncer=true
を環境変数としてURL内に追記することを推奨 - 開発環境の Transaction Mode では更に
connection_limit=1
も指定することを推奨
Supabase上でデータベースをPostgreSQLで作成した場合のDATABASE_URL
例:
postgresql://[データベースのUser]:[データベースのPassword]@[データベースのHost]:[Port]/postgres?pgbouncer=true&connection_limit=1
▶ Drizzle ORM & Neon: サーバーレスDBとの甘美なる接続
- 有用性: 型安全なデータベースアクセスと、サーバーレスPostgreSQLによるスケーラブルなデータストアの実現。
- 根拠: Drizzle ORMはTypeScriptとの親和性が非常に高く、スキーマ定義から型が自動生成されるため、開発効率と安全性が向上する。Neonはサーバーレスアーキテクチャで、従量課金制やブランチ機能など、モダンな開発に適した機能を提供する。
- 具体例:
- セットアップ:
drizzle-orm
,postgres
(ローカル/マイグレーション用),@neondatabase/serverless
(Edge用HTTPドライバ),drizzle-kit
(マイグレーションツール),dotenv
をインストール。 -
drizzle.config.ts
: スキーマファイルのパス、マイグレーション出力先、DB接続情報(環境変数DATABASE_URL
を参照)を設定。 -
db/schema.ts
: DrizzleのpgTable
などを使ってテーブルスキーマをTypeScriptで定義(例:learnedWordsTable
)。 -
db/index.ts
:- Edge Runtime用:
@neondatabase/serverless
のneon
関数とdrizzle-orm/neon-http
のdrizzle
関数を使ってDBクライアントを初期化。これがCloudflare Pages/Workers上で動作するAPIからの接続方法。 - Node.js環境用 (マイグレーション時など):
postgres
ライブラリとdrizzle-orm/postgres-js
のdrizzle
関数を使ってクライアントを初期化。これはdrizzle.config.ts
が参照する(マイグレーションは通常ローカルのNode.js環境で行うため)。
- Edge Runtime用:
- マイグレーション:
package.json
にdb:generate
とdb:migrate
スクリプトを追加。npm run db:generate
でスキーマ変更からマイグレーションファイルを生成し、npm run db:migrate
でデータベースに適用。- Tips: Neonのブランチ機能を活用し、開発用ブランチと本番用ブランチを分離。開発用ブランチでスキーマ変更を安全にテストし、問題なければ本番にマイグレーションを適用する。環境変数
DATABASE_URL
を接続先のブランチに応じて切り替える。
- Tips: Neonのブランチ機能を活用し、開発用ブランチと本番用ブランチを分離。開発用ブランチでスキーマ変更を安全にテストし、問題なければ本番にマイグレーションを適用する。環境変数
<Error>
▶
<Warn>
▶
〆の一言
Drizzleは、データベースとやり取りする中間ツールとして、とても優秀です!
Edge Computingに対応してい、簡単なデータベース操作が可能になります。
ここまで読んでいただき、ありがとうございました。
以上、ぎょうざでした。