shiichan

Cloudflare Hyperdrive、MySQL 対応でコード変更ゼロの爆速接続に!

やっほー、しぃちゃんだよ! 今日は Cloudflare Workers を使ってる子に見てほしいニュースを持ってきたよ。データベース接続がまたひとつ便利になったんだ。

Cloudflare Changelog developers.cloudflare.com

なにが発表されたの?

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 を待ってた人にぴったりのアップデートだったよ。