【実験ログ】Cloudflare Pagesで4サイトを無料公開した手順とハマりポイント
Astro(Webサイトを作るための道具。表示が速いのが特徴)で作ったサイトを公開するとき、最初にぶつかるのが「どこに公開するか」という問題です。Vercel、Netlify、AWS Amplify、Cloudflare Pages(GitHubと連携してサイトを無料で公開できるサービス)、あるいはレンタルサーバー。選択肢はたくさんあります。
この実験ログでは、Cloudflare Pagesを使って4つのAstroサイトを完全無料で公開した全手順と、その途中で遭遇したハマりポイントを正直に記録します。結論から言うと、2サイト目以降は5分で完了するようになりました。でも初回は想像以上に罠が多かった。ここに書くことは、すべて自分が実際に踏んだ地雷です。
なぜCloudflare Pagesを選んだのか
公開先の選択肢を比べてみた
まず、主なサービスを並べて比較しました。個人が複数サイトを運用する前提で、コスト・帯域・使いやすさを重視しました。
| サービス | 無料枠 | 有料プラン | ビルド回数/月 | 帯域制限 | カスタムドメイン | Git連携 |
|---|---|---|---|---|---|---|
| Cloudflare Pages | 完全無料 | - | 500回 | 無制限 | 無料 | GitHub/GitLab |
| Vercel | 無料枠あり | Pro $20/月 | 6,000分 | 100GB | 無料 | GitHub/GitLab/Bitbucket |
| Netlify | 無料枠あり | Pro $19/月 | 300分 | 100GB | 無料 | GitHub/GitLab/Bitbucket |
| AWS Amplify | 12ヶ月無料 | 従量課金 | 1,000分 | 15GB | 有料(Route53) | GitHub等 |
| エックスサーバー | なし | 約$10/月 | - | 無制限 | 含む | なし |
比較してわかったのは、Vercelは帯域が100GBまでという制限があること。画像が多いメディアサイトを4つ運用すると、いつか引っかかる可能性があります。Netlifyも同じです。AWS Amplifyは設定が複雑で、個人サイトにはオーバースペック。エックスサーバーは月額がかかるうえに、Git(ファイルの変更履歴を管理する仕組み)との連携もありません。
決め手は3つありました。帯域が完全に無制限なこと、何サイト作っても完全無料なこと、そして**Cloudflareの世界規模CDN(世界中にコピーを置いて、近い場所から配信する仕組み。表示が速くなる)**が使えること。日本からアクセスしても、アメリカからアクセスしても、最寄りのサーバーからコンテンツが配信されます。静的サイトとの相性は抜群です。
4サイト運用のホスティング費用
Cloudflare Pages x 4サイト = 月額$0。ビルド回数も500回/月の無料枠で、記事を更新するたびにデプロイ(サイトをネットに公開すること)しても余裕があります。もしVercelのProプランを使っていたら、4サイト x $20 = 月額$80。年間で$960の差になります。
もう一つ大きかったのは、Cloudflare Pagesには「そろそろ有料プランにしてね」というプレッシャーがほぼないこと。Vercelは商用利用でProプランを求めてくるし、Netlifyも無料枠を超えると課金が始まります。Cloudflare Pagesは無料枠の中で十分に使えて、「いつか課金されるかも」という不安がありません。
初回セットアップの全手順 ── 5ステップ
最初のサイト(trip-journal.net)を公開するまでの手順を、順番に書いていきます。結果的に約30分かかりましたが、そのうち半分以上はハマりポイントで消費した時間です。
Step 1: GitHubリポジトリの作成とpush
# Astroプロジェクトのフォルダで
git init
git add .
git commit -m "Initial commit"
# GitHubで新しいリポジトリを作成した後
git remote add origin https://github.com/ketyaso/trip-journal.git
git branch -M main
git push -u origin mainGitHub(Gitのデータを保存するクラウドサービス)でリポジトリを作るとき、READMEの自動生成はしないほうがいいです。ローカルですでにinitしているので、リモートとの競合が起きます。空のリポジトリを作って、ローカルからpushするのが一番スムーズです。
所要時間: 2分。
Step 2: Cloudflare Pagesに接続 ── ここが最初の落とし穴
Cloudflare Dashboardにログインして、左メニューから「Workers & Pages」を選択。「Create」ボタンを押します。
…するとWorkersの作成画面が出てきます。Pagesの画面じゃないんです。
Workers と Pages を間違える ── これが最大の罠
「Create」ボタンを押すとWorkersの画面に行ってしまいます。Pagesは、画面内にある「Pages」タブか「Looking to deploy Pages? Get started」というリンクから入る必要があります。WorkersとPagesの統合が進んだ影響で、画面がわかりにくくなっています。初めて触る人のほとんどがここで迷います。
正しい手順を整理するとこうなります。
- Workers & Pages → Create を押す
- 上のタブで 「Pages」 を選択(初期状態ではWorkersタブが表示されている)
- 「Connect to Git」 をクリック
- GitHubアカウントを連携(初回だけ認証が必要)
- デプロイしたいリポジトリを選択
- ビルド設定を入力して「Save and Deploy」
ちなみに、Workersはサーバー上でプログラムを動かす環境で、PagesはGitHub連携でサイトを公開する仕組み。名前は似ていますが役割は全然違います。Cloudflareとしては将来的に統合したいみたいですが、今の時点ではPagesタブを意識して選ぶ必要があります。
所要時間: 3分(初回の「どこだ?」を含む)。
Step 3: ビルド設定
Pagesプロジェクトの作成画面で、フレームワークの設定をします。
| 項目 | 設定値 | 備考 |
|---|---|---|
| Framework preset | Astro | ドロップダウンから選択 |
| Build command | npm run build | Astro選択で自動入力される |
| Build output directory | dist | Astroのデフォルト出力先 |
| Root directory | / | モノレポ(複数のプロジェクトを1つのフォルダで管理する方法)でなければそのまま |
| Node.js version | 18以上 | 環境変数(APIキーなどの秘密情報を安全に保存する場所)で指定推奨 |
Framework presetを「Astro」にすれば、Build commandとBuild output directoryは自動で入力されます。手で打つ必要はありません。
ただしNode.jsのバージョンには注意が必要です。Cloudflare Pagesの初期設定だとNodeのバージョンが古くて、Astroのビルドが謎のエラーで失敗することがあります。環境変数にNODE_VERSION=18を設定しておくと確実です。
所要時間: 1分。
Step 4: 独自ドメインの設定
ここが一番時間がかかるステップです。まずドメインを取得して、Cloudflareにドメインを追加して、ネームサーバー(「このドメインはどこのサーバーを使ってるか」を教える設定)を変更して、DNS(ドメイン名とサーバーの住所を紐づける電話帳のようなもの)反映を待って、最後にPagesプロジェクトにCustom domainを追加します。
ドメインの取得にはエックスサーバードメインを使いました。キャンペーンで.comや.netが初年度1円で取得できます。
| ドメイン | 取得価格 | 用途 |
|---|---|---|
| trip-journal.net | 1円 | 旅行メディア |
| vibe-code-lab.com | 1円 | バイブコーディング入門 |
| ai-cowork-lab.com | 1円 | AI活用ラボ |
| ceo-tax.com | 約200円 | 経営者向け税金ガイド |
ドメイン4つ合計で約204円。2年目以降は更新費がかかりますが、初年度はほぼ無料で始められます。
Cloudflareにドメインを追加する手順:
- Cloudflare Dashboardの「Add a site」からドメインを入力
- Freeプランを選択(迷わずFreeでOK)
- Cloudflareがネームサーバーの変更を指示してくる ── 2つのアドレスが表示される
- エックスサーバードメインの管理画面でネームサーバーを変更
エックスサーバー側のネームサーバー変更手順:
- エックスサーバードメインにログイン
- 対象ドメインの「ネームサーバー設定」を開く
- 「その他のネームサーバー」を選択
- Cloudflareが指定した2つのアドレスを入力
- 設定を保存
ネームサーバーの変更が反映されると、Cloudflareのダッシュボードでドメインのステータスが「Active」に変わります。この状態になったら、PagesプロジェクトのCustom domainsタブから独自ドメインを追加できます。
Pages Project → Custom domains → Set up a custom domain
→ ドメイン名を入力 → Activate domain
これだけです。 DNSレコードを手動で追加する必要はありません。Pages側のCustom domains機能に任せれば、必要な設定が自動的に行われます。
DNSレコードを手動で追加しないこと
「先に設定しておこう」と思って、手動でCNAMEレコード(ドメインの転送設定)を追加してからCustom domainを設定しようとすると、「もうレコードがある」とエラーになることがあります。Pages側のCustom domains機能だけを使うのが正解です。
所要時間: 15〜30分(DNS反映の待ち時間を含む)。
Step 5: 動作確認
https://your-domain.com にアクセスして、サイトが正常に表示されることを確認します。SSL証明書(通信を暗号化するための仕組み)も自動で発行されるので、HTTPSでのアクセスが最初から可能です。面倒なSSL設定は一切不要です。
ここまでの合計所要時間: 約30分(初回のUI迷子 + DNS反映待ちを含む)。
4つの最大のハマりポイント
4サイトを設定する過程で遭遇した問題を、影響度の大きい順にまとめます。これらを事前に知っていれば、初回でも15分で完了できたはずです。
罠1: Workers vs Pages の画面を間違える
Workers vs Pages の画面を間違える
こうなる: 「Create」を押してもPagesの画面が出ない。Workersのコード編集画面が表示される。
原因: CloudflareがWorkersとPagesのダッシュボードを統合し始めたせいで、「Workers & Pages」というメニューに統合されました。でもデフォルトで表示されるのはWorkersタブ。Pagesは「タブを切り替えないとたどり着けない」状態になっています。
解決策: 「Create」を押した後、画面上部にある「Pages」タブをクリック。または「Looking to deploy Pages? Get started」というリンクを探す。
失った時間: 初回は約10分。何が起きているかわからず、Workersのドキュメントを読んでさらに混乱しました。
Cloudflareの公式ドキュメントも、Workers向けとPages向けで分かれているのに、ダッシュボード上のURLは統合されています。このねじれが混乱の原因です。今後改善されるかもしれませんが、今は「Pagesタブを探す」と覚えておくしかないです。
罠2: ネームサーバーはドメインごとにバラバラ
ネームサーバーの罠
Cloudflareのネームサーバーはドメインごとにランダムに割り当てられるんです。同じCloudflareアカウントでも、ドメインが違えばネームサーバーも違います。
| ドメイン | ネームサーバー1 | ネームサーバー2 |
|---|---|---|
| trip-journal.net | aliza.ns.cloudflare.com | duke.ns.cloudflare.com |
| vibe-code-lab.com | emily.ns.cloudflare.com | uriah.ns.cloudflare.com |
| ai-cowork-lab.com | jade.ns.cloudflare.com | peter.ns.cloudflare.com |
つまり「前のドメインと同じネームサーバーでいいだろう」と思ってコピペすると、いつまでたっても接続できません。
解決策: 必ず各ドメインの「Add a site」画面で、Cloudflareが指示するネームサーバーを個別に確認してからエックスサーバー側に入力すること。
2サイト目を設定するとき、「同じアカウントなんだから、ネームサーバーも同じだろう」と思い込んで1サイト目の値をコピペしました。結果、30分待っても有効にならず、設定を見直してようやく気づきました。かんたんに言うと、「住所を間違えてるから荷物が届かない」のと同じ状態だったということです。
罠3: DNS反映は待つしかない
DNS反映の待ち時間
こうなる: ネームサーバーを変更したのに、Cloudflareのダッシュボードがいつまでも「Pending」のまま。
反映にかかる時間の目安:
- 最短: 数分(運がいい場合)
- 通常: 15〜30分
- 最長: 数時間(まれですが起きます)
やっちゃダメなこと: 「設定を間違えたかも」と焦って、ネームサーバーを何度も変更すること。変更するたびにカウントがリセットされて、反映がさらに遅くなる可能性があります。
正しい対応: 設定が正しいことを一度確認したら、あとはただ待つ。
最初のドメインのとき、15分待っても「Pending」が消えないので不安になり、ネームサーバーを別の値に変えたり戻したりを3回繰り返しました。結局、最初の設定で合っていたんです。ただ反映に時間がかかっていただけでした。
待ち時間の有効活用
DNS反映を待つ間に、次のサイトのコンテンツを書いたり、他のドメインの設定を並行して進めたりするのが賢い方法です。焦って設定をいじるのが一番非生産的。コーヒーでも淹れて待ちましょう。
罠4: GitHubリポジトリの権限を追加し忘れる
リポジトリが見えない問題
こうなる: Cloudflare PagesでGitHubリポジトリを選ぼうとしたとき、新しく作ったリポジトリが一覧に出てこない。
原因: GitHubとの連携設定で「選択したリポジトリだけ許可する」にしている場合、新しいリポジトリは自動的に許可されません。
解決策:
github.com/settings/installationsにアクセス- Cloudflare Pagesの設定を開く
- 「Configure」をクリック
- 「Repository access」で新しいリポジトリを追加
失った時間: 初回は5分(原因の調査含む)
セキュリティのために「全部のリポジトリを許可」ではなく「選んだものだけ許可」にするのは正しい判断ですが、新しいプロジェクトを追加するたびにこの手順が必要になります。4サイト目あたりでは体が覚えていました。
ドメイン購入: エックスサーバードメインの活用
ドメインの購入先にはエックスサーバードメインを選びました。理由はシンプルで、初年度1円キャンペーンがあるからです。
.comや.netが1円で取得でき、Whois代行(ドメインの持ち主情報を非公開にするサービス)も無料。2年目以降の更新費は.comが約1,600円/年、.netが約1,800円/年ですが、初年度はほぼ無料で複数ドメインを試せます。サイトの方向性が決まってから本格運用を判断できるので、実験段階にはぴったりです。
注意点として、取得したドメインのネームサーバーは初期状態でエックスサーバーのものが設定されています。Cloudflare Pagesを使う場合は、これをCloudflare指定のネームサーバーに変更する必要があります。エックスサーバーのレンタルサーバーを使わないのに、エックスサーバードメインでドメインだけ買う、というのは全く問題ありません。
2サイト目以降: 5分で完了するフロー
初回セットアップでCloudflareアカウント、GitHub連携、ネームサーバーの仕組みを理解していれば、2サイト目以降はびっくりするほど速いです。
2サイト目以降のフロー(所要時間: 約5分)
初回の30分がウソのように、2サイト目以降は5分で終わります。フローが同じだからです。唯一忘れがちなのがStep 2のGitHubリポジトリ権限の追加。「なぜリポジトリが出てこないんだ」と毎回30秒ほど考えてから思い出します。
環境変数の設定: ビルド時だけ使われる
Cloudflare Pagesで環境変数(APIキーなどの秘密情報を安全に保存する場所)を設定するのは、Settings → Environment variablesから。ここで大事なのは、AstroのSSG(サイトを事前にHTMLファイルとして作っておく方式。表示が速い)では環境変数はビルド時にだけ使われるという点です。
| 変数名 | 用途 | いつ使われるか |
|---|---|---|
GOOGLE_PLACES_API_KEY | Places APIでお店の写真を取得 | ビルド時のみ |
NODE_VERSION | Nodeバージョン指定 | ビルド時のみ |
つまり、公開後のHTMLにはAPIキー(サービスを使うための鍵のようなもの)は含まれません。ビルドサーバー上でAPIを呼び出して、その結果だけがHTMLに埋め込まれます。公開されたサイトのソースコードを見ても、APIキーは一切見えません。セキュリティ面で安心です。
PUBLIC_ プレフィックスに注意
Astroでサイトを見ている人のブラウザから環境変数を使うにはPUBLIC_プレフィックスが必要です(例: PUBLIC_GA_ID)。サーバー側のビルドスクリプトからはプレフィックスなしで使えます。APIキーのような秘密情報には絶対にPUBLIC_を付けてはいけません。つまり、PUBLIC_を付けると「見せてOK」という意味になるということです。
環境変数は「Production」と「Preview」で分けて設定できます。普通はProductionにだけ設定すれば十分ですが、プレビュー版でもAPIを使いたい場合はPreviewにも同じ値を設定します。
Cloudflare Pagesの便利な機能
セットアップが終わって、実際に使ってみて「これは便利だな」と感じた機能を書いておきます。
Preview Deployments(プレビューデプロイ)
mainブランチ以外にpushしたり、Pull Requestを作ったりすると、自動的にプレビューURLが生成されます。abc123.project.pages.devのような一時URLで変更を確認でき、本番サイトに影響を与えずにレビューできます。
かんたんに言うと、「本番に出す前に、テスト版のURLで確認できる」ということです。CSSの変更やレイアウトの調整を確認するときに特に役立ちます。
Web Analytics
Cloudflare Dashboardから、無料でアクセス解析ができます。Google Analyticsのような追跡タグをサイトに埋め込む必要がありません。ページビュー、訪問者数、国別アクセス、どこから来たかなどが確認できます。
Google Analyticsほど詳しくはないですが、「サイトが見られているかどうか」を確認するには十分です。何より、追跡用のJavaScriptを入れなくて済むので、サイトの表示速度に影響しません。
ロールバック
過去の状態に一瞬で戻せます。ビルドが壊れたときに、前の正常なバージョンに数クリックで戻せるんです。つまり、「壊れても元に戻せる」という安心感があるので、大胆な変更にも挑戦しやすくなります。
自動HTTPS
Custom domainを設定すると、SSL証明書が自動的に発行されます。面倒な設定や更新作業は一切不要。レンタルサーバーで手動でSSL設定をした経験がある人なら、この自動化のありがたみがわかるはずです。
コスト実績 ── 4サイト x 1ヶ月
実際にかかった費用
| 項目 | 金額 | 備考 |
|---|---|---|
| Cloudflare Pages(4サイト) | $0 | 無料枠で十分 |
| ドメイン4つ(初年度) | 約204円 | 1円x3 + 200円x1 |
| GitHub(Private repos) | $0 | 無料枠 |
| ビルド回数(1ヶ月) | 約80回 | 500回の無料枠以内 |
| 帯域使用量 | 計測不要 | 無制限 |
| 月額ランニングコスト | $0 | ドメイン更新費のみ年1回発生 |
ホスティング費用ゼロ。 ドメイン代の初年度204円だけで、4サイトが完全に運用できています。
もしVercelのProプランを使っていたら月額$80(4サイト分)、年間で約$960。Cloudflare Pagesならその全額が浮きます。個人でサイトを運営する人にとって、この差は大きいです。
教訓まとめ ── 5つの学び
Cloudflare Pagesで4サイトを公開して学んだこと
1. 画面の罠は「知っている」だけで回避できる WorkersとPagesの混同、ネームサーバーのランダム割り当て。どちらも事前に知っていれば5秒で解決します。知らないと30分以上ロスします。つまり、スキルの問題じゃなくて、知識の問題ということです。
2. DNS反映は「信じて待つ」が最適解 設定を何度もいじるのは逆効果。正しい設定を1回だけ行って、あとはコーヒーを飲んで待つ。不安になったらCloudflareのステータスページを確認するだけで十分です。
3. 2サイト目以降の速さが本当の価値 初回30分、2回目以降5分。このスケールする感じが、複数サイト運用では決定的に重要です。10サイト作っても追加コストはゼロ。
4. 環境変数のビルド時参照を理解する APIキーをビルド時に使って、HTMLには結果だけを埋め込む。かんたんに言うと、「裏方で秘密の鍵を使って作業して、お客さんには完成品だけ見せる」ということ。このパターンを理解すれば、セキュリティとコストの両方を最適化できます。
5. 無料でここまでできる時代に感謝 Cloudflare Pages + GitHub + エックスサーバードメインの組み合わせで、プロ並みのインフラが年間数百円で手に入ります。サーバー管理不要、SSL自動化、CDN標準装備。個人でサイトを作るハードルは確実に下がっています。
Cloudflare Pagesの総評
無料で複数サイトを運用できるサービスとして、今のところCloudflare Pagesが最強だと言い切れます。帯域無制限、ビルド500回/月、プレビューデプロイ、自動HTTPS、アクセス解析。必要なものが全部揃っています。唯一の弱点は画面のわかりにくさですが、それは初回だけの問題です。
Cloudflare Pagesを使い始めて約1ヶ月。4サイトを運用して、一度もダウンタイムを経験していません。ビルドも安定しているし、CDNのおかげでページ表示も速い。何より「月額ゼロ」という気持ちの軽さがいいです。サイトの運営費を気にせず、コンテンツに集中できる環境。それがCloudflare Pagesの一番の価値だと感じています。