Cloudflare Pagesに認証付きpreviewを加える
Cloudflare Pages は無料で静的サイトを公開でき、Git のブランチを使って事前にプレビューを確認することも可能です。
プレビュー用のブランチ(例: draft
)を作成し、Cloudflare Pages に push すると、draft.example.pages.dev
のような URL で自動的にプレビューサイトが生成されます。限定公開にしたい場合は、Cloudflare Access を使って Google や GitHub を認証に設定し、アクセス制限をかけることができます。
最終確認後にプレビュー用のブランチを公開用ブランチにマージすれば、自動的に本番公開されます。
Cloudflare Pages は、次の理由で静的な Web ページを公開するのに非常に便利なサービスです。
- 無料であること1。
- Web ページの元となるデータをアップロードすると、自動的にサイト・ジェネレータが Web ページを build と公開をしてくれること。
ただ、Web ページを公開する前にどんな感じか見ておきたいことがあります。それも Git のブランチを使うことで簡単に実現できます。
目的
許可された人にだけ見られる preview サイトを作り、Web ページを公開前に確認できるようにする。
方法
手順としては、大まかに次のようになります。
- Git に preview 用のブランチを作成する。
- 認証機構を作成する。今回は、Google の AOuth2.0 と GitHub の両方を使えるようにします。
- preview 用サイトを閲覧できるユーザを制限する認証機構をセットアップする。
preview 用のブランチを作成
これは普通に次のコマンドで preview 用のブランチを作成します。今回のブランチ名はdraft
としていますが、任意の名前を使用できます。
同時にupstream
を設定しておくと、次回以降git push
だけでブランチを push できるようになります。
# The branch name "draft" is just an example. Any branch name is fine.
# create branch
git checkout -b draft
# set upstream
git push --set-upstream origin draft
preview 用サイトの作成
初期設定では、初期設定時に選んだ Production 用のブランチ以外は、全て Preview 用のブランチとみなされます。そのため GitHub にブランチを push した段階で Preview 用のサイトが準備されているはずです。
そのため Cloudflare Pages が指定した URL (*.pages.dev)の前にサブドメインとしてブランチ名を付けた URL で preview 用のサイトにアクセスできます。例えばブランチ名が draft で、サイトのアドレスがexample.pages.dev
だとすると、preview 用のサイトの URL は、draft.example.pages.dev
となります。なお、このサイトへの CNAME による alias は機能しませんでした。
特定のブランチを Preview 用にする
特定のブランチに制限する場合には、Settings
からBranch control
の鉛筆アイコンをクリックして、Preview branch
のCustom branched
で指定します。
Settings
からBranch control
の鉛筆マークをクリックするとBranch control
ダイアログが開きます。
preview 用サイトの認証機構の作成
Settings
の下の方にあるGeneral
にAccess policy
があるので、これを有効にします。最初は、Enable
と書かれていますが、これは有効になっているという意味ではなく、これをクリックして有効化するという意味です。
Enable
をクリックすると、Cloudflare Access のページにジャンプして、料金プランの選択とクレジットーカードまたは PayPal の登録が求められます。料金プランは、「無料」で問題ありません。
サイドバーからAccess / Applications
を選択すると作成した Pages の一覧が表示されるので、設定する Pages を選択します。ダイアログが開くのでConfigure
を選択します。View more
を選択したときは、ページ内にConfigure
ボタンがあるので、これをクリックします。
Manage login methods
リンクをクリックして、さらに Login methods 欄のAdd new
を栗屈指、認証に使用したいサイトを選びます。
設定の入力欄とともに設定方法が表示されるので、それに従って AOuth クライアントの設定をします。
この時 AOuth に使用する URL の設定で<your-team-name>
が出てきますが、これは左のバーにあるSettings
のCustom Pages
から取得します。
Team domain
欄がありますので、ここから取得します。
複数のサイトがある場合は、認証機構の作成は一度でよく、後は各サイトごとに認証機構を有効にするだけで OK です。
認証機構の有効化
設定が完了したら、Manage login methods
をクリックしたページに戻り、有効にする認証方法を選択して、右下にあるSave Applications
ボタンをクリックして設定を保存します。
最初からある Opne-time PIN は、誰でも PIN を入手できるので、選択から外しておきます。
認証機構の確認
これで認証が有効になったので、実際に機能するかブラウザのシークレット・ウィンドウを開いて確認します。
preview 用のブランチを公開用ブランチに反映
Preview 用のサイトで Web ページを確認し、問題がなければ公開用のブランチに反映させます。これは、GitHub 上で行われる通常の Pull-Request (PR)と全く同じです。PR が取り込まれて公開用ブランチに merge されたら、自動的に Cloudflare Page で build が行われて Web ページが公開されます。
-
いくつかの料金プランがあります。無料のプランではビルドが 500 回までという制限はありますが、サイト数に制限はありません。そのため大抵の用途には、無料プランでカバーできると思います。 ↩︎