microfeed on Cloudflare
Cloudflare無料枠でヘッドレスCMSは構築できるのか
microfeed 実装検証レポート
目的
Cloudflare の無料枠(Pages / Workers / D1 / R2)だけで完結するヘッドレスCMS環境を構築できるかを検証することにしました。
外部サーバーや有料サービスを使わず、Cloudflare基盤のみで完結する構成が理想です。
候補選定にあたり Gemini CLI に比較させたところ、「microfeed を試してみてはどうか」という提案があったため、今回の検証対象として採用しました。
1. Workers & Pages をゼロから構築
本来は create-cloudflare コマンドで自動生成する予定でしたが、環境制約により実行できませんでした。
そのため、以下を手動で作成しました。
package.json
wrangler.toml
src/index.ts
必要な依存関係をインストールし、wrangler.toml には以下のバインディングを明示的に設定しました。
D1 データベース
R2 バケット
この時点では、後に必要となる環境変数の全体像をまだ把握できていませんでした。
2. D1・R2・APIトークンの準備
microfeed の動作に必要なリソースを手動で作成しました。
D1 データベース
ダッシュボード → ストレージとデータベース → D1 → データベースを作成
例:microfeed-db
R2 バケット
ダッシュボード → R2 オブジェクトストレージ → バケットを作成
例:microfeed
あわせて、CloudflareのカスタムAPIトークンも発行。
ただし、この段階では必要な権限を完全には整理できていませんでした。
3. Workersデプロイ時のトラブル
最初のデプロイで発生したエラーは、CLOUDFLARE_API_TOKEN が認識されないという問題でした。
調査の結果、原因はAPIトークンの権限不足。
最低限必要だった権限は以下です。
Account → Workers Script → Edit
Account → D1 → Edit
Account → Workers R2 Storage → Edit
Account → Cloudflare Pages → Edit
ログ確認用として、以下もあると便利です。
Account → Workers Tail → Read
権限を段階的に追加することで、最終的に汎用的な「Hello World」Workerのデプロイに成功しました。
なお、CLIで失敗してもCloudflareのWeb画面上では動作するケースがあり、ここが重要な切り分けポイントになります。
4. microfeedはCloudflare Pages経由で動作する
検証を進める中で、microfeed はWorkers単体ではなく、Cloudflare Pagesを介してデプロイされる構成であることが判明しました。
そのため、APIトークンには以下の権限も必要でした。
必須権限
Account → Workers R2 Storage → Edit
Account → Workers KV Storage → Edit
Account → D1 → Edit
Account → Cloudflare Pages → Edit
Account → Workers Script → Edit
任意(あると便利)
Account → Workers Tail → Read
カスタムドメイン利用時のみ必要
Zone → DNS → Edit
Zone → SSL and Certificates → Edit
Zone → Zone Settings → Read
5. GitHub Actionsによる自動デプロイ
microfeed のGitHubリポジトリをフォークし、GitHub Actionsで自動デプロイできるよう設定しました。
リポジトリ
Settings → Secrets and variables → Actions → Repository secrets
登録した主なシークレットは以下です。
CLOUDFLARE_API_TOKEN
CLOUDFLARE_ACCOUNT_ID
R2_ACCESS_KEY_ID
R2_SECRET_ACCESS_KEY
D1_DATABASE_NAME
D1_DATABASE_ID
CLOUDFLARE_PROJECT_NAME
途中で GitHub Actions 上に TypeError が発生しました。
原因は deploy.yml 内で必要な D1 データベース名と R2 バケット名が環境変数としてすべて設定されていなかったことでした。
不足分を追加し、再実行することでビルドが正常に完了しました。
6. デプロイ成功
最終的に microfeed は Cloudflare Pages 上に正常デプロイされ、公開URLが発行されました。
管理画面へアクセス可能となり、ヘッドレスCMSとして利用できる状態が整いました。
Cloudflare無料枠のみで、ここまで構築可能であることを確認できました。
7. Cloudflare Zero Trust で管理画面を保護
管理画面(/admin)を保護するため、Cloudflare Zero Trust を設定しました。
ダッシュボード
Zero Trust → Access → アプリケーションを追加
設定内容
アプリケーション名
yourdomain.com/admin
パブリックホスト名
ドメイン:yourdomain.com
パス:admin
ルールグループ
ルールグループ名:Admin group
セレクター:Emails
値:your@adminmail
ポリシー
ポリシー名:Admin only
アクション:Allow
セッション時間:24時間
ルール:Rule group → Admin group
これにより、指定メールアドレスのみが管理画面へアクセス可能となります。
まとめ
今回の検証で明確になったポイントは次の通りです。
Cloudflare無料枠のみでヘッドレスCMSは実装可能
最大の難所はAPIトークンの権限設計
GitHub Actions連携では環境変数の網羅が重要
microfeed はCloudflareネイティブな設計であり、個人開発や実験用途には非常に相性が良いと感じました。
今後は、
D1スキーマ設計の最適化
R2画像管理の運用設計
エッジキャッシュ戦略
まで踏み込んで検証を進める予定です。