Astro製のブログをCloudflare PagesからCloudflare Workersに移行しました。
そのときの作業のメモをまとめ直してから、ブログの記事にしてますので、もしかすると抜けや漏れがあるかもしれません。
Cloudflareの公式のドキュメントによれば、今後はCloudflare Workersに注力していくと書かれていました。
そのため、新規プロジェクトではCloudflare PagesではなくてCloudflare Workersを利用することが推奨されておりました。
Migrate from Pages to Workers · Cloudflare Workers docs
Workers will receive the focus of Cloudflare's development efforts going forwards, so we therefore are recommending using Cloudflare Workers over Cloudflare Pages for any new projects.
目次
- Cloudflare Workersでワーカーを作成する
- Cloudflare Workersにデプロイする準備をする
- Cloudflare Workersにデプロイする
.gitignore
に.wrangler
のディレクトリを追記する- アセットのみのワーカーとなるため、
main
のフィールドなどは記述しない - リポジトリにプッシュしたら、自動的にデプロイされる
- Cloudflare Pagesでは、デプロイメント数の多いページを削除できないという問題がある
- Cloudflare Workersには、まだデプロイフックは実装されていない
- 参考記事
Cloudflare Workersでワーカーを作成する
既存のCloudflare Pagesのページから、直接的にCloudflare Workersのワーカーには移行することができません。
なので、自分の場合には、Cloudflare Workersからリポジトリをインポートする形で、新たにワーカーを作成しました。
Cloudflare Workersにデプロイする準備をする
まずはwrangler
というパッケージをインストールします。
このパッケージをインストールして、特定のコマンドを実行すると、Cloudflare Workersにデプロイすることができます。
$ npm install --save-dev wrangler
wrangler
でデプロイする際のコマンドをpackage.json
に書きます。
これは好き嫌いだと思いますので、書かなくても問題はありません。
"scripts": {
"deploy": "wrangler deploy",
...
}
それから、wrangler.jsonc
というファイルを作成します。
このファイルにはCloudflare Workersの設定を記述します。
name
には、Cloudflare Workersで作成したワーカーの名前を入力します。
compatibility_date
には、Cloudflareの公式のドキュメントなどを参考にして、好きな日付を入力します。
assets.directory
には、Astroでビルドしたファイルが出力されるディレクトリのパスを入力します。
assets.not_found_handling
には、404-page
と入力しなければ、404.html
が適切に表示されなくなってしまいます。
{
"name": "my-blog",
"compatibility_date": "2025-09-04",
"assets": {
"directory": "./dist",
"not_found_handling": "404-page"
}
}
Cloudflare Workersにデプロイする
まずはAstroのビルドのコマンドを実行します。
ビルドされたファイルは、デフォルトの設定では./dist
のディレクトリに出力されると思われます。
$ npx astro build
それから、wrangler
でデプロイのコマンドを実行します。
初回のコマンド実行時には、自動的にブラウザが開き、Cloudflareにログインを求められます。
$ npx wrangler deploy
デプロイが問題なく実行された場合、コンソールにCloudflare WorkersのサブドメインのURLが表示されます。
そのURLにアクセスして、ファイルの確認をすることができたら、デプロイは成功となります。
.gitignore
に.wrangler
のディレクトリを追記する
wrangler
のコマンドを実行したら、.wrangler
というディレクトリが作成されました。
調べたところ、.gitignore
に.wrangler
を含めても問題は発生しないようです。
.wrangler/
アセットのみのワーカーとなるため、main
のフィールドなどは記述しない
今回の構成ではアセットのみのワーカーとなるので、main
やassets.binding
、assets.run_worker_first
などのフィールドを入力しているとエラーとなってしまいます。
それから、アセットのみのワーカーではobservability
を設定していても、特に効果を発揮しませんので、コメントアウトしておいてもいいかもしれません。
{
"name": "my-blog",
"compatibility_date": "2025-09-04",
"main": "src/api/index.js",
"assets": {
"directory": "./dist",
"binding": "ASSETS",
"not_found_handling": "404-page",
"run_worker_first": [ "/api/*" ]
// "run_worker_first": true
},
"observability": {
"logs": {
"enabled": true
}
}
}
アセットのみのワーカーでmain
やassets.binding
、assets.run_worker_first
などのフィールドを入力している場合には、下記のようなエラーが発生してしまいます。
アセットのみのワーカーと、アセットのみではないワーカーでは、仕様が異なるのかもしれません。
✘ [ERROR] Cannot use assets with a binding in an assets-only Worker.
✘ [ERROR] Cannot set run_worker_first without a Worker script.
✘ [ERROR] Cannot use assets with a binding in an assets-only Worker.
リポジトリにプッシュしたら、自動的にデプロイされる
リポジトリをインポートする形でワーカーを作成した場合、そのリポジトリにプッシュしたら、自動的にデプロイされます。
それから、ワーカーの設定を確認してみましたが、現時点では自動デプロイの設定は存在しませんでした。
ですので、自動デプロイを無効化する場合には、ワーカーからリポジトリを切断しなければいけないのかもしれません。
Cloudflare Pagesでは、デプロイメント数の多いページを削除できないという問題がある
Cloudflare Pagesのページを削除しようとしたら、エラーが発生しました。
自分の場合には対処などはせずに、そのままにしておいても、特に問題は発生しないであろうと判断しました。
ただし、Cloudflare Pagesの自動デプロイだけは無効化しております。
Known issues · Cloudflare Pages docs
You may not be able to delete your Pages project if it has a high number (over 100) of deployments.
The Cloudflare team is tracking this issue.
Cloudflare Workersには、まだデプロイフックは実装されていない
Cloudflare Pagesにはデプロイフックの設定がありましたが、Cloudflare Workersにはありません。
ですので、互換性の一覧を見てみましたが、Cloudflare Workersには、まだデプロイフックは実装されておりませんでした。
Migrate from Pages to Workers · Cloudflare Workers docs