Cloudflare Pages静的サイトデプロイ完全ガイド:5大フレームワークの設定と落とし穴

午前2時、ブログの最初の記事を書き終え、期待に胸を膨らませて「デプロイ」ボタンをクリックしました。3分後、Cloudflare Pagesが「Success」と表示。ワクワクしながらURLを開くと……画面は真っ白。F12でコンソールを開くと、404エラーの山。
正直、初めてAstroブログをデプロイした時は絶望しました。Googleで「Cloudflare Pages デプロイ失敗」と検索しても、答えはバラバラ。「ビルドコマンドが違う」「出力ディレクトリが間違っている」「設定ファイルを変えろ」……数時間格闘した末、原因は単純な設定ミスでした。出力ディレクトリを public にしていたのですが、Astroのデフォルトは dist だったのです。
その後、友人のHugoやHexoブログのデプロイを手伝う中で気づきました。デプロイ失敗の9割は、「ビルドコマンド」と「出力ディレクトリ」の設定ミスが原因です。フレームワークごとにデフォルト設定が異なるため、適当にコピペすると痛い目に遭います。
この記事では、Astro, Hugo, Hexo, Gatsby, Eleventyという5大静的サイトフレームワークのCloudflare Pagesにおける正確な設定値と、「画面が真っ白」「ビルド失敗」といったトラブルの解決法を解説します。これさえ読めば、Gitから10分で公開まで辿り着けます。
なぜCloudflare Pagesなのか?(2025年の状況)
私が静的ブログにCloudflare Pagesを推す理由はシンプルです。
無料、かつ爆速。
Cloudflareは世界中300以上のデータセンターを持っています。GitHub PagesやVercelも素晴らしいですが、特にアジア圏からのアクセス速度と安定性において、Cloudflare Pagesは群を抜いています。帯域幅の制限もなく、ビルド回数も無制限です。
Git連携が超便利。
GitHubやGitLabと連携すれば、git push するだけで自動的にビルド・デプロイが走ります。Pull RequestごとにプレビューURLを発行してくれる機能は、記事の校正やデザイン確認に神がかり的に便利です。
SSL証明書もカスタムドメインも無料。
面倒な証明書更新作業は一切不要。独自ドメインの設定もDNSレコードを追加するだけで完了します。
注意点:2025年のプラットフォーム方針
Cloudflareは2025年4月、プラットフォーム戦略を調整し、Cloudflare Workers を主力として推進し始めました。Pagesは「メンテナンスモード」に近い状態となり、大きな新機能追加は見込めません。
しかし、静的ブログのホスティングとしては、依然としてPagesが最適解です。複雑なバックエンド処理が必要ならWorkersへの移行を検討すべきですが、ブログやドキュメントサイトならPagesで何の問題もありません。安心して使い続けてOKです。
5大フレームワークの鉄板設定リスト(保存版)
ここが本記事の核です。迷ったらこの表を見てください。
クイック設定表
| フレームワーク | ビルドコマンド | 出力ディレクトリ | 重要ポイント |
|---|---|---|---|
| Astro | npm run build | dist | デフォルトでOK。SSR利用時は要追加設定。 |
| Hugo | hugo | public | 環境変数 HUGO_VERSION の指定が必須! |
| Hexo | hexo generate | public | テーマによっては NODE_VERSION の指定が必要。 |
| Gatsby | gatsby build | public | 最もトラブルが少ない優等生。 |
| Eleventy | npx @11ty/eleventy | _site | アンダースコア _ を忘れずに。 |
| Next.js | npx opennextjs-cloudflare | .worker-next | 2025年新方式。古い情報のままデプロイすると失敗します。 |
各フレームワークの注意点を詳しく見ていきましょう。
Astro の設定
私が現在メインで使っているフレームワークです。
標準設定:
- ビルドコマンド:
npm run build(またはastro build) - 出力ディレクトリ:
dist
SSG(静的生成)ならこれで完璧です。もしSSR(サーバーサイドレンダリング)を使う場合は、@astrojs/cloudflare アダプターをインストールし、astro.config.mjs に以下を追加する必要があります。
import cloudflare from '@astrojs/cloudflare';
export default {
output: 'server',
adapter: cloudflare()
};Hugo の設定(ハマりポイントNo.1)
Hugoは落とし穴が深いです。
標準設定:
- ビルドコマンド:
hugo(またはhugo -b $CF_PAGES_URL) - 出力ディレクトリ:
public - 必須環境変数:
HUGO_VERSION = 0.143.1(使用するバージョンに合わせて)
最大の罠: Cloudflare Pagesがデフォルトで使用するHugoのバージョンは 0.54 (2019年の太古のバージョン) です。最近のテーマはほぼ100%動きません。必ず環境変数 HUGO_VERSION で新しいバージョンを指定してください。
また、baseURL 問題を避けるため、ビルドコマンドを hugo -b $CF_PAGES_URL にすると、プレビュー環境でもリンクが壊れません(Cloudflareが自動でURLを注入してくれます)。
Hexo の設定
老舗ですが、依然として根強い人気があります。
標準設定:
- ビルドコマンド:
hexo generate(またはhexo g) - 出力ディレクトリ:
public
Node.jsのバージョンに敏感なテーマが多いです。ビルドが失敗する場合、環境変数 NODE_VERSION を 18.17.0 や 20.0.0 など、ローカル環境と同じバージョンに固定してください。
Gatsby の設定
標準設定:
- ビルドコマンド:
gatsby build - 出力ディレクトリ:
public
特に難しいことはありません。最も安定してデプロイできるフレームワークの一つです。
Eleventy (11ty) の設定
標準設定:
- ビルドコマンド:
npx @11ty/eleventy - 出力ディレクトリ:
_site
注意点は出力ディレクトリの先頭にアンダースコア _ が付くことです。これを忘れて site と書いてしまい、404になるケースが後を絶ちません。
Next.js の設定(2025年の新常識)
標準設定(新方式):
- ビルドコマンド:
npx opennextjs-cloudflare - 出力ディレクトリ:
.worker-next
重要: 以前主流だった @cloudflare/next-on-pages は非推奨になりました。現在は @opennextjs/cloudflare アダプターが推奨されています。古いチュートリアルを見て設定するとハマるので注意してください。
ただ、純粋な静的ブログならAstroやHugoの方が軽量で扱いやすいのが本音です。
実践:Gitリポジトリから公開までの完全フロー
では実際にデプロイしてみましょう。手元にGitHub/GitLabにプッシュ済みのコードがある前提で進めます。
ステップ1:Cloudflare Pagesでのプロジェクト作成
- Cloudflare Dashboard にログイン。
- 左メニューの Workers & Pages をクリック。
- Create application → Pages タブ → Connect to Git を選択。
ステップ2:Git連携
- Connect to Git をクリックし、GitHubまたはGitLabアカウントと連携します。
- デプロイしたいリポジトリを選択し、Begin setup をクリック。
ステップ3:ビルド設定の入力(最重要)
ここが運命の分かれ道です。
- Project name: ドメイン名になります(例:
my-blog→my-blog.pages.dev)。 - Production branch: 通常は
mainやmaster。 - Framework preset: 使用しているフレームワークを選択すると、コマンドとディレクトリが自動入力されます。ただし、必ず上記の「鉄板設定リスト」と照らし合わせて確認してください。過信は禁物です。
ステップ4:環境変数の設定(Hugo/Hexoユーザーは必須)
Settings セクションを開き、Environment variables を追加します。
- Hugoの場合:
HUGO_VERSION=0.143.1 - Node系の場合(必要なら):
NODE_VERSION=18.17.0
ステップ5:保存してデプロイ
Save and Deploy をクリック。ログが流れ始め、1〜3分程度で完了します。「Success! Your site is live!」と表示されれば勝利です。
トラーブルシューティング:困った時の処方箋
ケース1:ビルド失敗(Build Failed)
ログの最後の方を見てください。
User error: Hugo version 0.54.0 does not support...
→ 環境変数HUGO_VERSIONの設定忘れです。Command not foundやCannot find module
→package.jsonに依存関係が書かれていないか、インストールの段階で失敗しています。
ケース2:デプロイ成功したが画面が真っ白
9割方、出力ディレクトリ(Build output directory)の設定ミスです。
- Astroなのに
publicと書いていないか?(正解はdist) - Hugoなのに
distと書いていないか?(正解はpublic) - Eleventyで
siteと書いていないか?(正解は_site)
ケース3:CSSや画像が読み込まれない
パス(Path)の問題です。
- サブディレクトリ(
example.com/blogなど)にデプロイしている場合、フレームワーク側でbaseURLやbaseの設定が必要です。 - Hugoの場合、ビルドコマンドを
hugo -b $CF_PAGES_URLに変更すると、Cloudflareが自動的に正しいURLを埋め込んでくれるので解決することが多いです。
さらにプロっぽく:カスタムドメインと高速化
無事に公開できたら、次のステップへ。
カスタムドメインの設定
.pages.dev ドメインでもいいですが、独自ドメインは信頼の証です。
Pages のプロジェクトページ → Custom domains → Set up a custom domain から設定できます。CloudflareでDNS管理しているドメインなら、ものの数秒で設定完了し、SSLも自動適用されます。
ビルドの高速化
記事が増えるとビルド時間が伸びます。
- キャッシュの活用: Cloudflare Pagesはデフォルトで
node_modulesをキャッシュします。 - 不要な依存の削除:
package.jsonを見直し、使っていないライブラリを削除しましょう。 - Hugoの最適化:
--gc --minifyオプションを付けると、ゴミ掃除と圧縮を同時に行ってくれます。
まとめ
静的ブログのデプロイは、**「正しい設定値を知っているか」**だけの勝負です。
- Astroなら
dist - Hugoなら
public+ 環境変数 - Eleventyなら
_site
これさえ間違えなければ、Cloudflare Pagesは最強のブログホスティング環境になります。ぜひ、あなただけの素敵なブログを世界に公開してください。
Cloudflare Pages 静的ブログデプロイ手順
GitリポジトリからCloudflare Pagesへ静的サイトをデプロイする完全フロー
⏱️ Estimated time: 10 min
- 1
Step1: 準備確認
1. コードをGitHub/GitLabにプッシュ済みであること。
2. package.jsonに必要な依存関係が含まれていること。
3. .gitignoreで node_modules やビルド成果物(dist/public)が除外されていること。 - 2
Step2: Cloudflareプロジェクト作成
Cloudflareダッシュボードの「Workers & Pages」>「Create application」>「Pages」>「Connect to Git」を選択し、リポジトリを連携する。 - 3
Step3: ビルド設定の入力
ここが最重要!
- Astro: コマンド npm run build / 出力 dist
- Hugo: コマンド hugo / 出力 public (環境変数 HUGO_VERSION 必須)
- Hexo: コマンド hexo generate / 出力 public
- Eleventy: コマンド npx @11ty/eleventy / 出力 _site - 4
Step4: 環境変数の設定
Hugoの場合は「HUGO_VERSION」に「0.143.1」などを指定。Node.jsのバージョン指定が必要な場合は「NODE_VERSION」を設定。 - 5
Step5: デプロイ実行
「Save and Deploy」をクリック。数分でデプロイが完了し、URLが発行される。
FAQ
デプロイは成功したのに画面が真っ白です。なぜ?
Hugoのビルドが失敗します。
Cloudflare Pagesは無料ですか?
4 min read · 公開日: 2025年12月1日 · 更新日: 2026年1月22日
関連記事
Next.js ファイルアップロード完全ガイド:S3/Qiniu Cloud 署名付き URL 直接アップロード実践

Next.js ファイルアップロード完全ガイド:S3/Qiniu Cloud 署名付き URL 直接アップロード実践
Next.js Eコマース実践:カートと Stripe 決済の完全実装ガイド

Next.js Eコマース実践:カートと Stripe 決済の完全実装ガイド
Next.js ユニットテスト実践:Jest + React Testing Library 完全設定ガイド


コメント
GitHubアカウントでログインしてコメントできます