TiDB Cloud Serverless Driver Drizzle チュートリアル
Drizzle ORM 、開発者エクスペリエンスを念頭に置いた軽量で高性能な TypeScript ORM です。 drizzle-orm@0.31.2以降、 drizzle-orm/tidb-serverlessをサポートしており、 TiDB Cloudサーバーレスドライバー.
このチュートリアルでは、Node.js環境およびエッジ環境でDrizzleとTiDB Cloudサーバーレスドライバーを使用する方法について説明します。
ヒント:
このドキュメントの手順は、 TiDB Cloud Starterインスタンスに加えて、 TiDB Cloud Essentialインスタンスでも適用できます。
Node.js環境でDrizzleとTiDB Cloudのサーバーレスドライバーを使用する
このセクションでは、Node.js環境でDrizzleとTiDB Cloudサーバーレスドライバーを連携させる方法について説明します。
始める前に
このチュートリアルを完了するには、以下のものが必要です。
- Node.js >= 18.0.0。
- npm 、またはお好みのパッケージマネージャーを使用してください。
- TiDB Cloud Starterインスタンス。お持ちでない場合は、 TiDB Cloud Starterインスタンスを作成する。
ステップ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ページに移動し、ターゲットのTiDB Cloud Starterインスタンスの名前をクリックして、その概要ページに移動します。
概要ページで、右上隅の「接続」をクリックし、 「接続先」ドロップダウンリストから
Serverless Driverを選択してから、 「パスワードを生成」をクリックしてランダムなパスワードを作成します。ヒント:
以前にパスワードを作成したことがある場合は、元のパスワードを使用するか、 「パスワードをリセット」をクリックして新しいパスワードを生成できます。
接続文字列は次のようになります。
mysql://[username]:[password]@[host]/[database]ローカル環境で環境変数
DATABASE_URLを設定してください。例えば、Linux または macOS では、次のコマンドを実行できます。export DATABASE_URL='mysql://[username]:[password]@[host]/[database]'
ステップ3. Drizzleを使用してデータをクエリする
TiDB Cloud Starterインスタンスにテーブルを作成します。
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コードを実行する
TypeScript を JavaScript に変換するには
ts-nodeをインストールし、次に Node.js 用の TypeScript 型定義を提供するには@types/nodeをインストールします。npm install -g ts-node npm i --save-dev @types/node以下のコマンドでTypeScriptコードを実行してください。
ts-node --esm hello-world.ts
エッジ環境でDrizzleとTiDB Cloudのサーバーレスドライバーを使用する
このセクションでは、Vercel Edge関数を例として取り上げます。
始める前に
このチュートリアルを完了するには、以下のものが必要です。
- エッジ環境を提供するヴェルセルアカウント。
- npm 、またはお好みのパッケージマネージャーを使用してください。
- TiDB Cloud Starterインスタンス。お持ちでない場合は、 TiDB Cloud Starterインスタンスを作成する。
ステップ1. プロジェクトを作成する
Vercel CLIをインストールしてください。
npm i -g vercel@latest以下のターミナルコマンドを使用して
drizzle-exampleという名前のNext.jsプロジェクトを作成します。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ページに移動し、ターゲットのTiDB Cloud Starterインスタンスの名前をクリックして、その概要ページに移動します。
概要ページで、右上隅の「接続」をクリックし、 「接続先」ドロップダウンリストから
Serverless Driverを選択してから、 「パスワードを生成」をクリックしてランダムなパスワードを作成します。ヒント:
以前にパスワードを作成したことがある場合は、元のパスワードを使用するか、 「パスワードをリセット」をクリックして新しいパスワードを生成できます。
接続文字列は次のようになります。
mysql://[username]:[password]@[host]/[database]
ステップ3. エッジ関数を作成する
TiDB Cloud Starterインスタンスにテーブルを作成します。
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 devhttp://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を統合する方法を学びましょう。