つれづれなる Agent OPS
Cloudflare

Cloudflare Pagesで個人ブログを無料公開してみる

Astroで作った静的サイトをCloudflare Pagesにデプロイし、GitHub連携、独自ドメイン、ローカル開発と本番公開の流れを確認する実験ログ。

はじめに

個人開発を始めると、最初に地味に詰まるのが公開環境です。

アプリ本体を作る前に、LPを置きたい。技術ブログを公開したい。ポートフォリオを用意したい。そう思っても、いざ公開しようとすると、ホスティング、独自ドメイン、SSL、GitHub連携、ビルド設定、環境変数など、細かい判断が一気に出てきます。

VercelやNetlifyを使えばすぐに公開できます。ただ、Cloudflare Pagesもかなり強い選択肢です。静的サイトであれば、GitHubにpushするだけでデプロイでき、独自ドメインも扱いやすく、CloudflareのCDN上で配信されます。

今回は、まずCloudflare Pagesで静的サイトを公開するところだけに絞って試します。

AI機能やLLMOpsの話はこの記事では扱いません。まずは、個人開発者が「ブログ、LP、ポートフォリオをCloudflareに置ける」状態を作るのが目的です。

今回作るもの

今回は、Astroで小さな静的サイトを作ります。

内容は、個人ブログのトップページ、記事一覧、記事詳細ページだけです。DBも認証もAPIも使いません。最小構成でCloudflare Pagesにデプロイします。

構成は次のようにします。

Browser

Cloudflare Pages

Static HTML / CSS / JS

技術構成は次のとおりです。

Astro
Cloudflare Pages
GitHub
Custom Domain

この記事で確認することは、次の5つです。

  • Astroで静的サイトを作れるか
  • GitHub連携でCloudflare Pagesにデプロイできるか
  • pushするだけで再デプロイされるか
  • 独自ドメインを設定できるか
  • ローカル開発と本番公開で詰まる点はどこか

なぜCloudflare Pagesを使うのか

静的サイトの公開先としては、Vercel、Netlify、GitHub Pagesなど、いくつか選択肢があります。

その中でCloudflare Pagesを試す理由は、Cloudflareの他サービスへ広げやすいからです。

最初は静的サイトだけで十分です。しかし、個人開発を続けていると、問い合わせフォーム、画像配信、API、認証、AI機能、Bot対策などを後から足したくなります。

Cloudflare Pagesを入口にしておくと、Workers、R2、KV、D1、Turnstileなどに広げやすいです。最初から全部使う必要はありませんが、あとから拡張できる余地があるのは安心です。

この記事では、まずPagesだけを使います。複雑にしすぎると、静的サイト公開という本題がぼやけるためです。

セットアップ

まずAstroプロジェクトを作ります。

npm create astro@latest cloudflare-pages-blog
cd cloudflare-pages-blog
npm install
npm run dev

ローカルで起動して、ブラウザで確認します。

npm run dev

最初はテンプレートのままで構いません。ここで重要なのは、デザインではなく、Cloudflare Pagesへデプロイする流れを確認することです。

ビルド設定

Astroの静的サイトとしてビルドします。

npm run build

ビルド結果は通常 dist に出力されます。

Cloudflare Pagesでは、次のように設定します。

Framework preset: Astro
Build command: npm run build
Build output directory: dist

GitHubリポジトリとCloudflare Pagesを連携し、mainブランチへのpushをトリガーにデプロイします。

デプロイしてみる

GitHubにpushします。

git init
git add .
git commit -m "Initial Astro site"
git branch -M main
git remote add origin git@github.com:your-name/cloudflare-pages-blog.git
git push -u origin main

Cloudflare Pagesの管理画面からGitHubリポジトリを選び、ビルド設定を入力してデプロイします。

初回デプロイが成功すると、Cloudflare Pagesのサブドメインでサイトが公開されます。

https://your-project.pages.dev

ここまで来れば、静的サイトの公開自体は完了です。

独自ドメインを設定する

次に、独自ドメインを設定します。

Cloudflareでドメインを管理している場合、PagesのCustom domainsからドメインを追加するだけで設定できます。Cloudflare外でドメインを管理している場合は、DNSレコードの設定が必要になります。

ここは実際に試しながら、次の点を確認します。

  • apex domainで公開するのか
  • subdomainで公開するのか
  • DNS反映にどれくらい時間がかかるのか
  • HTTPS証明書が自動で有効になるのか

個人ブログなら、最初は blog.example.com のようなサブドメインで試すのが安全です。既存サイトがある場合、apex domainをいきなり切り替えると影響範囲が大きくなります。

詰まりそうなところ

実際に進める前から、いくつか詰まりどころが予想できます。

1つ目は、ビルド出力ディレクトリの指定です。Astroなら基本は dist ですが、フレームワークや設定によって変わります。Cloudflare Pages側のBuild output directoryが間違っていると、ビルドは通ってもページが表示されません。

2つ目は、Node.jsのバージョンです。ローカルでは動いているのにCloudflare Pagesのビルド環境では落ちる場合があります。必要であれば、.node-version や環境変数でNode.jsバージョンを固定します。

3つ目は、画像やパスの扱いです。相対パス、base path、public配下のファイル参照が、本番で崩れることがあります。特にGitHub Pagesから移行する場合、base pathの設定が残っているとハマりそうです。

4つ目は、独自ドメインのDNSです。Cloudflare管理下のドメインならかなり楽ですが、外部DNSを使っている場合は、CNAMEやTXT検証で少し手間取る可能性があります。

スクリーンショットとして残すもの

この記事では、次のスクリーンショットを残します。

  • ローカルで表示したAstroサイト
  • Cloudflare Pagesのプロジェクト作成画面
  • ビルド設定画面
  • 初回デプロイ成功画面
  • pages.devで公開されたサイト
  • Custom domains設定画面
  • 独自ドメインで表示されたサイト

特に、ビルド設定とデプロイ結果は読者が再現するときに役立つので、必ず残します。

この記事で言いたいこと

Cloudflare Pagesは、静的サイトを公開するだけならかなり素直に使えます。

個人開発では、アプリ本体を作る前に、LP、ブログ、ポートフォリオのような外側の置き場が必要になります。そこに時間をかけすぎると、本来作りたいものに進めません。

Cloudflare Pagesを使えば、GitHubにpushするだけで公開でき、独自ドメインも設定しやすい。まずはこの入口を作っておくと、その後にWorkers、R2、D1、Turnstile、AI Gatewayなどへ拡張しやすくなります。

ただし、最初から全部Cloudflareに寄せる必要はありません。今回の記事ではPagesだけを使い、静的サイト公開の最小構成に絞ります。

次の記事では、静的サイトに問い合わせフォームやAPIを足す場合に、Cloudflare Workersをどう組み合わせるかを試していきます。

DUO

Author

DUOps

LLMOps、Agent、MCP、Langfuse、Cloudflare 周辺の実装と運用を、個人で試しながら記録しています。

Xを見る

Related