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サーバーレス ドライバーを使用する方法について説明します。
始める前に
このチュートリアルを完了するには、次のものが必要です。
- Node.js >= 18.0.0。
- ネプまたはお好みのパッケージ マネージャーを使用します。
- TiDB Cloud Serverless クラスター。ない場合は、 TiDB Cloud Serverless クラスターを作成する使用できます。
ステップ1. プロジェクトを作成する
drizzle-node-example
という名前のプロジェクトを作成します。mkdir drizzle-node-example cd drizzle-node-exampledrizzle-orm
と@tidbcloud/serverless
パッケージをインストールします。npm install drizzle-orm @tidbcloud/serverlessプロジェクトのルート ディレクトリで、
package.json
ファイルを見つけ、ファイルに"type": "module"
追加して ES モジュールを指定します。{ "type": "module", "dependencies": { "@tidbcloud/serverless": "^0.1.1", "drizzle-orm": "^0.31.2" } }プロジェクトのルート ディレクトリに、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. 環境を設定する
TiDB Cloudコンソールで、プロジェクトのクラスターページに移動し、ターゲットのTiDB Cloud Serverless クラスターの名前をクリックして、その概要ページに移動します。
概要ページで、右上隅の[接続]をクリックし、 [接続先]ドロップダウン ボックスで
Serverless Driver
を選択して、 [パスワードの生成] をクリックし、ランダムなパスワードを作成します。ヒント:
以前にパスワードを作成したことがある場合は、元のパスワードを使用するか、 「パスワードのリセット」をクリックして新しいパスワードを生成することができます。
接続文字列は次のようになります。
mysql://[username]:[password]@[host]/[database]ローカル環境で環境変数
DATABASE_URL
を設定します。たとえば、Linux または macOS では、次のコマンドを実行できます。export DATABASE_URL='mysql://[username]:[password]@[host]/[database]'
ステップ3. Drizzleを使用してデータをクエリする
TiDB Cloud Serverless クラスターにテーブルを作成します。
TiDB Cloudコンソールの SQL エディター使用して SQL ステートメントを実行できます。次に例を示します。
CREATE TABLE `test`.`users` ( `id` BIGINT PRIMARY KEY auto_increment, `full_name` TEXT, `phone` VARCHAR(256) );プロジェクトのルート ディレクトリに
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コードを実行する
ts-node
インストールして TypeScript を JavaScript に変換し、次に@types/node
インストールして Node.js に TypeScript 型定義を提供します。npm install -g ts-node npm i --save-dev @types/node次のコマンドで Typescript コードを実行します。
ts-node --esm hello-world.ts
エッジ環境で Drizzle とTiDB Cloudサーバーレス ドライバーを使用する
このセクションでは、Vercel Edge Function を例に説明します。
始める前に
このチュートリアルを完了するには、次のものが必要です。
- エッジ環境を提供するヴェルセルアカウント。
- ネプまたはお好みのパッケージ マネージャーを使用します。
- TiDB Cloud Serverless クラスター。ない場合は、 TiDB Cloud Serverless クラスターを作成する使用できます。
ステップ1. プロジェクトを作成する
Vercel CLI をインストールします。
npm i -g vercel@latest次のターミナル コマンドを使用して、
drizzle-example
という次プロジェクトを作成します。npx create-next-app@latest drizzle-example --ts --no-eslint --tailwind --no-src-dir --app --import-alias "@/*"drizzle-example
ディレクトリに移動します:cd drizzle-exampledrizzle-orm
と@tidbcloud/serverless
パッケージをインストールします。npm install drizzle-orm @tidbcloud/serverless --force
ステップ2. 環境を設定する
TiDB Cloudコンソールで、プロジェクトのクラスターページに移動し、ターゲットのTiDB Cloud Serverless クラスターの名前をクリックして、その概要ページに移動します。
概要ページで、右上隅の[接続]をクリックし、 [接続先]ドロップダウン ボックスで
Serverless Driver
を選択して、 [パスワードの生成] をクリックし、ランダムなパスワードを作成します。ヒント:
以前にパスワードを作成したことがある場合は、元のパスワードを使用するか、 「パスワードのリセット」をクリックして新しいパスワードを生成することができます。
接続文字列は次のようになります。
mysql://[username]:[password]@[host]/[database]
ステップ3. エッジ関数を作成する
TiDB Cloud Serverless クラスターにテーブルを作成します。
TiDB Cloudコンソールの SQL エディター使用して SQL ステートメントを実行できます。次に例を示します。
CREATE TABLE `test`.`users` ( `id` BIGINT PRIMARY KEY auto_increment, `full_name` TEXT, `phone` VARCHAR(256) );プロジェクトの
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); }コードをローカルでテストします。
export DATABASE_URL='mysql://[username]:[password]@[host]/[database]' next devルートからの応答を取得するには、
http://localhost:3000/api/edge-function-example
に移動します。
ステップ4. コードをVercelにデプロイ
DATABASE_URL
環境変数を使用してコードを Vercel にデプロイ。vercel -e DATABASE_URL='mysql://[username]:[password]@[host]/[database]' --prodデプロイが完了すると、プロジェクトの URL が取得されます。
ルートからの応答を取得するには、
${Your-URL}/api/edge-function-example
ページに移動します。
次は何か
- 霧雨とdrizzle-orm/tidb-serverlessについて詳しく学びます。
- TiDB CloudとVercelを統合するの方法を学びます。