Skip to content

非公式本サイトは非公式の日本語ドキュメントであり、Cloudflare 公式サイトではありません。最新情報はdevelopers.cloudflare.comをご確認ください。

Cloudflare Workers で MySQL データベースに接続する

最終更新 Markdown で表示Agent セットアップ

このチュートリアルでは、Cloudflare Workers アプリケーションを作成し、TCP ソケットHyperdrive を使って MySQL データベースに接続します。作成する Workers アプリケーションは、MySQL 内の商品データベースを操作します。

前提条件

作業を続けるには、次が必要です。

  1. まだの場合は、Cloudflare アカウント に登録します。
  2. npm をインストールします。
  3. Node.js をインストールします。権限の問題を避け、Node.js のバージョンを切り替えるため、Voltanvm などの Node バージョンマネージャーを使います。Wrangler は Node.js 16.17.0 以降が必要です。
  4. MySQL データベースへアクセスできることを確認します。

1. Worker アプリケーションを作成する

まず、create-cloudflare CLI で新しい Worker アプリケーションを作成します。ターミナルを開き、次のコマンドを実行します。

npm create cloudflare@latest -- mysql-tutorial

create-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-tutorial

2. Node.js 互換性を有効にする

mysql2 を含むデータベースドライバーには Node.js 互換性 が必要です。Workers プロジェクトで設定してください。

互換性日付が 2026-08-04 以降の場合、Workers と Pages プロジェクトでは nodejs_compatnodejs_compat_v2 がデフォルトで有効になります。組み込みのランタイム API とポリフィルは、追加の設定なしで使えます。これらの互換性日付では、これらのフラグは使われません。既存プロジェクトは、互換性日付を更新するときにフラグを削除する必要はありません。

互換性日付が 2026-08-04 より前の場合は、オプトインするために Wrangler 設定ファイルnodejs_compat 互換性フラグ を追加します。

{
	"compatibility_flags": [
		"nodejs_compat"
	]
}
compatibility_flags = [ "nodejs_compat" ]

互換性日付が 2026-08-04 以降で Node.js 互換 を完全にオフにするには、有効化フラグがあれば削除します。次に no_nodejs_compatno_nodejs_compat_v2 の両方を追加します。設定例は Node.js 互換性フラグ を参照してください。

3. Hyperdrive の設定を作成する

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>"

4. Worker からデータベースをクエリする

mysql2 ドライバーをインストールします。

npm i mysql2@>3.13.0

wrangler.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>;

5. Worker をデプロイする

次のコマンドで Worker をデプロイします。

npx wrangler deploy

アプリケーションは <YOUR_WORKER>.<YOUR_SUBDOMAIN>.workers.dev で公開され、アクセスできます。

次のステップ

データベースと Workers でさらに作る場合は、チュートリアルデータベースのドキュメント を参照してください。

質問がある場合、サポートが必要な場合、プロジェクトを共有したい場合は、Discord の Cloudflare Developer コミュニティに参加し、ほかの開発者や Cloudflare チームとつながってください。

役に立ちましたか?