Drizzle ORMのPlanetScale接続概要

PlanetScaleは、スケーラビリティとパフォーマンスに優れたサーバーレスMySQLプラットフォームで、特にサーバーレスアプリケーションに最適化されています。Drizzle ORMは、PlanetScaleと接続するためのHTTPおよびTCPドライバーをサポートしており、アプリケーションの用途に応じて適切な接続方式を選択可能です。本記事では、Drizzle ORMを用いてPlanetScaleに接続するための設定手順と、接続方式の使い分けについて詳しく解説します。

PlanetScaleとの接続設定方法

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

まず、PlanetScale用のHTTPクライアント@planetscale/databaseDrizzle ORMをインストールします。また、開発環境用にdrizzle-kitも追加します。

npm install drizzle-orm @planetscale/database
npm install -D drizzle-kit

ステップ2:HTTP接続設定の初期化

HTTPベースのplanetscale-serverlessドライバーを使った接続は、サーバーレス環境に最適です。以下のコードでは、環境変数に設定したホスト名、ユーザー名、パスワードを使ってデータベースに接続しています。

import { drizzle } from 'drizzle-orm/planetscale-serverless';
const db = drizzle({
  connection: {
    host: process.env.DATABASE_HOST,
    username: process.env.DATABASE_USERNAME,
    password: process.env.DATABASE_PASSWORD
  }
});
const result = await db.select().from('users');

この設定により、HTTP接続によるスケーラブルなデータベースアクセスが可能になります。

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

既に@planetscale/databaseクライアントを利用している場合、そのクライアントインスタンスをDrizzle ORMに渡すことで再利用が可能です。

import { drizzle } from 'drizzle-orm/planetscale-serverless';
import { Client } from '@planetscale/database';
const client = new Client({
  host: process.env.DATABASE_HOST,
  username: process.env.DATABASE_USERNAME,
  password: process.env.DATABASE_PASSWORD
});
const db = drizzle({ client });
const users = await db.select().from('users');

クライアントインスタンスの再利用により、複数の接続設定が不要になるため、コードの簡素化が図れます。

TCP接続を用いた接続設定

PlanetScaleは、HTTP接続に加えてTCP接続もサポートしており、持続的な接続が必要なアプリケーションでのパフォーマンス向上が期待できます。TCP接続にはmysql2ドライバーを使用します。

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

TCP接続を使用する場合は、mysql2パッケージもインストールします。

npm install mysql2

ステップ2:TCP接続の初期化

以下の例では、mysql2ドライバーを用いてPlanetScaleにTCP接続を設定しています。

import { drizzle } from 'drizzle-orm/mysql2';
import mysql from 'mysql2/promise';
const pool = mysql.createPool({
  host: process.env.DATABASE_HOST,
  user: process.env.DATABASE_USERNAME,
  password: process.env.DATABASE_PASSWORD,
  database: process.env.DATABASE_NAME
});
const db = drizzle(pool);
const result = await db.select().from('users');

プール接続により、同時接続数を管理しつつ効率的なデータ処理が可能です。

HTTP接続とTCP接続の使い分け

接続方式使用環境特徴
HTTP接続サーバーレス環境、Vercelなどで推奨リクエストごとに接続が作成されスケーラブル
TCP接続長期接続が必要なサーバー環境持続的な接続が可能で、パフォーマンス向上
TCPプール接続高負荷のアプリケーション環境複数の接続を効率的に管理し、リソース最適化

まとめ

Drizzle ORMは、PlanetScaleのHTTPおよびTCP接続をサポートしており、用途に応じて柔軟な接続方式が選べます。サーバーレス環境でのスケーラビリティを重視する場合はHTTP接続、高負荷の環境でのパフォーマンス向上にはTCP接続が適しています。用途に応じて適切な接続方式を選択し、効率的なデータベース操作を実現しましょう。