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サーバーレス ドライバーを使用する方法について説明します。

始める前に

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

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

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

    mkdir kysely-node-example cd kysely-node-example
  2. kysely @tidbcloud/serverless @tidbcloud/kyselyインストールします。

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

    { "type": "module", "dependencies": { "@tidbcloud/kysely": "^0.0.4", "@tidbcloud/serverless": "^0.0.7", "kysely": "^0.26.3", } }
  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 Serverless クラスターの概要ページで、右上隅の[接続]をクリックし、表示されるダイアログからデータベースの接続文字列を取得します。接続文字列は次のようになります。

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

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

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

  1. 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')
  2. プロジェクトのルート ディレクトリに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コードを実行する

  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

エッジ環境でTiDB Cloud Kysely方言を使用する

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

始める前に

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

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

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

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

    npx create-next-app@latest kysely-example --ts --no-eslint --tailwind --no-src-dir --app --import-alias "@/*" cd kysely-example
  3. kysely @tidbcloud/serverless @tidbcloud/kyselyインストールします。

    npm install kysely @tidbcloud/kysely @tidbcloud/serverless

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

TiDB Cloud Serverless クラスターの概要ページで、右上隅の[接続]をクリックし、表示されるダイアログからデータベースの接続文字列を取得します。接続文字列は次のようになります。

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

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

  1. 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')
  2. プロジェクトの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内のすべてのレコードを返します。

  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ページに移動します。

次は何か

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