Cloudflare Pagesで本番直デプロイを避ける。devブランチとGoogle認証付きPreviewを作る手順

Cloudflare Pagesで静的サイトを運用するとき、mainを本番、devをPreviewに分け、PreviewだけをCloudflare Accessで保護する設定を整理します。

概要

Cloudflare Pagesは、GitHubとつなぐだけで静的サイトを公開できます。便利な一方で、最初の状態のままでは、production branchへのpushがそのまま本番反映になります。

会社サイトやサービスページでは、これは少し怖い運用です。文言修正、プライバシーポリシーの追加、ページ構成の変更も、確認を挟まず公開されてしまうからです。

そこで今回は、mainを本番用、devを開発確認用に分け、Preview deploymentをCloudflare AccessとGoogle認証で保護する形にしました。

devブランチを作る

まず、ローカルで開発用ブランチを作ります。

git switch -c dev
git push -u origin dev

これでGitHub側にもdevブランチが作られます。Cloudflare Pagesでは、Production branch以外のブランチをPreview deploymentとして扱えます。

設定によっては、devにpushした時点でPreviewが自動作成されます。今回も、devをpushしただけでCloudflare側にPreview deploymentが作成されました。

mainとdevを分ける

Cloudflare Pages側では、Production branchがmainのままになっているか確認します。本番用の独自ドメインも、mainに紐づけたままにします。

一方で、dev*.pages.devのPreview URLで確認します。作業の流れは、devで編集、Previewで確認、問題がなければmainへ反映、という形です。

この分け方にすると、本番サイトを直接触らずに済みます。記事追加やサービスページ修正のたびに、今pushしたら公開されるのかを気にしなくてよくなります。

Previewを保護する

Preview URLは、何もしないと外部から見える場合があります。未公開ページや確認中の文言を見せたくない場合は、Cloudflare Accessで保護します。

Cloudflare Zero TrustでAccessアプリ、またはPages側のPreview保護を設定し、見られる人をメールアドレスで絞ります。

Allow
Emails = [email protected]

注意点は、Previewだけを保護するのか、*.pages.devや独自ドメインも含めて保護するのかです。本番URLまでログイン必須にしないよう、設定後に必ず確認します。

Google認証を追加する

Cloudflare AccessではOne-time PINも使えます。ただ、Previewを見るたびにメールでPINを受け取り、入力するのは手間です。

そこでGoogle認証を追加します。Google CloudでOAuthクライアントを作り、Cloudflare Accessのcallback URLをリダイレクトURIに設定します。

https://time7.cloudflareaccess.com/cdn-cgi/access/callback

Cloudflare側で聞かれる「アプリID」はGoogle CloudのClient IDです。「アプリシークレット」はClient secretです。メールクレームは、通常はemailのままで構いません。

One-time PINを残す

Google認証を追加しても、One-time PINを保険として残す運用はできます。普段はGoogleでログインし、Google認証まわりに問題が起きた時だけメールPINを使う形です。

ただし、Access policyの作り方には注意が必要です。One-time PINというログイン方法だけを許可条件にすると、意図せず広く開いてしまう可能性があります。

安全に使うなら、まず許可するメールアドレスやメールドメインを絞ります。ログイン方法ではなく、誰を許可するかを先に決めるのが実務上のポイントです。

最後に確認すること

設定後は、Preview URLがCloudflare Accessへリダイレクトされるかを確認します。ログインなしで未公開ページが見えるなら、保護範囲を見直します。

同時に、本番URLがログインなしで表示されるかも確認します。本番までAccess配下に入れてしまうと、公開サイトとして機能しなくなります。

今回の確認では、Preview URLはCloudflare Accessへリダイレクトされ、本番URLは通常通り公開状態でした。小さな静的サイトでも、この確認は省かない方が安全です。

まとめ

Cloudflare Pagesは簡単に公開できるぶん、本番と確認環境の境目が曖昧になりやすいサービスです。

本番はmain、開発確認はdev、PreviewはGoogleログイン付き。この分け方を最初に作っておくと、日々の修正を安心して進められます。

静的サイトでも、会社サイトやサービスページであれば確認環境は必要です。本番直デプロイを避けるだけで、公開前の判断と修正の余裕がかなり変わります。

参考情報