Cloudflare Workers でサイトを作ってみた
このサイトは Cloudflare Workers でホストしています。
普段は仕事で Azure を触ることが多いのですが、個人サイトまで同じノリで作るのも少し面白くないなと思い、今回は Cloudflare Workers を使ってみました。
結論から言うと、思っていたよりかなり手軽でした。個人サイトや小さなツールを置く場所としては、かなり相性が良さそうです。
全体像はこんな感じです。ビルド時に Markdown を静的 HTML 化しておき、配信時は Cloudflare のエッジから静的アセットを返す。動的な処理だけ Worker(Hono)がフォールバックで受け持つ、という構成です。
なぜ Azure ではなく Cloudflare にしたのか#
Azure で Webサイトをホスティングするなら、App Service、Azure Static Web Apps、Azure Container Apps あたりが候補になると思います。
ただ、今回はあえて Cloudflare Workers にしました。
理由はだいたいこのあたりです。
- 業務で使っている環境をそのまま使っても面白くないし嫌
- 最近 Cloudflare Workers が何かと話題
- そもそも Azure とか AWS、GCP は個人の趣味程度では冗長すぎるし費用も高い
- ドメイン管理や自宅鯖公開用途ですでにCloudflare を使っていた
特に最後は大きくて、すでにドメインを Cloudflare に寄せていたので、「せっかくならホスティングも寄せてみるか」という感じでした。
デプロイがとにかく速い#
一番驚いたのはここでした。
wrangler deploy
これだけでデプロイできます。
もちろん実際には設定ファイルやビルドの準備はありますが、一度形にしてしまえば、あとはコマンド一発で反映できます。数秒で反映されるので、個人サイトを触るにはかなり気軽です。
個人サイトで「ちょっと記事を出したい」という用途には、wrangler deploy の軽さはかなりありがたいです。
実行モデルの違いが面白い#
Cloudflare Workers は V8 isolate という仕組みで動いています。
雑に言うと、リクエストごとにコンテナやプロセスを起動するというより、軽量な実行環境でコードを動かす仕組みです。そのおかげで、よくあるサーバーレスの「久しぶりにアクセスしたときだけ遅い」感じがかなり薄いです。
このあたりは、Azure Functions や Lambda みたいなサーバーレスを触ったことがあると違いが分かりやすい気がします。
個人サイトだとアクセス数は多くないので、コールドスタートっぽい遅さは地味に気になります。その点で、Workers の体感の軽さはかなり好印象でした。
設定が見通しやすい#
このサイトの構成は、かなりの部分が wrangler.jsonc 一枚に集約されています。
ルーティング、静的アセット、デプロイ先など、見るべき場所が比較的少ないです。
クラウドの管理画面をいろいろ開いて、「結局どこで何を設定していたっけ」となることはよくありますが、個人サイトではそこまでしたくありません。
その点、Workers は設定の見通しが良くて、個人開発にはちょうどいいと感じました。
無料枠は噂どおり手厚い#
Workers の無料枠は 1 日あたり 10 万リクエストまで、と太っ腹なのですが、それ以前に 静的アセットへのリクエストはこのカウント対象外(無料・無制限) だったりします。
このサイトはページも CSS も画像もほとんどが静的アセットなので、普通に読まれている分にはリクエスト枠がほとんど減りません。枠を消費するのは、sitemap やリダイレクト、エラーページのように Worker が実際に動くときだけです。個人ブログの規模なら、まず使い切れないと思います。
アクセス解析も Cloudflare Web Analytics を使えます。
Google Analytics ほど細かく見るというより、ページビューや流入元、表示速度まわりをざっくり見る用途ならこれで良さそうです。個人サイトでそこまで細かい分析をするつもりもないので、今のところは Cloudflare Web Analytics で十分かなと思っています。Google Analytics と違って外部スクリプトを読み込まないのもいいですね。
フレームワークは Hono にした#
このサイトのアプリ部分は Hono という Web フレームワークで書いています。
最初は Cloudflare Workers と相性が良さそう、くらいの理由で選びました。実際に使ってみると、かなり薄く書けて気持ちいいです。
このサイトでは、記事を Markdown で書いて、それを読み込んで HTML にして返す、という構成にしています。React や Next.js を使うほどではないけれど、素の文字列連結で HTML を書くのもつらい。そういう温度感に Hono の JSX がちょうどよかったです。
Hono は作者が日本の方らしいです。 Hono のそもそもの始まりが「Cloudflare Workers でアプリを書きたいけれど、しっくりくるフレームワークが無かったから自分で作った」という経緯らしく、Workers との相性が良いのも納得です。名前の Hono(炎)も日本語の「ほのお」から来ていて、ロゴはそのまま🔥。
こういう軽量なフレームワークが世界中で使われていて、それを自分のサイトでも使っているというのは、少し嬉しいところですね。
技術的にも、Hono は Web標準の API をベースにしているので、Cloudflare Workers だけでなく、Deno、Bun、Node.js などでも動かせるようです。今後どこかで動かす場所を変えたくなっても、ある程度逃げ道がありそうなのも良いです。
さいごに#
Cloudflare Workers の身軽さは個人開発レベルのちょっとしたブログやツールを置く場所としてぴったりで、当面このサイトはここで育てていくつもりです。 Cloudflare Workers は無料で使えるのでぜひ使ってみてください。