Drizzle ORMのPGLite接続概要

PGLiteは、PostgresデータベースをWebAssembly(WASM)として実行し、Node.jsやブラウザで利用できるインメモリPostgresの軽量データベースソリューションです。インメモリデータベースとして動作するほか、ファイルシステム(Node.js、Bun)やIndexedDB(ブラウザ)を使って永続的にデータを保持することもできます。Drizzle ORMは、このPGLiteとの接続をサポートしており、サーバーレスアプリやフロントエンドでのデータベース操作に便利です。

PGLiteとDrizzle ORMの接続設定

ステップ1:パッケージのインストール

まず、PGLiteとDrizzle ORMをインストールします。Drizzleのマイグレーションツールとしてdrizzle-kitも併せてインストールします。

npm install drizzle-orm @electric-sql/pglite
npm install -D drizzle-kit

ステップ2:PGLiteドライバーの初期化とクエリの実行

インメモリデータベースの設定

インメモリデータベースとしてPGLiteを使用する場合は、drizzle()関数を呼び出すだけで設定が完了します。

import { drizzle } from 'drizzle-orm/pglite';
const db = drizzle();
const result = await db.select().from('users');

このように、インメモリでの簡単なテストや一時的なデータ操作に最適です。

データ永続化の設定

データを永続化したい場合は、Node.jsまたはBunでファイルシステム、ブラウザでIndexedDBにデータを保存できます。次の例では、ファイルシステムにデータを永続化する方法を示します。

import { drizzle } from 'drizzle-orm/pglite';
const db = drizzle({ connection: { dataDir: 'path-to-data-dir' } });
const result = await db.select().from('users');

ここでは、dataDirで指定したディレクトリにデータが保存されます。IndexedDBに保存する場合も同様の手順で設定が可能です。

既存のPGLiteクライアントの使用

既に@electric-sql/pgliteクライアントを初期化している場合、そのクライアントをDrizzle ORMに直接渡すことも可能です。

import { PGlite } from '@electric-sql/pglite';
import { drizzle } from 'drizzle-orm/pglite';
const client = new PGlite();
const db = drizzle({ client });
const users = await db.select().from('users');

このように、クライアントインスタンスを再利用することで、複数の接続や設定を一元管理できます。

PGLiteの特徴と活用シーン

PGLiteは、軽量なPostgresデータベースとして、以下のような特徴と利点を持ちます。

  • WebAssemblyによる軽量性:PGLiteは2.6MBの軽量なサイズで、ブラウザやサーバーレス環境で迅速にセットアップできます。
  • インメモリと永続化の柔軟な対応:データの永続化やインメモリの選択が可能で、短期間のセッションデータや長期保存データに対応します。
  • フロントエンドでの利用:IndexedDBへの対応により、ブラウザ上で動作するアプリケーションでもPostgresのSQLクエリを直接使用できます。

まとめ

Drizzle ORMとPGLiteの組み合わせにより、Node.jsやブラウザでPostgres互換のインメモリデータベースを簡単に利用できるようになります。インメモリデータベースとしての軽量性を活かしつつ、ファイルシステムやIndexedDBへのデータ永続化も可能で、幅広いユースケースに対応できるのが特徴です。開発環境や軽量アプリケーションにおいて、Drizzle ORMとPGLiteを活用してみましょう。