📣
TiDB Cloud Essential はパブリックプレビュー中です。このページは自動翻訳されたものです。原文はこちらからご覧ください。

TiDB Cloud Serverless Driver Kysely チュートリアル



キセリー、タイプセーフでオートコンプリートに適した TypeScript SQL クエリ ビルダーです。 TiDB Cloudは@tidbcloud/kyselyを提供しており、 TiDB Cloudサーバーレスドライバーを使用して HTTPS 経由で Kysely を使用できるようにします。従来の TCP 方式と比較して、 @tidbcloud/kyselyは次の利点があります。

  • サーバーレス環境におけるパフォーマンスの向上。
  • Kyselyをエッジ環境で使用できる機能。

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

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/kysely 、および@tidbcloud/serverlessパッケージをインストールしてください。

    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 Starterインスタンスの概要ページで、右上隅の「接続」をクリックし、表示されたダイアログからデータベースの接続文字列を取得します。接続文字列は次のようになります。

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

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

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

  1. TiDB Cloud Starterインスタンスにテーブルを作成し、データを挿入してください。

    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. TypeScript を JavaScript に変換するにはts-nodeをインストールし、次に Node.js 用の TypeScript 型定義を提供するには@types/nodeをインストールします。

    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という名前のNext.jsプロジェクトを作成します。

    npx create-next-app@latest kysely-example --ts --no-eslint --tailwind --no-src-dir --app --import-alias "@/*" cd kysely-example
  3. kysely@tidbcloud/kysely 、および@tidbcloud/serverlessパッケージをインストールしてください。

    npm install kysely @tidbcloud/kysely @tidbcloud/serverless

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

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

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

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

  1. TiDB Cloud Starterインスタンスにテーブルを作成し、データを挿入してください。

    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ページに移動して、ルートからの応答を取得してください。

次は?

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