2547 文字
7 分

microfeed on Cloudflare

2025-08-24
タグなし

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画像管理の運用設計

エッジキャッシュ戦略

まで踏み込んで検証を進める予定です。

microfeed on Cloudflare
https://retrocraft.jp/posts/20250825012433/
作者
RetroCraft
公開日
2025-08-24
ライセンス
CC BY-NC-SA 4.0