TiDB CloudレスDriverDrizzle チュートリアル

霧雨ORMは、開発者エクスペリエンスを念頭に置いた軽量で高性能な TypeScript ORM です。 drizzle-orm@0.31.2から始まり、 drizzle-orm/tidb-serverlessをサポートし、 TiDB Cloudサーバーレス ドライバーで Drizzle を HTTPS 経由で使用できるようになります。

このチュートリアルでは、Node.js 環境とエッジ環境で Drizzle とTiDB Cloudサーバーレス ドライバーを使用する方法について説明します。

Node.js 環境で Drizzle とTiDB Cloudサーバーレス ドライバーを使用する

このセクションでは、Node.js 環境で Drizzle とTiDB Cloudサーバーレス ドライバーを使用する方法について説明します。

始める前に

このチュートリアルを完了するには、次のものが必要です。

ステップ1. プロジェクトを作成する

  1. drizzle-node-exampleという名前のプロジェクトを作成します。

    mkdir drizzle-node-example cd drizzle-node-example
  2. drizzle-orm@tidbcloud/serverlessパッケージをインストールします。

    npm install drizzle-orm @tidbcloud/serverless
  3. プロジェクトのルート ディレクトリで、 package.jsonファイルを見つけ、ファイルに"type": "module"追加して ES モジュールを指定します。

    { "type": "module", "dependencies": { "@tidbcloud/serverless": "^0.1.1", "drizzle-orm": "^0.31.2" } }
  4. プロジェクトのルート ディレクトリに、TypeScript コンパイラ オプションを定義するtsconfig.jsonファイルを追加します。次にサンプル ファイルを示します。

    { "compilerOptions": { "module": "ES2022", "target": "ES2022", "moduleResolution": "node", "strict": false, "declaration": true, "outDir": "dist", "removeComments": true, "allowJs": true, "esModuleInterop": true, "resolveJsonModule": true } }

ステップ2. 環境を設定する

  1. TiDB Cloudコンソールで、プロジェクトのクラスターページに移動し、ターゲットのTiDB Cloud Serverless クラスターの名前をクリックして、その概要ページに移動します。

  2. 概要ページで、右上隅の[接続]をクリックし、 [接続先]ドロップダウン ボックスでServerless Driverを選択して、 [パスワードの生成]クリックし、ランダムなパスワードを作成します。

    ヒント:

    以前にパスワードを作成したことがある場合は、元のパスワードを使用するか、 「パスワードのリセット」をクリックして新しいパスワードを生成することができます。

    接続文字列は次のようになります。

    mysql://[username]:[password]@[host]/[database]
  3. ローカル環境で環境変数DATABASE_URLを設定します。たとえば、Linux または macOS では、次のコマンドを実行できます。

    export DATABASE_URL='mysql://[username]:[password]@[host]/[database]'

ステップ3. Drizzleを使用してデータをクエリする

  1. TiDB Cloud Serverless クラスターにテーブルを作成します。

    TiDB Cloudコンソールの SQL エディター使用して SQL ステートメントを実行できます。次に例を示します。

    CREATE TABLE `test`.`users` ( `id` BIGINT PRIMARY KEY auto_increment, `full_name` TEXT, `phone` VARCHAR(256) );
  2. プロジェクトのルート ディレクトリにhello-world.tsという名前のファイルを作成し、次のコードを追加します。

    import { connect } from '@tidbcloud/serverless'; import { drizzle } from 'drizzle-orm/tidb-serverless'; import { mysqlTable, serial, text, varchar } from 'drizzle-orm/mysql-core'; // Initialize const client = connect({ url: process.env.DATABASE_URL }); const db = drizzle(client); // Define schema export const users = mysqlTable('users', { id: serial("id").primaryKey(), fullName: text('full_name'), phone: varchar('phone', { length: 256 }), }); export type User = typeof users.$inferSelect; // return type when queried export type NewUser = typeof users.$inferInsert; // insert type // Insert and select data const user: NewUser = { fullName: 'John Doe', phone: '123-456-7890' }; await db.insert(users).values(user) const result: User[] = await db.select().from(users); console.log(result);

ステップ4. Typescriptコードを実行する

  1. ts-nodeインストールして TypeScript を JavaScript に変換し、次に@types/nodeインストールして Node.js に TypeScript 型定義を提供します。

    npm install -g ts-node npm i --save-dev @types/node
  2. 次のコマンドで Typescript コードを実行します。

    ts-node --esm hello-world.ts

エッジ環境で Drizzle とTiDB Cloudサーバーレス ドライバーを使用する

このセクションでは、Vercel Edge Function を例に説明します。

始める前に

このチュートリアルを完了するには、次のものが必要です。

ステップ1. プロジェクトを作成する

  1. Vercel CLI をインストールします。

    npm i -g vercel@latest
  2. 次のターミナル コマンドを使用して、 drizzle-exampleというプロジェクトを作成します。

    npx create-next-app@latest drizzle-example --ts --no-eslint --tailwind --no-src-dir --app --import-alias "@/*"
  3. drizzle-exampleディレクトリに移動します:

    cd drizzle-example
  4. drizzle-orm@tidbcloud/serverlessパッケージをインストールします。

    npm install drizzle-orm @tidbcloud/serverless --force

ステップ2. 環境を設定する

  1. TiDB Cloudコンソールで、プロジェクトのクラスターページに移動し、ターゲットのTiDB Cloud Serverless クラスターの名前をクリックして、その概要ページに移動します。

  2. 概要ページで、右上隅の[接続]をクリックし、 [接続先]ドロップダウン ボックスでServerless Driverを選択して、 [パスワードの生成]クリックし、ランダムなパスワードを作成します。

    ヒント:

    以前にパスワードを作成したことがある場合は、元のパスワードを使用するか、 「パスワードのリセット」をクリックして新しいパスワードを生成することができます。

    接続文字列は次のようになります。

    mysql://[username]:[password]@[host]/[database]

ステップ3. エッジ関数を作成する

  1. TiDB Cloud Serverless クラスターにテーブルを作成します。

    TiDB Cloudコンソールの SQL エディター使用して SQL ステートメントを実行できます。次に例を示します。

    CREATE TABLE `test`.`users` ( `id` BIGINT PRIMARY KEY auto_increment, `full_name` TEXT, `phone` VARCHAR(256) );
  2. プロジェクトのappディレクトリにファイル/api/edge-function-example/route.tsを作成し、次のコードを追加します。

    import { NextResponse } from 'next/server'; import type { NextRequest } from 'next/server'; import { connect } from '@tidbcloud/serverless'; import { drizzle } from 'drizzle-orm/tidb-serverless'; import { mysqlTable, serial, text, varchar } from 'drizzle-orm/mysql-core'; export const runtime = 'edge'; // Initialize const client = connect({ url: process.env.DATABASE_URL }); const db = drizzle(client); // Define schema export const users = mysqlTable('users', { id: serial("id").primaryKey(), fullName: text('full_name'), phone: varchar('phone', { length: 256 }), }); export type User = typeof users.$inferSelect; // return type when queried export type NewUser = typeof users.$inferInsert; // insert type export async function GET(request: NextRequest) { // Insert and select data const user: NewUser = { fullName: 'John Doe', phone: '123-456-7890' }; await db.insert(users).values(user) const result: User[] = await db.select().from(users); return NextResponse.json(result); }
  3. コードをローカルでテストします。

    export DATABASE_URL='mysql://[username]:[password]@[host]/[database]' next dev
  4. ルートからの応答を取得するには、 http://localhost:3000/api/edge-function-exampleに移動します。

ステップ4. コードをVercelにデプロイ

  1. DATABASE_URL環境変数を使用してコードを Vercel にデプロイ。

    vercel -e DATABASE_URL='mysql://[username]:[password]@[host]/[database]' --prod

    デプロイが完了すると、プロジェクトの URL が取得されます。

  2. ルートからの応答を取得するには、 ${Your-URL}/api/edge-function-exampleページに移動します。

次は何か

このページは役に立ちましたか?