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に対応してい、簡単なデータベース操作が可能になります。
ここまで読んでいただき、ありがとうございました。
以上、ぎょうざでした。