Go back

redamoon.net の本番デプロイ先が変わっていた — Pages から Workers へ、自動デプロイの整理

Posted on:2026-06-25

Tailwind v4 へ移行した PR を main にマージしたあと、本番 redamoon.net に記事 000107 が出てこない、という事態になりました。Cloudflare Pages のビルドは成功しているように見えるのに、本番だけ古いまま。

調べたところ、Astro 7 移行で本番の配信先が Cloudflare Pages から Cloudflare Workers に切り替わっていたのが原因でした。ここでは移行前後の仕様の違いと、main マージ後に本番へ自動反映するための対応(Workers Builds)をまとめます。

何が起きていたか

000107 を main にマージした直後の状態は次のとおりです。

URL Astro /log/post/000107 更新の仕組み
redamoon.net v7.0.0 200(手動デプロイ後) 手動 pnpm deploy:site
Worker プレビュー(<worker>.<account>.workers.dev v7.0.0 200 同上(同一 Worker)
旧 Pages プレビュー(<project>.pages.dev v5.18.0 404 旧 Pages プロジェクト(更新停止)

本番ドメイン redamoon.net と Worker プレビュー(*.workers.dev)の中身は一致していました。一方 旧 Pages プレビュー(*.pages.dev)は Astro 5 系の古いビルドのままで、000107 も存在しません。

「main にマージ = 本番反映」と思っていたのに当てはまらなかったのは、本番ドメインが Worker を向いているのに、自動更新されているのは Pages 側だけだったからです。

移行前の仕様(〜 Astro 5 時代)

以前の運用イメージはこうでした。

  • ホスティング: Cloudflare Pages(旧プロジェクト)
  • プレビュー URL: <project>.pages.dev(Cloudflare が付与する Pages サブドメイン)
  • 本番ドメイン: Pages のカスタムドメインとして redamoon.net を向ける
  • デプロイ: GitHub の main へ push / merge → Pages が astro build → 自動で本番反映

README や ADR にも「Astro + Cloudflare Pages」と書いてあり、この構成が前提でした。

Astro 7 移行で変わったこと

Astro 7 へのアップグレード@astrojs/cloudflare v14 を入れた結果、ビルド出力とデプロイ経路が変わりました。

Astro 公式の Cloudflare デプロイガイド でも、新規プロジェクトは Cloudflare Workers を推奨しており、Cloudflare Pages へのデプロイは @astrojs/cloudflare v13 以降で非サポートになっています。

ビルド出力

項目 Astro 5(Pages 時代) Astro 7(現行)
静的アセット dist/ など dist/client/
Worker エントリ _worker.js dist/server/entry.mjs
デプロイ設定 Pages が dist を拾う アダプタが dist/server/wrangler.json を生成

本番の配信先

wrangler.site.toml で Worker 名 redamoon-site を定義し、ゾーンルートで本番ドメインを Worker に直接結びつけています。

name = "redamoon-site"

[[routes]]
pattern = "redamoon.net/*"
zone_name = "redamoon.net"

[[routes]]
pattern = "www.redamoon.net/*"
zone_name = "redamoon.net"

本番反映は package.jsondeploy:site(ローカル)または Workers Builds(自動)です。

# ローカル一発
pnpm deploy:site

# 内訳
pnpm build   # astro build + jampack
pnpm run deploy  # wrangler deploy --config ./dist/server/wrangler.json

ルートの wrangler.tomlscrap-api(Hono)専用です。サイト本体は wrangler.site.toml → ビルド後の dist/server/wrangler.json という流れになります。デフォルトの wrangler deploy をそのまま使うと scrap-api 側を触るリスクがあるので、Deploy コマンドは必ず dist/server/wrangler.json を指定します。

Pages が Astro 5.18 のまま残る理由

旧 Pages プロジェクトは GitHub 連携が残っていますが、Astro 7 + @astrojs/cloudflare v14 のビルド出力は Pages 向けではありません。結果として 最後に成功した Astro 5 系のデプロイが *.pages.dev に残り続ける状態になりました。

Pages を Astro 7 まで追いつかせるのではなく、プロジェクトを削除または Git 連携解除して retire するのが正攻法です。プレビュー URL は Worker の *.workers.dev(本番 Worker と同一)を使います。

scrap-api は別 Worker

サイト本体(redamoon-site)とは別に、Scraps API は workers/scrap-api として独立した Worker です。

コンポーネント Worker 名 デプロイ
ブログ本体 redamoon-site pnpm deploy:site / Workers Builds
Scraps API scrap-api wrangler deploy --config wrangler.toml

方針 — Workers Builds で main マージ後に自動デプロイ

GitHub Actions でも同じことはできますが、Astro 公式 が示す CI/CD は Cloudflare Workers Builds です。Cloudflare ダッシュボードから Git リポジトリを Worker redamoon-site に接続し、push 時にビルド → デプロイを走らせます。

ダッシュボード設定

Workers & Pages → Worker redamoon-siteSettings > Build で次を設定します(Workers Builds 設定)。

項目
Git repository redamoon/redamoon.net
Production branch main
Build command pnpm build
Deploy command pnpm run deploy
Build variables PUBLIC_SCRAP_API_BASE=<本番 Scrap API URL>
PUBLIC_SCRAP_ADMIN_ENABLED=true

PUBLIC_* は Astro のビルド時に埋め込まれるため、Build variables(ランタイムではない)に置きます。Node.js は .node-version(22.16.0)に合わせてください。

非 production ブランチではデフォルトで wrangler versions upload が走り、プレビュー URL が発行されます。

旧 Pages プロジェクトの整理

ダッシュボードで 旧 Pages プロジェクトを削除するか、Git 連携を外してください。本番 redamoon.net とは無関係なのにビルドが走り続ける混乱の元です。

Worker 名を redamoon-site に移行する手順

Astro 7 移行時はテーマ名に合わせて Worker 名 astro-paper でデプロイしていました。Wrangler の name は Cloudflare 上の リソース ID であり、TOML を変えるだけではダッシュボードの Worker がリネームされません。新しい名前の Worker に載せ替え、ルートを移す必要があります。

前提

  • リポジトリの wrangler.site.tomlname = "redamoon-site" に更新済み
  • KV(SESSION)の namespace ID は TOML にそのまま記載(同じ KV を新 Worker から bind)
  • Workers Builds を astro-paper に既に接続している場合、先に Build を止めるか、移行完了まで main への auto deploy を控える

手順

  1. 旧 Worker からルートを外す
    ダッシュボード → 旧 Worker(astro-paper)→ Settings > Domains & Routesredamoon.net/*www.redamoon.net/* を削除する。
    (ルートが二重だと新 Worker への deploy が失敗する)

  2. 新 Worker へ初回デプロイ
    ローカルで本番と同じ env を付けて deploy する。

    pnpm deploy:site
    

    成功すると Worker redamoon-site が作成され、ルートと KV が TOML どおり付く。

  3. 動作確認

    • redamoon.net が 200 で最新ビルドか
    • Worker プレビュー(redamoon-site.<account>.workers.dev)が同内容か
    • Scraps の投稿・一覧が通るか(PUBLIC_SCRAP_API_BASE がビルドに入っているか)
  4. Workers Builds を redamoon-site に接続

    • 旧 Worker(astro-paper)側の Git 連携があれば Disconnect
    • redamoon-siteConnect to Git → 上記「ダッシュボード設定」の Build / Deploy / Build variables を設定
    • main へ空コミットまたは README 修正など小さな push で CI が通るか確認
  5. 旧 Worker を削除
    astro-paper にルートが残っていないことを確認してから、ダッシュボードで Worker を削除する。

  6. (任意)旧 Pages プロジェクトを retire
    <project>.pages.dev の Pages プロジェクトを削除または Git 連携解除。

注意点

項目 内容
ダッシュボードのリネーム UI から Worker 名を変える機能は基本ない。TOML の name 変更 = 別 Worker として deploy
package.json"name": "astro-paper" npm パッケージ名(テーマ由来)。Worker 名 redamoon-site とは無関係で、そのままでよい
Workers Builds と TOML の一致 Build が参照する Worker 名と wrangler.site.tomlname一致させる
ダウンタイム 手順 1 でルートを外してから 2 が終わるまで、短時間 redamoon.net が落ちる。メンテ時間帯での実施を推奨

運用の整理(移行後)

用途 手段
本番反映(redamoon.net) main マージ → Workers Builds → pnpm run deploy
ローカル確認 pnpm dev.env で Scrap API を 127.0.0.1:8787 に向ける)
ローカルから本番デプロイ pnpm deploy:site
Scrap API 本番 別途 wrangler deploy --config wrangler.toml
プレビュー URL Worker の *.workers.dev

まとめ

Astro 7 移行で 本番の配信先が Cloudflare Pages から Cloudflare Workers に移っていたため、main マージだけでは redamoon.net が更新されませんでした。*.pages.dev 側でデプロイできているように見えても、本番ドメインは別ルートです。

自動デプロイは Workers Builds(Astro / Cloudflare 公式の正系)に寄せ、Worker 名は redamoon-site に統一します。旧 astro-paper Worker と Pages プロジェクトは retire してください。

参考リンク