公開先にCloudflare Pagesを選んだ理由 — ホスティングの仕組みメモ
このサイトの公開構成
- GitHub(プライベートリポジトリ) = 原稿置き場であり、下書きの工房
- Astro = Markdownの原稿から静的なHTMLを生成する道具
- Cloudflare Pages = 公開面(実際に読者のブラウザへ配信する側)
流れは「原稿を書く → ブランチを切る → PR → main へマージ → Cloudflare が自動でビルドして公開」。工房と公開面を分けているのが、この構成の芯である。
なぜ Cloudflare Pages なのか
- プライベートリポジトリのまま無料で公開できる(後述のとおり、GitHub Pages の無料枠ではできない)
- 転送量が無制限で、アクセスが増えても課金されない
- ビルドは月500回まで無料。マージのたびに1回という運用では十分すぎる
- PRごとにプレビューURLが自動で発行される
- 将来、Functions(動的な処理)や Access(見られる人を限定する公開)に広げられる
仕組み:「置きに行く」のではなく「取りに来る」
昔のFTP方式は、自分のPCからサーバーへ、完成したHTMLファイルを「置きに行く」やり方だった。今の方式は向きが逆である。
- GitHub に原稿(Markdownなど「材料」)を push する
- GitHub が Cloudflare に「更新があった」と通知する
- Cloudflare が GitHub へ読みに来て、自社の環境でビルドし、世界中の配信拠点に配置する
ここでいうビルドとは、材料から完成品のHTML一式を生成する工程のこと。push のたびにサイト全体を組み立て直す(このサイトなら1分前後)。なお、ビルド回数と読者のアクセス数は別物で、アクセス(リクエスト数・転送量)は無料枠でも無制限である。
細かい制御も可能で、コミットメッセージの先頭に [CI Skip] と付けるとその回のビルドを飛ばせるし、「このフォルダの変更のときだけビルドする」という対象パスの設定もある。
GitHub Pages との違い
| 項目 | GitHub Pages | Cloudflare Pages |
|---|---|---|
| 公開できるリポジトリ | 無料枠は公開リポジトリのみ | プライベートでも可 |
| 転送量 | 月100GB程度が目安のソフト制限 | 無制限 |
| ビルド | GitHub Actions(設定が必要) | 自動(月500回まで無料) |
| 動的な機能 | 静的サイトのみ | Functions / Access が使える |
| PRプレビュー | 標準ではなし | 自動で発行 |
決定的なのは1行目で、このリポジトリはプライベートなので、GitHub Pages を使うなら「リポジトリを公開する」か「有料プランに入る」必要がある。
レンダリングとハイドレーション
- レンダリング: ブラウザが HTML/CSS を受け取って画面に描くこと。対になる概念として SSR(サーバーサイドレンダリング)があり、こちらはリクエストのたびにサーバーが HTML を作って返す方式
- ハイドレーション: サーバー側で生成した静的な HTML に、ブラウザ側で JavaScript を結び付けて操作できるようにする工程。ECサイトのカートボタン、SNS の「いいね」、予約サイトのフォームなど、「まず速く表示し、後から操作を受け付ける」ページで使う
このサイトはビルド時に全ページを生成し終える静的サイトで、Astro は原則として JavaScript を送らない。記事内のクイズや演習も、HTML に直接書いた素の JavaScript がそのまま動いているため、ハイドレーションという工程自体が存在しない。なお Astro には、ページの大半は静的のまま、検索窓のような部品だけを動かす「アイランド」という部分的なやり方もある。
ついでに:記事への画像とリンクの書き方
- リンク:
[表示される文字](URL)。サイト内の別記事へは[第9話](/knowledge/09-ip-mac/)のようにパスで書く - 画像: ファイルを
public/images/knowledge/<記事の名前>/に置き、本文にと書く。外部サイトの画像 URL を直接貼る「直リンク」はしない
どちらも Markdown の標準記法で、ビルドすると <a> や <img> に変換されて表示される(実際にテスト記事でビルド確認済み)。
まとめ
- 工房(GitHub・非公開)と公開面(Cloudflare)を分けるのが、この構成の芯
- Cloudflare との連携は「最後」でよい。連携した瞬間から main の内容がそのまま公開になるため、画像挿入などの仕上げが終わってから接続する方が、公開範囲がぶれない