ちょっとした事情でウェブサイトをCloudFlare Pagesに移動させる。1か月くらい前の話だ。最終的にはGitHub側やCloudFlare側でビルドせず、Gitリポジトリー監視もしていない。ローカルのファイル群をFTPでミラー的な更新方式になっていて、ちょっと楽しい。APEXドメインのためネームサーバーも移行せざるを得ず、不安が残る。色々変わり、なんらかの不具合がありそうだ。
移行は、Gitリポジトリー監視(Git Integration)で始め、最終的にはWranglerを使って直接アップロード(Direct Upload)する。最初から直接アップロードでPagesを作ると、後ほどGitリポジトリー監視に変更できないので、こうせざるを得ない。また、Pagesの作成は右上の「+ Add」からしかできない。そこかしこのドキュメントに書いてあるようにWorkers & PagesのCreate ApplicationからはPagesは作れなさそうだった。導線が無い気がする。
- (CloudFlare) PagesをGitHubのgh-pagesブランチを監視するように作成する
- Build commandは
exit 0 - Preview branchを無効に
- Build commandは
- 数日は何もせず、更新だけ行う
- (ローカル) gh-pagesブランチをcf-pagesブランチへ名前を変更する
- (ローカル) pushするブランチをcf-pagesにするようnpmスクリプトを更新する
- (ローカル) cf-pagesブランチをGitHubへ送る
- ビルドされないことを確認
- (CloudFlare) cf-pagesブランチを監視するように設定する
- 数日は何もせず、更新だけ行う
- (ローカル) npxを使いWranglerを認証する
- 自動的に開いたページで認証を進めると、うまく戻ってこれないことがある
- (ローカル) Gitのpushコマンドの代わりにnpx経由でWranglerを使うようnpmスクリプトを更新する
- (CloudFlare) Automatic deploymentを無効にする
- ついでにProduction branchをmainに変更
- (GitHub) cf-pagesブランチを削除する
- 数日は何もせず、更新だけ行う
- (GitHub) 設定→Pages→Build and deployment→BranchをNoneにしてGitHub Pagesを停止する
- (GitHub) gh-pagesブランチを削除する
- (ローカル) gh-pagesブランチなどのために作られている.gitディレクトリーを削除する
かなり遠回りだ。Gitリポジトリー監視がうまくいった辺りでドメインの移行を済ませている。これでローカルでビルドしたファイルを直接アップロードできる。Wranglerは更新したファイルだけアップロードしてくれるので、FTPでミラー的な使い方と言える。GitHubでもCloudFlareでもジョブが走らず、世界に優しいような気分になれる。
Wranglerのpages deployコマンドに--dry-runオプションが欲しい、起動コストがなかなかあるなという感想だ。プロジェクト名や出力ディレクトリーは設定ファイルを書いた方が良さそうだ。pages_build_output_dirというPages専用の設定がある。Wranglerに更新があるとnpxコマンドが止まるので、Direct Uploadするだけだし、バージョン番号を固定しても良いかもしれない。