このチュートリアルでは、Cloudflare Workers アプリケーションを作成し、TCP ソケット と Hyperdrive を使って MySQL データベースに接続します。作成する Workers アプリケーションは、MySQL 内の商品データベースを操作します。
作業を続けるには、次が必要です。
- まだの場合は、Cloudflare アカウント ↗ に登録します。
npm↗ をインストールします。Node.js↗ をインストールします。権限の問題を避け、Node.js のバージョンを切り替えるため、Volta ↗ や nvm ↗ などの Node バージョンマネージャーを使います。Wrangler は Node.js16.17.0以降が必要です。- MySQL データベースへアクセスできることを確認します。
まず、create-cloudflare CLI ↗ で新しい Worker アプリケーションを作成します。ターミナルを開き、次のコマンドを実行します。
npm create cloudflare@latest -- mysql-tutorialyarn create cloudflare mysql-tutorialpnpm create cloudflare@latest mysql-tutorialcreate-cloudflare ↗ パッケージのインストールを求められ、セットアップウィザードが進みます。
セットアップでは、次のオプションを選びます。
- What would you like to start with? では、
Hello World exampleを選びます。 - Which template would you like to use? では、
Worker onlyを選びます。 - Which language do you want to use? では、
TypeScriptを選びます。 - Do you want to use git for version control? では、
Yesを選びます。 - Do you want to deploy your application? では、
Noを選びます(デプロイ前にいくつか変更します)。
デプロイを選ぶと、未ログインの場合は認証を求められ、プロジェクトがデプロイされます。デプロイした場合でも、このチュートリアルの最後で Worker のコードを変更し、再度デプロイできます。
作成したディレクトリへ移動します。
cd mysql-tutorialmysql2 を含むデータベースドライバーには Node.js 互換性 が必要です。Workers プロジェクトで設定してください。
互換性日付が 2026-08-04 以降の場合、Workers と Pages プロジェクトでは nodejs_compat と nodejs_compat_v2 がデフォルトで有効になります。組み込みのランタイム API とポリフィルは、追加の設定なしで使えます。これらの互換性日付では、これらのフラグは使われません。既存プロジェクトは、互換性日付を更新するときにフラグを削除する必要はありません。
互換性日付が 2026-08-04 より前の場合は、オプトインするために Wrangler 設定ファイル に nodejs_compat 互換性フラグ を追加します。
{
"compatibility_flags": [
"nodejs_compat"
]
}compatibility_flags = [ "nodejs_compat" ]互換性日付が 2026-08-04 以降で Node.js 互換 を完全にオフにするには、有効化フラグがあれば削除します。次に no_nodejs_compat と no_nodejs_compat_v2 の両方を追加します。設定例は Node.js 互換性フラグ を参照してください。
MySQL データベースの接続文字列を使い、Hyperdrive の設定を作成します。
npx wrangler hyperdrive create <NAME_OF_HYPERDRIVE_CONFIG> --connection-string="mysql://user:password@HOSTNAME_OR_IP_ADDRESS:PORT/database_name"このコマンドは、Hyperdrive の バインディング に使う設定の id を出力します。Wrangler の設定ファイルに id を指定して、バインディングを設定します。
{
"$schema": "./node_modules/wrangler/config-schema.json",
"name": "hyperdrive-example",
"main": "src/index.ts",
// Set this to today's date
"compatibility_date": "2026-09-20",
"compatibility_flags": [
"nodejs_compat"
],
// Pasted from the output of `wrangler hyperdrive create <NAME_OF_HYPERDRIVE_CONFIG> --connection-string=[...]` above.
"hyperdrive": [
{
"binding": "HYPERDRIVE",
"id": "<ID OF THE CREATED HYPERDRIVE CONFIGURATION>"
}
]
}"$schema" = "./node_modules/wrangler/config-schema.json"
name = "hyperdrive-example"
main = "src/index.ts"
# Set this to today's date
compatibility_date = "2026-09-20"
compatibility_flags = [ "nodejs_compat" ]
[[hyperdrive]]
binding = "HYPERDRIVE"
id = "<ID OF THE CREATED HYPERDRIVE CONFIGURATION>"mysql2 ↗ ドライバーをインストールします。
npm i mysql2@>3.13.0yarn add mysql2@>3.13.0pnpm add mysql2@>3.13.0bun add mysql2@>3.13.0wrangler.jsonc に、必要な Node.js 互換フラグと Hyperdrive バインディングを追加します。
{
// required for database drivers to function
"compatibility_flags": [
"nodejs_compat"
],
// Set this to today's date
"compatibility_date": "2026-09-20",
"hyperdrive": [
{
"binding": "HYPERDRIVE",
"id": "<your-hyperdrive-id-here>"
}
]
}compatibility_flags = [ "nodejs_compat" ]
# Set this to today's date
compatibility_date = "2026-09-20"
[[hyperdrive]]
binding = "HYPERDRIVE"
id = "<your-hyperdrive-id-here>"Hyperdrive のパラメーターを渡して、新しい connection インスタンスを作成します。
// mysql2 v3.13.0 or later is required
import { createConnection } from "mysql2/promise";
export default {
async fetch(request, env, ctx): Promise<Response> {
// Create a new connection on each request. Hyperdrive maintains the underlying
// database connection pool, so creating a new connection is fast.
const connection = await createConnection({
host: env.HYPERDRIVE.host,
user: env.HYPERDRIVE.user,
password: env.HYPERDRIVE.password,
database: env.HYPERDRIVE.database,
port: env.HYPERDRIVE.port,
// Required to enable mysql2 compatibility for Workers
disableEval: true,
});
try {
// Sample query
const [results, fields] = await connection.query("SHOW tables;");
// Return result rows as JSON
return Response.json({ results, fields });
} catch (e) {
console.error(e);
return Response.json(
{ error: e instanceof Error ? e.message : e },
{ status: 500 },
);
}
},
} satisfies ExportedHandler<Env>;次のコマンドで Worker をデプロイします。
npx wrangler deployアプリケーションは <YOUR_WORKER>.<YOUR_SUBDOMAIN>.workers.dev で公開され、アクセスできます。
データベースと Workers でさらに作る場合は、チュートリアル と データベースのドキュメント を参照してください。
質問がある場合、サポートが必要な場合、プロジェクトを共有したい場合は、Discord ↗ の Cloudflare Developer コミュニティに参加し、ほかの開発者や Cloudflare チームとつながってください。