デプロイDeployment

概要Overview

Web 版は Cloudflare Pages にホスティングされています(2026-04-18 に Xserver rsync 運用から移行)。 GitHub Actions の deploy-public-dev.ymlwrangler pages deployparky-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
devdev 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

  1. dev ブランチへの push がトリガー(web/home/** / web/packages/** / web/package-lock.json 変更時)
  2. Triggered by push to dev on changes under web/home/**, web/packages/**, or web/package-lock.json.
  3. さらに workflow_run で Workers API デプロイ成功後にも自動再ビルド(API スキーマ更新とのレース回避)
  4. Also re-runs via workflow_run after the Workers API deploy succeeds (prevents building against a stale API).
  5. 1Password Service Account から CLOUDFLARE_API_TOKEN / Supabase / Mapbox トークンを取得
  6. Pulls CLOUDFLARE_API_TOKEN, Supabase keys, and Mapbox token from 1Password Service Account.
  7. npm cinpm run build:homeweb/home/dist/ に出力)
  8. npm cinpm run build:home (outputs to web/home/dist/).
  9. API ヘルスチェック: /v1/hubs/publishable?min=1 が 200 を返すまで最大 60 秒待機(cold start / 5xx でページが空焼きされるのを防ぐ)
  10. API health check: wait up to 60 s for /v1/hubs/publishable?min=1 to return 200 (avoids baking empty pages during API cold starts).
  11. dist/_headers を生成して X-Robots-Tag: noindex, nofollow を全レスポンスに付与(dev 環境のみ)
  12. Generate dist/_headers with X-Robots-Tag: noindex, nofollow on every response (dev only).
  13. npx wrangler@4 pages deploy web/home/dist --project-name=parky-home-dev --branch=dev
  14. 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/_headersdist/_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.

環境変数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 CICI
PUBLIC_SITE_URL canonical / OGP / sitemap の絶対URL組み立て Base URL for canonical, OGP, and sitemap buildbuild
PUBLIC_SUPABASE_URL Supabase エンドポイント Supabase endpoint build + runtimebuild + runtime
PUBLIC_SUPABASE_ANON_KEY ランタイム用 anon キー Runtime anon key runtimeruntime
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 runtimeruntime
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 + runtimebuild + runtime

カットオーバー手順(新規ドメイン追加時)Cutover (when adding a new domain)

  1. Dashboard > Pages > 対象プロジェクト > Custom domains で追加
  2. Dashboard > Pages > target project > Custom domains, then add.
  3. parky.co.jp zone は Cloudflare 管理下なので CNAME は自動作成、SSL も自動発行(5〜15 分)
  4. The parky.co.jp zone lives in Cloudflare, so the CNAME is auto-created and SSL is auto-issued (5–15 min).
  5. 既存 Xserver 向け DNS レコードは自動的に CF Pages 向けに置き換えられる
  6. Any pre-existing Xserver-bound DNS record is replaced with the Pages target automatically.

ロールバックRollback

旧 Xserver 運用のロールバック: Legacy Xserver rollback: 万が一 CF Pages で致命的な問題が発生した場合、ロールバック用に .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.