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