デプロイDeployment
概要Overview
Web 版は Cloudflare Pages にホスティングされています(2026-04-18 に Xserver rsync 運用から移行)。
GitHub Actions の deploy-public-dev.yml が wrangler pages deploy で
parky-home-dev プロジェクトにビルド成果物を送り、カスタムドメイン
dev.parky.co.jp で配信します。
The web app is hosted on Cloudflare Pages (migrated from Xserver rsync on 2026-04-18).
GitHub Actions (deploy-public-dev.yml) runs wrangler pages deploy against the
parky-home-dev project; the custom domain dev.parky.co.jp serves the site.
環境別プロジェクトProjects per environment
| 環境Env | ブランチBranch | Pages プロジェクトPages project | カスタムドメインCustom domain | Workflow |
|---|---|---|---|---|
| dev | dev | parky-home-dev |
dev.parky.co.jp |
.github/workflows/deploy-public-dev.yml |
| prod (LP) | main | parky-lp-prod |
parky.co.jp |
.github/workflows/deploy-public-prod.yml |
パイプラインPipeline
- dev ブランチへの push がトリガー(
web/home/**/web/packages/**/web/package-lock.json変更時) - Triggered by push to
devon changes underweb/home/**,web/packages/**, orweb/package-lock.json. - さらに
workflow_runで Workers API デプロイ成功後にも自動再ビルド(API スキーマ更新とのレース回避) - Also re-runs via
workflow_runafter the Workers API deploy succeeds (prevents building against a stale API). - 1Password Service Account から
CLOUDFLARE_API_TOKEN/ Supabase / Mapbox トークンを取得 - Pulls
CLOUDFLARE_API_TOKEN, Supabase keys, and Mapbox token from 1Password Service Account. npm ci→npm run build:home(web/home/dist/に出力)npm ci→npm run build:home(outputs toweb/home/dist/).- API ヘルスチェック:
/v1/hubs/publishable?min=1が 200 を返すまで最大 60 秒待機(cold start / 5xx でページが空焼きされるのを防ぐ) - API health check: wait up to 60 s for
/v1/hubs/publishable?min=1to return 200 (avoids baking empty pages during API cold starts). dist/_headersを生成してX-Robots-Tag: noindex, nofollowを全レスポンスに付与(dev 環境のみ)- Generate
dist/_headerswithX-Robots-Tag: noindex, nofollowon every response (dev only). npx wrangler@4 pages deploy web/home/dist --project-name=parky-home-dev --branch=dev- Run
npx wrangler@4 pages deploy web/home/dist --project-name=parky-home-dev --branch=dev.
Pages 設定ファイル(ビルド後生成)Pages config files (generated post-build)
CF Pages は dist/_headers と dist/_redirects を読んでヘッダーと SPA フォールバックを制御します。
Xserver 時代の .htaccess はもう使いません。
Cloudflare Pages reads dist/_headers and dist/_redirects for headers and SPA fallback.
The legacy .htaccess from the Xserver days is no longer used.
_headers(dev のみ):X-Robots-Tag: noindex, nofollow, noarchive, nosnippet+Referrer-Policy: strict-origin-when-cross-origin_headers(dev only):X-Robots-Tag: noindex, nofollow, noarchive, nosnippet+Referrer-Policy: strict-origin-when-cross-origin.- ホストガード不要: CF Pages はカスタムドメインに紐付いたホスト以外からは配信されないため、
HTTP_HOSTチェックは不要になった - No host guard needed: Pages only serves the bound custom domain, so the old
HTTP_HOSTcheck is obsolete. - SPA fallback: 公開ポータルは Astro SSG で純静的なため
_redirectsは不要。管理者ポータル (parky-admin-*) は React Router を使うため/* /index.html 200を設定 - SPA fallback: the public portal is pure Astro SSG, so no
_redirectsis needed. The admin portal (parky-admin-*) uses React Router and ships/* /index.html 200.
環境変数Environment variables
| Name | 用途 | Purpose | 使用タイミング | When |
|---|---|---|---|---|
CLOUDFLARE_API_TOKEN |
Pages デプロイ用。1Password Cloudflare|APIトークン|Parky Workers Edit から取得 |
For Pages deploy. Pulled from 1Password item Cloudflare|APIトークン|Parky Workers Edit |
CI | CI |
PUBLIC_SITE_URL |
canonical / OGP / sitemap の絶対URL組み立て | Base URL for canonical, OGP, and sitemap | build | build |
PUBLIC_SUPABASE_URL |
Supabase エンドポイント | Supabase endpoint | build + runtime | build + runtime |
PUBLIC_SUPABASE_ANON_KEY |
ランタイム用 anon キー | Runtime anon key | runtime | runtime |
SUPABASE_SERVICE_ROLE_KEY |
ビルド時の read-only 取得 | Build-time reads | build (CI only) | build (CI only) |
PUBLIC_MAPBOX_TOKEN |
Mapbox GL JS 公開トークン | Mapbox GL JS public token | runtime | runtime |
PUBLIC_PARKY_API_BASE |
Workers BFF のベース URL(dev: https://dev-api.parky.co.jp) |
Workers BFF base URL (dev: https://dev-api.parky.co.jp) |
build + runtime | build + runtime |
カットオーバー手順(新規ドメイン追加時)Cutover (when adding a new domain)
- Dashboard > Pages > 対象プロジェクト > Custom domains で追加
- Dashboard > Pages > target project > Custom domains, then add.
parky.co.jpzone は Cloudflare 管理下なので CNAME は自動作成、SSL も自動発行(5〜15 分)- The
parky.co.jpzone lives in Cloudflare, so the CNAME is auto-created and SSL is auto-issued (5–15 min). - 既存 Xserver 向け DNS レコードは自動的に CF Pages 向けに置き換えられる
- Any pre-existing Xserver-bound DNS record is replaced with the Pages target automatically.
ロールバックRollback
- Dashboard > Pages > 対象プロジェクト > Deployments で過去のビルドを「Rollback to this deployment」で即復帰可能
- Dashboard > Pages > target project > Deployments — any past build can be re-activated with "Rollback to this deployment".
- GitHub Actions 側では
Re-run workflowで以前のコミットを再ビルド&デプロイも可能 - Alternatively, use GitHub Actions "Re-run workflow" to rebuild + redeploy an older commit.
- 静的ファイルのみなので DB マイグレーションのロールバックは不要
- Static only — no DB migration rollback needed.
.github/workflows/deploy-public-dev.yml.xserver.bak が残してあります。これを元ファイル名にリネームして push すれば旧 rsync 運用に戻せます。
If Cloudflare Pages has a fatal issue, .github/workflows/deploy-public-dev.yml.xserver.bak is kept for rollback — rename it back and push to revert to rsync.