テック技報最新号へ →
コード

Cloudflare Workers: HTMLRewriter でレスポンスの HTML をストリームのまま書き換える

Workers の組み込み API HTMLRewriter を使うと、オリジンから返ってきた HTML を CSS セレクタで捕まえて、属性の変更や要素の追加・削除ができる。全体をメモリに読み込まずストリームで処理するので速い。

@zaru · 投稿 2026-06-14
#infra#cloudflare#typescript

コード例

ts
export default {
  async fetch(req: Request): Promise<Response> {
    const res = await fetch(req);
    return new HTMLRewriter()
      .on('a[href^="http://"]', {
        element(el) {
          const href = el.getAttribute("href")!;
          el.setAttribute("href", href.replace("http://", "https://"));
        },
      })
      .on("head", {
        element(el) {
          el.append('<meta name="robots" content="noindex">', { html: true });
        },
      })
      .transform(res);
  },
};

使いどころ

  • 既存サイトにバナーやタグを差し込む、リンクを一括で書き換える、A/B テスト用に要素を差し替える

注意点

  • テキストはチャンク単位で届くので、text() ハンドラで文字列を扱うときは分割に注意する。
  • JS で後から描画される要素(クライアントサイドレンダリング)は対象外。

出典

X の元の投稿を開く