Drizzle ORMのNeon接続概要

Drizzle ORMは、NeonのサーバーレスPostgreSQLデータベースへの接続において、HTTPおよびWebSocketベースの専用ドライバーを提供しています。Neonは、サーバーレス環境に最適化されたデータベースサービスで、HTTPやWebSocket経由での接続をサポートしており、特にエッジ環境での利用に適しています。本記事では、Drizzle ORMを使用してNeonに接続するための設定方法と、HTTPとWebSocket接続の違いについて詳しく解説します。

HTTP接続を使用したNeonとの連携

HTTPベースのneon-httpドライバーは、非対話的なトランザクションやリクエスト単位の簡単なクエリ操作に適しています。サーバーレス環境での高速なデータベースアクセスが求められる場合に最適です。

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

まず、Drizzle ORMとNeon用のHTTP接続ドライバーをインストールします。また、drizzle-kitも追加します。

npm install drizzle-orm @neondatabase/serverless
npm install -D drizzle-kit

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

NeonのHTTP接続を設定するには、DATABASE_URLを使用してデータベースの接続URLを環境変数から読み込みます。

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

HTTP接続はリクエストごとに接続が開かれるため、単一トランザクションや簡単な読み取り操作に向いています。

WebSocket接続を使用したNeonとの連携

WebSocketベースのneon-serverlessドライバーは、セッションの維持やインタラクティブなトランザクションが必要な場合に適しています。サーバーレス環境での対話型クエリや複数ステップのトランザクション処理に活用できます。

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

Node.jsでWebSocketを使用するには、wsbufferutilの追加が必要です。

npm install drizzle-orm @neondatabase/serverless ws bufferutil
npm install -D drizzle-kit

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

WebSocket接続を初期化するには、neonConfigオプションでWebSocketの設定を指定します。

import { drizzle } from 'drizzle-orm/neon-serverless';
import ws from 'ws';
const db = drizzle({
  connection: process.env.DATABASE_URL,
  ws: ws,  // WebSocket接続を指定
});
const result = await db.execute('SELECT 1');

WebSocketドライバーは、クライアントからの継続的な接続が必要な場合や、リッチなインタラクティブセッションが求められる環境に最適です。

WebSocketを使用する際の注意点

Node.jsでは、グローバルにWebSocketが定義されていないため、wsbufferutilのインストールが必要です。また、NeonのWebSocket接続がリクエスト間でセッションを維持するため、リアルタイムアプリケーションや高度なデータ処理に向いています。

HTTPとWebSocketの接続方式の比較

接続方式用途特徴
HTTP単一の簡単なクエリ操作、非対話的な処理に最適リクエストごとに接続、レスポンスが迅速
WebSocket継続的な接続や対話型セッションに適するセッション管理、対話的トランザクションに対応

まとめ

Drizzle ORMは、NeonのHTTPおよびWebSocket接続をサポートすることで、サーバーレス環境での柔軟なデータベース操作を実現します。シンプルなリクエストにはHTTP接続、インタラクティブでリアルタイム性が求められるアプリケーションにはWebSocket接続を選択することで、Neonのポテンシャルを最大限に引き出すことが可能です。