Cloudflare Hyperdrive、MySQL 対応でコード変更ゼロの爆速接続に!
やっほー、しぃちゃんだよ! 今日は Cloudflare Workers を使ってる子に見てほしいニュースを持ってきたよ。データベース接続がまたひとつ便利になったんだ。
Cloudflare Changelogなにが発表されたの?
Cloudflare の Changelog によると、Hyperdrive で MySQL データベースへの接続が一般提供(GA)になったんだって。Workers から任意の MySQL データベースにつなげられるようになったよ。
Hyperdrive は、リージョナルなデータベースを Cloudflare Workers から使うときに速くしてくれる仕組みなの。接続確立時の余計なラウンドトリップを減らして、データベース接続をグローバルにプーリングして、クエリ結果をキャッシュすることもできるんだって。
今までどうだったの?
今まで Hyperdrive が対応していたのは PostgreSQL のデータベースだけだったの。だから MySQL を使ってるプロジェクトは、Hyperdrive の速さの恩恵を受けられなかったんだよね。
これで何が変わるの?
MySQL を使ってる人も、今使ってるドライバや ORM、クエリビルダーをそのまま使って Hyperdrive につなげられるようになったの。コードを書き換える必要はなくて、Hyperdrive の安全な認証情報を使うだけでいいんだって。しかも MySQL の料金は Postgres と同じだから、追加コストを気にせず試せるよ。
これで、自分のリージョナルな MySQL データベースを持ってる人が、Workers アプリを作るときに Hyperdrive の恩恵(接続の高速化・プーリング・キャッシュ)をそのまま受けられるようになったってわけ。
深く潜ってみよう
原文にはサンプルコードも載っていたよ。mysql2/promise を使ったシンプルな例だとこんな感じ。
import { createConnection } from "mysql2/promise";
export default {
async fetch(request, env, ctx) {
const connection = await createConnection({
host: env.HYPERDRIVE.host,
user: env.HYPERDRIVE.user,
password: env.HYPERDRIVE.password,
database: env.HYPERDRIVE.database,
port: env.HYPERDRIVE.port,
disableEval: true, // Workers との互換性のために必須
});
const [results, fields] = await connection.query("SHOW tables;");
ctx.waitUntil(connection.end());
return new Response(JSON.stringify({ results, fields }), {
headers: {
"Content-Type": "application/json",
"Access-Control-Allow-Origin": "*",
},
});
},
};
env.HYPERDRIVE からホスト・ユーザー・パスワード・データベース名・ポートを受け取って接続する形。ポイントは disableEval: true を指定すること。Workers 環境で動かすために必須の設定なんだって。TypeScript を使う場合は Env インターフェースに HYPERDRIVE: Hyperdrive を定義しておく書き方も紹介されていたよ。
まとめ
- Hyperdrive の MySQL サポートが一般提供(GA)になったよ
- 今まで Postgres 専用だったのが、MySQL データベースにも Workers から高速接続できるように
- 既存のドライバ・ORM・クエリビルダーをそのまま使えて、コード変更は不要
- 料金は Postgres と同じ
リージョナルな MySQL データベースを Cloudflare Workers から使いたい人、Postgres 以外のデータベースで Hyperdrive を待ってた人にぴったりのアップデートだったよ。