TiDB CloudレスDriverKysely チュートリアル
キセリは、型安全で自動補完対応の TypeScript SQL クエリ ビルダーです。TiDB TiDB Cloud は翻訳:を提供し、 TiDB Cloudサーバーレス ドライバー使用して HTTPS 経由で Kysely を使用できます。従来の TCP 方式と比較して、 翻訳:次の利点があります。
- サーバーレス環境でのパフォーマンスが向上します。
- エッジ環境で Kysely を使用する機能。
このチュートリアルでは、Node.js 環境とエッジ環境で Kysely とTiDB Cloudサーバーレス ドライバーを使用する方法について説明します。
Node.js環境でTiDB Cloud Kysely方言を使用する
このセクションでは、Node.js 環境で Kysely とTiDB Cloudサーバーレス ドライバーを使用する方法について説明します。
始める前に
このチュートリアルを完了するには、次のものが必要です。
- Node.js >= 18.0.0。
- ネプまたはお好みのパッケージ マネージャーを使用します。
- TiDB Cloud Serverless クラスター。ない場合は、 TiDB Cloud Serverless クラスターを作成する使用できます。
ステップ1. プロジェクトを作成する
kysely-node-example
という名前のプロジェクトを作成します。mkdir kysely-node-example cd kysely-node-examplekysely
@tidbcloud/serverless
@tidbcloud/kysely
インストールします。npm install kysely @tidbcloud/kysely @tidbcloud/serverlessプロジェクトのルート ディレクトリで、
package.json
ファイルを見つけ、ファイルに"type": "module"
追加して ES モジュールを指定します。{ "type": "module", "dependencies": { "@tidbcloud/kysely": "^0.0.4", "@tidbcloud/serverless": "^0.0.7", "kysely": "^0.26.3", } }プロジェクトのルート ディレクトリに、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 Serverless クラスターの概要ページで、右上隅の[接続]をクリックし、表示されるダイアログからデータベースの接続文字列を取得します。接続文字列は次のようになります。
mysql://[username]:[password]@[host]/[database]ローカル環境で環境変数
DATABASE_URL
を設定します。たとえば、Linux または macOS では、次のコマンドを実行できます。export DATABASE_URL='mysql://[username]:[password]@[host]/[database]'
ステップ3. Kyselyを使用してデータをクエリする
TiDB Cloud Serverless クラスターにテーブルを作成し、データを挿入します。
TiDB Cloudコンソールの SQL エディター使用して SQL ステートメントを実行できます。次に例を示します。
CREATE TABLE `test`.`person` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(255) NULL DEFAULT NULL, `gender` enum('male','female') NULL DEFAULT NULL, PRIMARY KEY (`id`) USING BTREE ); insert into test.person values (1,'pingcap','male')プロジェクトのルート ディレクトリに
hello-world.ts
という名前のファイルを作成し、次のコードを追加します。import { Kysely,GeneratedAlways,Selectable } from 'kysely' import { TiDBServerlessDialect } from '@tidbcloud/kysely' // Types interface Database { person: PersonTable } interface PersonTable { id: GeneratedAlways<number> name: string gender: "male" | "female" } // Dialect const db = new Kysely<Database>({ dialect: new TiDBServerlessDialect({ url: process.env.DATABASE_URL }), }) // Simple Querying type Person = Selectable<PersonTable> export async function findPeople(criteria: Partial<Person> = {}) { let query = db.selectFrom('person') if (criteria.name){ query = query.where('name', '=', criteria.name) } return await query.selectAll().execute() } console.log(await findPeople())
ステップ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
エッジ環境でTiDB Cloud Kysely方言を使用する
このセクションでは、Vercel Edge Function のTiDB Cloud Kysely 方言を例に説明します。
始める前に
このチュートリアルを完了するには、次のものが必要です。
- エッジ環境を提供するヴェルセルアカウント。
- ネプまたはお好みのパッケージ マネージャーを使用します。
- TiDB Cloud Serverless クラスター。ない場合は、 TiDB Cloud Serverless クラスターを作成する使用できます。
ステップ1. プロジェクトを作成する
Vercel CLI をインストールします。
npm i -g vercel@latest次のターミナル コマンドを使用して、
kysely-example
という次プロジェクトを作成します。npx create-next-app@latest kysely-example --ts --no-eslint --tailwind --no-src-dir --app --import-alias "@/*" cd kysely-examplekysely
@tidbcloud/serverless
@tidbcloud/kysely
インストールします。npm install kysely @tidbcloud/kysely @tidbcloud/serverless
ステップ2. 環境を設定する
TiDB Cloud Serverless クラスターの概要ページで、右上隅の[接続]をクリックし、表示されるダイアログからデータベースの接続文字列を取得します。接続文字列は次のようになります。
mysql://[username]:[password]@[host]/[database]
ステップ3. エッジ関数を作成する
TiDB Cloud Serverless クラスターにテーブルを作成し、データを挿入します。
TiDB Cloudコンソールの SQL エディター使用して SQL ステートメントを実行できます。次に例を示します。
CREATE TABLE `test`.`person` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(255) NULL DEFAULT NULL, `gender` enum('male','female') NULL DEFAULT NULL, PRIMARY KEY (`id`) USING BTREE ); insert into test.person values (1,'pingcap','male')プロジェクトの
app
ディレクトリにファイル/api/edge-function-example/route.ts
を作成し、次のコードを追加します。import { NextResponse } from 'next/server'; import type { NextRequest } from 'next/server'; import { Kysely,GeneratedAlways,Selectable } from 'kysely' import { TiDBServerlessDialect } from '@tidbcloud/kysely' export const runtime = 'edge'; // Types interface Database { person: PersonTable } interface PersonTable { id: GeneratedAlways<number> name: string gender: "male" | "female" | "other" } // Dialect const db = new Kysely<Database>({ dialect: new TiDBServerlessDialect({ url: process.env.DATABASE_URL }), }) // Query type Person = Selectable<PersonTable> async function findPeople(criteria: Partial<Person> = {}) { let query = db.selectFrom('person') if (criteria.name){ query = query.where('name', '=', criteria.name) } return await query.selectAll().execute() } export async function GET(request: NextRequest) { const searchParams = request.nextUrl.searchParams const query = searchParams.get('query') let response = null; if (query) { response = await findPeople({name: query}) } else { response = await findPeople() } return NextResponse.json(response); }上記のコードはクエリ パラメータ
query
を受け入れ、クエリの結果を返します。クエリ パラメータが指定されていない場合は、テーブルperson
内のすべてのレコードを返します。コードをローカルでテストします。
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
ページに移動します。
次は何か
- キセリと翻訳:について詳しく見る
- 方法を学ぶTiDB CloudとVercelを統合する