Drizzle ORMのPostgreSQL接続概要

Drizzle ORMは、PostgreSQLデータベースとの接続において、node-postgrespostgres.jsという2種類のドライバーをサポートしています。両ドライバーにはそれぞれ特徴があり、用途に応じて使い分けることで効率的にデータベースとやり取りが可能です。本記事では、Drizzle ORMでPostgreSQLに接続する方法を詳しく解説し、各ドライバーの違いについても触れていきます。

node-postgresを使用した接続

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

まず、drizzle-ormpgをインストールします。プロジェクトに必要な開発ツールであるdrizzle-kitも一緒にインストールします。

npm install drizzle-orm pg
npm install -D drizzle-kit @types/pg

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

node-postgresドライバーを使ったDrizzle ORMの接続設定は、drizzle関数に環境変数としてデータベースのURLを渡すことで完了します。

import { drizzle } from 'drizzle-orm/node-postgres';
const db = drizzle(process.env.DATABASE_URL);
const result = await db.execute('SELECT 1');

設定オプションを使った接続

node-postgresでは、接続オプションにより細かな設定が可能です。SSLの有効化や詳細な接続設定を行う際に役立ちます。

import { drizzle } from 'drizzle-orm/node-postgres';
const db = drizzle({
  connection: {
    connectionString: process.env.DATABASE_URL,
    ssl: true
  }
});

既存のクライアントを使った接続

既にpgクライアントを使っている場合は、それをDrizzle ORMに直接渡すことも可能です。

import { Pool } from 'pg';
import { drizzle } from 'drizzle-orm/node-postgres';
const pool = new Pool({ connectionString: process.env.DATABASE_URL });
const db = drizzle({ client: pool });
const result = await db.execute('SELECT 1');

postgres.jsを使用した接続

postgres.jsは、軽量で高速なPostgreSQLドライバーであり、プリペアドステートメントをデフォルトで使用します。サーバーレス環境での使用やパフォーマンスを重視する場合に適しています。

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

以下のコマンドでdrizzle-ormpostgresパッケージをインストールします。

npm install drizzle-orm postgres
npm install -D drizzle-kit

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

postgres.jsを使ってDrizzle ORMを初期化するには、環境変数からURLを読み込みます。

import { drizzle } from 'drizzle-orm/postgres-js';
const db = drizzle(process.env.DATABASE_URL);
const result = await db.execute('SELECT 1');

設定オプションを使用した接続

接続オプションを追加することで、SSLの設定やその他のカスタマイズが可能です。

import { drizzle } from 'drizzle-orm/postgres-js';
const db = drizzle({
  connection: {
    url: process.env.DATABASE_URL,
    ssl: true
  }
});

既存のクライアントを使用した接続

postgres.jsのインスタンスが既にある場合、それをDrizzle ORMに渡すことで既存のクライアントを活用できます。

import postgres from 'postgres';
import { drizzle } from 'drizzle-orm/postgres-js';
const queryClient = postgres(process.env.DATABASE_URL);
const db = drizzle({ client: queryClient });
const result = await db.execute('SELECT 1');

node-postgresとpostgres.jsの違い

node-postgresの特徴

  • pg-nativeのサポート:パフォーマンス向上のためにpg-nativeパッケージを追加でき、クエリ速度が10%向上します。
  • type parserの設定:クエリごとにtype parserを設定でき、柔軟なデータ型変換が可能です。

postgres.jsの特徴

  • プリペアドステートメントのデフォルト使用:初期設定でプリペアドステートメントが有効で、クエリの効率が向上しますが、特定の環境(例:AWS)では無効化が推奨される場合もあります。
  • 軽量設計:サーバーレス環境やリソース制約のある環境でも効率的に動作します。

まとめ

Drizzle ORMのPostgreSQL接続では、node-postgrespostgres.jsという2種類のドライバーから適切なものを選択できます。それぞれのドライバーが持つ特徴を理解し、プロジェクトの要件に応じた接続設定を行うことで、安定したデータベース接続を実現しましょう。