ちょっとした事情でウェブサイトをCloudFlare Pagesに移動させる。1か月くらい前の話だ。最終的にはGitHub側やCloudFlare側でビルドせず、Gitリポジトリー監視もしていない。ローカルのファイル群をFTPでミラー的な更新方式になっていて、ちょっと楽しい。APEXドメインのためネームサーバーも移行せざるを得ず、不安が残る。色々変わり、なんらかの不具合がありそうだ。

移行は、Gitリポジトリー監視(Git Integration)で始め、最終的にはWranglerを使って直接アップロード(Direct Upload)する。最初から直接アップロードでPagesを作ると、後ほどGitリポジトリー監視に変更できないので、こうせざるを得ない。また、Pagesの作成は右上の「+ Add」からしかできない。そこかしこのドキュメントに書いてあるようにWorkers & PagesのCreate ApplicationからはPagesは作れなさそうだった。導線が無い気がする。

  1. (CloudFlare) PagesをGitHubのgh-pagesブランチを監視するように作成する
    • Build commandはexit 0
    • Preview branchを無効に
  2. 数日は何もせず、更新だけ行う
  3. (ローカル) gh-pagesブランチをcf-pagesブランチへ名前を変更する
  4. (ローカル) pushするブランチをcf-pagesにするようnpmスクリプトを更新する
  5. (ローカル) cf-pagesブランチをGitHubへ送る
    • ビルドされないことを確認
  6. (CloudFlare) cf-pagesブランチを監視するように設定する
  7. 数日は何もせず、更新だけ行う
  8. (ローカル) npxを使いWranglerを認証する
    • 自動的に開いたページで認証を進めると、うまく戻ってこれないことがある
  9. (ローカル) Gitのpushコマンドの代わりにnpx経由でWranglerを使うようnpmスクリプトを更新する
  10. (CloudFlare) Automatic deploymentを無効にする
    • ついでにProduction branchをmainに変更
  11. (GitHub) cf-pagesブランチを削除する
  12. 数日は何もせず、更新だけ行う
  13. (GitHub) 設定→Pages→Build and deployment→BranchをNoneにしてGitHub Pagesを停止する
  14. (GitHub) gh-pagesブランチを削除する
  15. (ローカル) gh-pagesブランチなどのために作られている.gitディレクトリーを削除する

かなり遠回りだ。Gitリポジトリー監視がうまくいった辺りでドメインの移行を済ませている。これでローカルでビルドしたファイルを直接アップロードできる。Wranglerは更新したファイルだけアップロードしてくれるので、FTPでミラー的な使い方と言える。GitHubでもCloudFlareでもジョブが走らず、世界に優しいような気分になれる。


Wranglerのpages deployコマンドに--dry-runオプションが欲しい、起動コストがなかなかあるなという感想だ。プロジェクト名や出力ディレクトリーは設定ファイルを書いた方が良さそうだ。pages_build_output_dirというPages専用の設定がある。Wranglerに更新があるとnpxコマンドが止まるので、Direct Uploadするだけだし、バージョン番号を固定しても良いかもしれない。