ひとことで言うと
Cloudflare Workersはリクエストが届くたびにコードが起動し、レスポンスを返すイベント駆動のランタイムです。コールドスタートがほぼゼロで、世界300か所以上のエッジロケーションで動作します。Node.jsとの違いは「サーバープロセスが常駐しない」点で、リクエストごとに独立した実行コンテキストが用意されます。
Workers単体はHTMLを保存する機能を持ちませんが、R2やKV(Key-Valueストア)にバインドすることでファイルの読み出しや保存が可能になります。たとえば`fetch`イベントを受け取ったWorkerが`env.MY_BUCKET.get('index.html')`でR2からHTMLを取得し、そのままレスポンスとして返すという構成が基本パターンです。
- 相手がログインなしで開ける状態か確認する
- PCとスマホで最低1回ずつ表示を確認する
- 内部情報・個人情報・不要な外部送信が残っていないか見る
- レビュー期限と修正時の差し替え方を決めておく
HTML共有で関係する場面
パスワードで保護されたHTMLプレビューURLを実現するとき、Workersがゲートキーパーの役割を担います。アクセス時にWorkersがBasic認証ヘッダーを確認し、正しければR2からHTMLを返し、誤りなら401レスポンスを返すというシンプルな実装が可能です。このロジックは20〜30行程度のJavaScriptで書けます。
ギガサイト便のようなZIP展開・HTML配信サービスでは、WorkersがZIPのアップロード受付・展開・R2への保存・プレビューURLの発行を一気通貫で処理します。Workersのリクエストボディサイズ上限(無料プランで100MB)に注意が必要ですが、大きなファイルはChunked Uploadで分割送信することで対応できます。
よくある誤解
「WorkersはNode.jsと完全互換」という誤解が多く見られます。WorkersはWinterCGというブラウザ互換APIのサブセットを実装しており、Node.js固有のAPIである`fs`や`path`モジュールはそのままでは使えません。ただし`nodejs_compat`フラグを有効にすることで一部のNode.js APIを利用できるようになります。
「CPU時間は無制限に使える」という誤解も危険です。無料プランのWorkersは1リクエストあたり10msのCPU時間制限があります。複雑な画像処理やPDFパースをWorkers内でやろうとするとタイムアウトします。重い処理はDurable ObjectsやQueue経由でバックグラウンド実行に回す設計が必要です。
安全に使うための注意点
WorkersのコードはWrangler CLIでデプロイしますが、`wrangler.toml`にシークレット(APIキーなど)をハードコードしないでください。シークレットは`wrangler secret put SECRET_NAME`コマンドで環境変数として登録し、コード内では`env.SECRET_NAME`で参照します。GitリポジトリにAPIキーを残さないための基本的な作法です。
Workersのログ(`console.log`)はCloudflareのダッシュボードで確認できますが、ユーザーの個人情報やアクセストークンをログに出力しないよう注意してください。デバッグ中についつい全リクエストヘッダーをログに流してしまうことがありますが、本番デプロイ前に必ずログ出力内容を精査する習慣をつけましょう。
よくある質問
WorkersからR2のファイルを返すときにContent-Typeを自動で設定してくれますか?
いいえ、自動判定はされません。R2オブジェクトのメタデータに`httpMetadata.contentType`を設定しておくか、Worker側でファイル拡張子を見てContent-Typeヘッダーを手動で付与する必要があります。HTMLの場合は`text/html; charset=utf-8`を明示してください。
Workersのデプロイはどのくらい時間がかかりますか?
Wrangler CLIで`wrangler deploy`を実行すると通常10〜30秒以内に世界中のエッジへの展開が完了します。ビルド不要のシンプルなWorkerほど速く、TypeScriptのコンパイルやバンドルが必要な場合でも1〜2分以内に収まることがほとんどです。
WorkersのCPU制限に引っかかった場合のエラーはどう見えますか?
ブラウザ側には502または1101エラーとして表示されます。Cloudflareのダッシュボードのログには「Worker exceeded CPU time limit」という旨のメッセージが記録されるので、そのメッセージを手がかりに処理の分割やキャッシュ追加を検討してください。