Cloudflare Pages で静的ブログをデプロイする完全ガイド:5 大フレームワークの設定で落とし穴を避ける
ブログの最初の記事を書き終え、「デプロイ」をクリック。3 分後、Cloudflare Pages に「デプロイ成功」と表示されたので、リンクをブラウザに貼り付けると——画面は真っ白。F12 でコンソールを開くと、404 が並んでいました。
初めて Astro ブログをデプロイしたときのあの徒労感。Google の答えはバラバラで、3〜4 時間試行錯誤した末、出力ディレクトリが public になっていたことが原因だと判明しました(Astro のデフォルトは dist)。
デプロイ失敗の 90% は、ビルドコマンドと出力ディレクトリの 2 点の設定ミスです。本記事では、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 のたびに Cloudflare がビルドとデプロイを実行します。Pull Request ごとにプレビューリンクも生成され、マージ前に見た目を確認できます。チームでの執筆にも便利です。
無料 SSL とカスタムドメイン付き。 証明書の面倒な設定は不要。独自ドメインの紐づけも簡単で、DNS は数分で反映されることが多いです。
ただし、先に伝えておきたいことがあります。Cloudflare は 2025 年 4 月にプラットフォーム方針を調整し、公式には Cloudflare Workers を主力に据え、Pages は大きな機能追加が見込めない「メンテナンス寄り」の状態に入りました。
とはいえ、静的ブログのデプロイには影響は小さいです。Pages は安定しており、機能も十分です。ブログやドキュメントサイト程度で、複雑な SSR やエッジ計算が不要なら、Pages が依然として最適です。動的機能や API ルート、高度なエッジ計算が必要なプロジェクトには Workers が向きます。
まとめると、今すぐ純粋な静的ブログを出すなら Pages で問題ありません。将来サーバー側の機能が必要になったら、そのとき Workers へ移行を検討すれば足ります。
5 大フレームワークの標準設定(本記事の核心)
ここからが本題です。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 の設定
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()
};
出力ディレクトリを build などに変えることもできますが、デフォルトの dist のままが無難です。共同作業時に混乱しにくくなります。
export default {
outDir: 'build'
};
Hugo の設定(最もハマりやすい)
Hugo の落とし穴は特に深いです。初回デプロイで一晩かかった経験があります。
標準設定:
- ビルドコマンド:
hugoまたはhugo -b $CF_PAGES_URL - 出力ディレクトリ:
public - 環境変数(必須):
HUGO_VERSION = 0.143.1(必要なバージョンに合わせる)
Cloudflare Pages のデフォルト Hugo は 0.54(2019 年) です。最近のテーマの多くは 0.80 以上、0.120+ を要求します。HUGO_VERSION を設定しないと、ほぼ確実にビルド失敗します。
設定方法は後述の実践フローで詳しく説明します。ここでは覚えておいてください。Pages プロジェクトの Settings > Environment variables で次を追加します。
- 変数名:
HUGO_VERSION - 値:
0.143.1(0.143のように 2 桁だけは不可)
.pages.dev ドメインを使う場合、内部リンクや RSS、sitemap を正しくするにはビルドコマンドを次のようにします。
hugo -b $CF_PAGES_URL
$CF_PAGES_URL は Cloudflare が自動注入する環境変数で、デプロイ環境に合った URL になります。
Hexo の設定
Hexo は老舗ですが、設定は比較的シンプルです。
標準設定:
- ビルドコマンド:
hexo generate(hexo gでも可) - 出力ディレクトリ:
public
大きな問題は少ないですが、テーマやプラグインが Node.js バージョンに依存することがあります。ビルド失敗時は環境変数を試してください。
- 変数名:
NODE_VERSION - 値:
14.3または18.17.0(ローカルのnode -vに合わせる)
Gatsby の設定
Gatsby は最も手間がかかりにくい部類です。
標準設定:
- ビルドコマンド:
gatsby build - 出力ディレクトリ:
public
これだけです。友人の Gatsby ブログを何度かデプロイしましたが、問題は出ませんでした。
Eleventy の設定
Eleventy(11ty)は軽量な静的サイトジェネレーターです。
標準設定:
- ビルドコマンド:
npx @11ty/eleventy - 出力ディレクトリ:
_site(アンダースコア付き)
site と書いてしまうミスが非常に多いです。出力を変える場合はルートに .eleventy.js を置きます。
module.exports = function(eleventyConfig) {
return {
dir: {
output: "public"
}
};
};
Next.js の設定(2025 年の変化)
Next.js でブログを組む場合、2025 年の変更に注意が必要です。
標準設定(2025 年新方式):
- ビルドコマンド:
npx opennextjs-cloudflare - 出力ディレクトリ:
.worker-next
重要:以前の @cloudflare/next-on-pages は非推奨です。@opennextjs/cloudflare を使います。古いチュートリアルはスキップしてください。
npm install @opennextjs/cloudflare- ビルドコマンド:
npx opennextjs-cloudflare - 出力:
.worker-next
純粋な静的ブログだけなら、Next.js より Astro や Hugo の方が軽量で速いことが多いです。
実践:Git リポジトリから公開までの完全フロー(手順付き)
設定がわかったら、ゼロからデプロイします。全体でおよそ 10 分です。
準備
始める前に次を確認します。
- コードが GitHub または GitLab にプッシュ済み — リポジトリで最新コードを確認
- package.json がある(Node.js プロジェクト)— 依存がすべて記載されているか。ローカルだけに入っているパッケージがないか
- .gitignore —
node_modules、dist、publicなどが除外されているか。ビルド成果物を push しない
node_modules まで Git に入れてしまい、デプロイで衝突した例もあります。.gitignore を一度見直してください。
詳細デプロイ手順
ステップ 1:Cloudflare にログインし Pages を開く
dash.cloudflare.com でログイン(無ければ無料登録)。左メニューの Workers & Pages → 右上 Create application。
ステップ 2:「Git に接続」を選択
- Connect to Git — GitHub/GitLab から自動デプロイ(こちら)
- Direct Upload — 手動アップロード(非推奨)
Connect to Git を選び、GitHub または GitLab を選択します。
ステップ 3:アクセス権の付与
初回は Cloudflare が Git にアクセスする承認が必要です。Sign in で GitHub/GitLab の認可画面へ。
全リポジトリを開きたくない場合は Only select repositories で特定リポジトリのみ許可できます。完了後 Cloudflare に戻ります。
ステップ 4:デプロイするリポジトリを選択
一覧からブログプロジェクトをクリック。見つからない場合は更新するか、再承認してください。
ステップ 5:ビルド設定(最重要)
- Project name:
.pages.devの一部(例:my-blog→my-blog.pages.dev) - Production branch:通常
mainまたはmaster - Framework preset:フレームワークを選ぶか None
Build settings(前の表どおり):
- Build command
- Astro:
npm run build - Hugo:
hugoまたはhugo -b $CF_PAGES_URL - Hexo:
hexo generate - Gatsby:
gatsby build - Eleventy:
npx @11ty/eleventy - Next.js:
npx opennextjs-cloudflare
- Astro:
- Build output directory
- Astro:
dist - Hugo:
public - Hexo:
public - Gatsby:
public - Eleventy:
_site - Next.js:
.worker-next
- Astro:
Framework preset で自動入力されても、必ず手動で照合してください。
ステップ 6:環境変数(必要な場合)
Environment variables (advanced) → Add variable。
- Hugo(必須):
HUGO_VERSION=0.143.1(小数点 3 桁まで) - Hexo(必要なら):
NODE_VERSION=14.3または18.17.0
ステップ 7:保存してデプロイ
Save and Deploy。ビルドログが流れ、通常 1〜3 分で完了します。
ステップ 8:結果の確認
「Success! Your site is live!」と表示され、プロジェクト名.pages.dev のリンクからサイトを開けます。
環境変数の詳細
デプロイ時に設定し忘れた場合や後から変更する場合:
- Cloudflare Pages プロジェクトを開く
- 上部 Settings
- 左 Environment variables
- Add variable → 保存
よく使う環境変数:
HUGO_VERSION:Hugo のバージョン(例0.143.1)NODE_VERSION:Node.js(例18.17.0)CF_PAGES_URL:Cloudflare が自動提供。baseURL 用に手動設定不要
重要:環境変数を変えたら再デプロイが必要です。Deployments で最新デプロイの ⋮ → Retry deployment。
プレビューデプロイ(Preview Deployments)
Pull Request を作成すると、Cloudflare が自動でプレビュー URL を生成します。GitHub で PR を作った段階で、そのブランチのビルド結果を別 URL で確認でき、問題なければ main へマージできます。複数人でブログを書くときのレビューに便利です。
困ったときは?よくあるエラーと切り分け
デプロイ中のトラブルは、だいたい次の 3 パターンで 95% カバーできます。
問題 1:ビルド失敗(Building Failed)
症状:「Building」のまま失敗し、赤いエラーアイコン。
まずログを見ます。いきなり再デプロイしないでください。
切り分け:
-
ビルドログ
- View build log または Deployment details
- 末尾の赤文字を確認(最後の数行が手がかり)
-
ビルドコマンド
- Settings > Build & deployments の Build command
- 例:
npm run buildをnpm build(run抜け)にしていないか
-
依存関係
Cannot find module/Command not foundなら package.json を確認- ローカルだけに入れ、
npm install --saveしていない可能性
-
フレームワークのバージョン
- Hugo:未設定の
HUGO_VERSIONが原因のことが多い。「Theme requires Hugo Extended version」など - Hexo:
NODE_VERSIONをローカルと揃える
- Hugo:未設定の
実例:友人の Hugo ブログで「Hugo version 0.54.0 does not support this theme」。HUGO_VERSION = 0.120.0 を追加して再デプロイしたらすぐ成功しました。
問題 2:画面真っ白(最多)
症状:デプロイ成功だがページが空白。F12 で 404 が並ぶ。
90% は出力ディレクトリの誤りです。
切り分け:
-
F12
- Console でエラー
- Network を更新して 404 リソース
- Sources でファイル構造
-
出力ディレクトリ(約 90%)
- Settings > Build & deployments の Build output directory
- Astro:
publicではなくdist - Hugo:
distではなくpublic - Eleventy:
siteではなく_site
-
baseURL / publicPath
- サブパス(
example.com/blog)なら baseURL が必要 - Hugo:
hugo -b $CF_PAGES_URL - Astro:
astro.config.mjsのbase: '/blog' - Vue/React:
publicPath: './'など
- サブパス(
-
SPA のルーティング
-
Vue Router / React Router の history モードでリロード時 404
-
hash モードにするか、ルートに
_redirects:/* /index.html 200
-
実例:自分の Astro ブログで出力を public にしていた。dist に直したら解決しました。単純な設定ミスであることも多いです。
問題 3:スタイルやリソースの読み込み失敗
症状:ページは出るが CSS が効かず、画像も表示されない。
切り分け:
- Network タブで CSS・JS・画像が 404 か、パスが正しいか
- パスの問題
/assets/style.cssのような絶対パスはサブパスデプロイで壊れやすい- Astro:import でリソースを扱う
- Hugo:
.RelPermalinkやabsURL - Hexo:
url_for()
- 外部 CDN
- jsDelivr などがブロックされていないか。必要なら国内 CDN へ
実例:Hexo ブログで CSS パスが /css/style.css だが実体は /blog/css/。サブパスデプロイで _config.yml の url と root を直し、root: /blog/ で再生成して解決しました。
クイックチェックリスト
困ったらこの順で確認します。
- ✓ ビルドログのエラー
- ✓ ビルドコマンド(設定表と照合)
- ✓ 出力ディレクトリ(設定表と照合)
- ✓ 環境変数(Hugo は HUGO_VERSION 必須)
- ✓ ブラウザ F12(コンソール・ネットワーク)
- ✓ .gitignore(ビルド成果物を push していないか)
- ✓ ローカルで
npm run buildやhugoが通るか
それでも解決しなければ、Cloudflare コミュニティや公式 Troubleshooting を参照してください。
発展:ブログをよりプロらしく
公開できたら、次の一手です。どれも難しくありませんが、体験は大きく変わります。
カスタムドメインの紐づけ
.pages.dev でも動きますが、独自ドメインの方が信頼感があります。Cloudflare は SSL も無料です。
手順:
- レジストラ(GoDaddy、お名前.com など)でドメイン取得
- Pages プロジェクトの Custom domains
- Set up a custom domain で
blog.example.comなどを入力 - 表示された DNS レコードをレジストラ側に追加
- 数分〜数時間で反映
- HTTPS は自動設定
ドメインの DNS を Cloudflare で管理していると、より速く自動設定できることが多いです。
ビルドの高速化
記事が増えるとビルド時間も伸びます。
- キャッシュ — Pages は
node_modulesをキャッシュ。毎回フルダウンロードしていないか確認 - 依存の整理 — package.json から未使用パッケージを削除。CDN で足りるライブラリは入れない
- 並列・オプション — Hugo の
--gc、Astro のexperimental.contentCollectionCacheなど - ブランチ戦略 — 日常は
dev、公開時だけmainへマージし、本番ビルドの回数を減らす
パフォーマンス監視と分析
Analytics タブで次を確認できます。
- リクエスト数
- 帯域幅
- 国別アクセス
- トレンド
Web Vitals で LCP や INP なども見られ、画像圧縮や遅延読み込みの改善に役立ちます。
自動化ワークフロー
GitHub Actions と組み合わせる例:
- 予約投稿 — 指定日時に自動公開
- sitemap 送信 — デプロイ後に検索エンジンへ
- 画像圧縮 — push 前に自動圧縮
必須ではありませんが、運用の手間は減らせます。コミュニティのテンプレートも豊富です。
まとめ
静的ブログのデプロイは、難しく見えて核心はシンプルです。ビルドコマンドと出力ディレクトリを正しくすれば、問題の 90% は避けられます。
もう一度、保存用の表です。
| フレームワーク | ビルドコマンド | 出力ディレクトリ | 必須環境変数 |
|---|---|---|---|
| Astro | npm run build | dist | - |
| Hugo | hugo | public | HUGO_VERSION = 0.143.1 |
| Hexo | hexo generate | public | - |
| Gatsby | gatsby build | public | - |
| Eleventy | npx @11ty/eleventy | _site | - |
困っても、多くは設定の打ち間違いです。ビルドログを見て、本記事のチェックリストと照らし合わせてください。
今すぐ試してみてください。 Cloudflare Pages を開き、Git を接続し、正しい設定を入れれば、10 分後にはブログが公開できます。
役に立ったら、デプロイで悩んでいる友人にも共有してください。ここにない問題があればコメントで教えてください。他の読者の助けにもなります。
デプロイ成功と、楽しい執筆を。
Cloudflare Pages で静的ブログをデプロイする完全手順
Git リポジトリから公開までのフルフロー。5 大フレームワークの正確な設定とよくあるトラブルの切り分け
⏱️ 目安時間: 10 分
- 1
ステップ1: 準備:コードのプッシュとプロジェクト設定の確認
始める前に、次の 3 点を確認します。
1. コードが GitHub または GitLab にプッシュ済みであること
• リポジトリを開き、最新コードが反映されているか確認
2. package.json があること(Node.js プロジェクトの場合)
• 依存関係がすべて記載されているか確認
• ローカルだけに入っていて package.json にない、という状態を避ける
3. .gitignore の確認
• node_modules、dist、public などが除外されているか
• ビルド成果物をリポジトリに含めない
• 以前、node_modules まで Git に入れてしまい、デプロイ時に衝突した例もあります - 2
ステップ2: Cloudflare にログインして Git リポジトリを接続
ステップ 1:Cloudflare にログインして Pages を開く
• dash.cloudflare.com を開き、アカウントでログイン(無ければ無料登録)
• 左メニューの Workers & Pages をクリック
• 右上の Create application をクリック
ステップ 2:「Git に接続」を選択
• 次の 2 つが表示されます:
- Connect to Git:GitHub/GitLab から自動デプロイ(こちらを選択)
- Direct Upload:手動アップロード(非推奨、毎回手作業)
• Connect to Git を選び、GitHub または GitLab を選択
ステップ 3:アクセス権の付与
• 初回は Cloudflare が Git リポジトリへアクセスする承認が必要
• Sign in をクリックし、GitHub/GitLab の認可画面へ
• 全リポジトリを開きたくない場合は Only select repositories で特定リポジトリのみ許可
• 完了後、Cloudflare の画面に戻る
ステップ 4:デプロイするリポジトリを選択
• 一覧からブログプロジェクトをクリック
• 見つからない場合は更新するか、前の手順で再承認 - 3
ステップ3: ビルド設定:コマンドと出力ディレクトリを入力
ステップ 5:ビルド設定(最重要)
ここを間違えると、その後すべてが崩れます。
基本情報:
• Project name:.pages.dev ドメインの一部になる(例:my-blog → my-blog.pages.dev)
• Production branch:通常 main または master
• Framework preset:Astro・Hugo などを選ぶか None でも可
Build settings(ここが核心):
前の設定表どおりに入力します。
Build command:
• Astro:npm run build
• Hugo:hugo または hugo -b $CF_PAGES_URL
• Hexo:hexo generate
• Gatsby:gatsby build
• Eleventy:npx @11ty/eleventy
• Next.js:npx opennextjs-cloudflare
Build output directory:
• Astro:dist
• Hugo:public
• Hexo:public
• Gatsby:public
• Eleventy:_site
• Next.js:.worker-next
注意:Framework preset を選ぶと自動入力されますが、必ず手動で再確認してください - 4
ステップ4: 環境変数の設定とデプロイの保存
ステップ 6:環境変数(必要な場合)
Environment variables (advanced) で Add variable。
Hugo は必須:
• Variable name:HUGO_VERSION
• Value:0.143.1(必要なら他バージョン、小数点 3 桁まで)
Hexo(必要な場合):
• Variable name:NODE_VERSION
• Value:14.3 または 18.17.0(ローカルと揃える)
ステップ 7:保存してデプロイ
• 設定を確認し Save and Deploy
• ビルドログがリアルタイム表示され、通常 1〜3 分で完了
ステップ 8:結果の確認
• Success! Your site is live! と表示されたら成功
• プロジェクト名.pages.dev のリンクからサイトを開く - 5
ステップ5: よくあるトラブル:ビルド失敗と画面真っ白
問題 1:ビルド失敗(Building Failed)
• Building のまま失敗し、赤いエラーアイコンが出る
• View build log の末尾の赤文字を確認
• Build command が設定表どおりか(npm build と run を忘れない)
• Cannot find module なら package.json の依存を確認
• Hugo は HUGO_VERSION 未設定が原因のことが多い
問題 2:画面真っ白(最多)
• デプロイ成功だがページが空白、コンソールに 404
• 90% は出力ディレクトリの誤り
• F12 の Console / Network / Sources で確認
• Astro は public ではなく dist、Hugo は dist ではなく public、Eleventy は site ではなく _site
FAQ
Cloudflare Pages で静的ブログをデプロイするのにどれくらいかかりますか?
ログイン、Git 連携、ビルド設定、環境変数、保存まで含め、ビルド自体は通常 1〜3 分。設定が正しければ、Git から公開まで 10 分は十分現実的です。
なぜデプロイ失敗の 90% はビルドコマンドと出力ディレクトリなのですか?
• Astro の出力は dist
• Hugo は public
• Eleventy は _site(アンダースコア付き)
他人のチュートリアルをそのままコピーすると、Astro で public を指定したり Hugo で dist を指定したりして画面真っ白になります。ビルドコマンドもフレームワーク固有なので、誤るとビルド自体が失敗します。
Hugo が最もハマりやすいのはなぜ?必須の環境変数は?
必須:
• Variable name:HUGO_VERSION
• Value:0.143.1(0.143 のように 2 桁だけは不可)
設定:Pages プロジェクト → Settings → Environment variables → Add variable
デプロイ成功後に画面が真っ白なときの切り分けは?
1. F12 で Console / Network を確認
2. Settings > Build & deployments の Build output directory を確認
• Astro:dist(public ではない)
• Hugo:public(dist ではない)
• Eleventy:_site(site ではない)
3. サブパスデプロイなら baseURL を確認
4. Vue Router / React Router の history モードなら hash 化または _redirects で /* /index.html 200
5 大フレームワークの標準設定は?
Hugo:hugo または hugo -b $CF_PAGES_URL / 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 年新方式)
環境変数の設定方法と、変更後は再デプロイが必要ですか?
よく使うもの:HUGO_VERSION、NODE_VERSION、CF_PAGES_URL(Cloudflare が自動提供、手動不要)
変更後は再デプロイが必要です。Deployments で最新デプロイの ⋮ から Retry deployment を選びます。
2025 年の Cloudflare Pages の変化と、今も使う価値はありますか?
静的ブログには影響は小さく、Pages は安定して十分使えます。複雑な SSR やエッジ計算が必要なら Workers を検討。純粋な静的ブログなら Pages で問題ありません。
6分で読めます · 公開日: 2025年12月1日 · 更新日: 2026年6月8日
Cloudflare フルスタック実践
検索からこのページに来た場合は、前後の記事もあわせて読むと同じテーマの理解がかなり早く深まります。
前の記事
Cloudflare無料版の制限2026:Free、Pro、Business料金比較
Cloudflare free plan limitsを2026年の公式価格、Workers制限、リクエスト本文サイズ、WAF、Page Rules、Bot対策から比較します。
第 1 / 23 記事
次の記事
Cloudflare Pages でフロントエンドをデプロイする完全ガイド:React/Vue/Next.js の設定とエラー対処
React、Vue、Next.js を Cloudflare Pages にデプロイする手順を解説。設定チェックリスト、環境変数、5 つのよくあるエラー対処法を網羅。Next.js の nodejs_compat 設定を重点的に解説し、ハマりどころを回避できます。
第 3 / 23 記事
関連記事
CF Pages のビルド失敗?よくある 8 パターンと解決策で半日分のデバッグを節約
CF Pages のビルド失敗?よくある 8 パターンと解決策で半日分のデバッグを節約
Cloudflare のキャッシュ命中率が 30% しかない?この 3 つのルールで 90% まで引き上げる
Cloudflare のキャッシュ命中率が 30% しかない?この 3 つのルールで 90% まで引き上げる
Cloudflareファイアウォールルール入門:無料5ルールで悪意トラフィック80%をフィルタ(テンプレ付き)
コメント
GitHubアカウントでログインしてコメントできます