Nuxt3 SSG + Cloudflare Pagesで運用していたサイトをCloudflare Workersへ移行する
自作のWebサイトをCloudflare Pagesで運用していたのですが、つい先日「理由がない限りCloudflare PagesではなくCloudflare Workersを使ってください」とのお知らせがありました。
元々Workersにも興味があったので、これを機に移行してみることにしました。思った以上にスムーズに移行できたので、その手順を簡単にまとめておきます。
手順
自分のサイトがNuxtでSSG(静的サイト生成)されたプロジェクトなので、Nuxtにフォーカスした内容となりますが、Nuxtに限らずSSGで生成された静的サイトであれば基本的な流れは同じになるはずです。
- 移行ガイドに従って
wrangler.jsonc
を作成する - 静的サイトのデプロイコマンドを実行し、移行できているか確認
wrangler.jsonc
を作成する
移行ガイドに従って自分はPagesの運用の際にはWranglerを利用していなかったため、Wranglerのセットアップから行いました。
セットアップを含めた手順としては、以下の記事を参考に設定を行いました。
assets.directory には、nuxt generate
で生成された静的ファイルの生成先を指定します。
Nuxt3では実ファイルは.output/public
に生成されますが、dist
ディレクトリにシンボリックリンクが作成され.output/public
を参照しているので、どちらを指定しても動きます(Nuxt2以前のツールや設定との互換を保つための仕組みのようです)。私は.output/public
を指定しました。
静的サイトのデプロイコマンドを実行し、移行できているか確認
プレビューとデプロイ用のスクリプトをpackage.json
へ追加します。上記の手順参考記事からNuxt用のコマンドへと変更しています。
"scripts": {
...
"generate": "nuxt generate",
- "preview": "nuxt preview",
+ "preview": "wrangler dev",
+ "deploy": "nuxt generate && wrangler deploy",
...
},
あとはpnpm run deploy
を実行するだけです(初回はwranglerとcloudflareを連携させるためのブラウザでのログインが必要です)。
$ pnpm run deploy
> ryuhei373.dev@1.0.0 deploy /home/ryuhei373/dev/ryuhei373.dev
> nuxt generate && wrangler deploy
(略)
✔ You can now deploy .output/public to any static hosting! nuxi 4:43:46 PM
⛅️ wrangler 4.14.1
-------------------
🌀 Building list of assets...
(略)
✨ Success! Uploaded 21 files (43 already uploaded) (1.54 sec)
Total Upload: 0.34 KiB / gzip: 0.23 KiB
No bindings found.
Uploaded ryuhei373 (5.52 sec)
Deployed ryuhei373 triggers (0.26 sec)
https://ryuhei373.ryuhei-373-3.workers.dev
Current Version ID: c88f91d5-378a-4519-980b-0914e92c6838
デプロイが成功し、https://ryuhei373.ryuhei-373-3.workers.dev にアクセスしてみると期待通りサイトが表示されていました🎉
その他
ここからPages側で設定していたカスタムドメインやGitHub連携の設定をWorkers側へ移行したりしましたが、それは今回の移行においては特段特筆すべき点はないため本記事では割愛します。
また、Pagesではデフォルトで有効だったプレビュー機能は、設定の「ブランチコントロール」から「非本番ブランチのビルド」を「有効」にすることで行えるようになります。
終わりに
Workersは全く触れてきておらず移行するのに不安があったのですが、実際に移行してみたところとても簡単に終わったので、一安心とともにWorkersの色々な機能に触れてみるいい機会にもなったと思うので今後は静的サイトだけでなく有効活用していきたいと思えました。楽しい!
Discussion