# 地域段階展開 (Phase 3-1)

Parky 公開ポータルは「在庫・データ品質が揃った都道府県から順に解禁する」運用を取る。

## 制御ポイント

環境変数 `PUBLIC_PUBLISHED_PREFECTURES` を build 時に渡すことで、
公開対象の都道府県 slug を絞り込む。

- 未設定 / `*`: 全都道府県を公開 (既定)
- CSV 指定 (`tokyo,kanagawa,osaka`): そこに含まれる都道府県のみ公開
- 空文字列 `""`: 全都道府県を公開 (= 未設定と同義)

`src/lib/site-config.ts` の `PUBLISHED_PREFECTURES` と
`isPrefecturePublished()` が制御の中枢。
`fetchPublishableStationHubs()` がこのホワイトリストでハブを封印し、
結果として:

- 該当 prefecture の駅ハブ → `/p/{pref}/...` 以下が 1 ページも生成されない
- 属性フィルタ / スポット詳細 / シーン特集のランキング / メディア記事の
  関連リンクからも自然に除外される
- sitemap も空 (dev 環境の既存挙動と同じ)

## 段階展開プラン

プラン `curious-squishing-bumblebee.md` の Phase 3 に沿って、
以下の順で解禁する想定:

1. **tokyo** (Phase 1-2 の主戦場、既に検証済み)
2. **kanagawa** (横浜駅・川崎駅の在庫が揃い次第)
3. **osaka** (梅田・なんば駅)
4. **aichi** (名古屋駅)
5. **fukuoka** (博多駅・天神)
6. **hokkaido** (札幌駅)
7. 以降、全国 47 都道府県

## ワークフローへの組み込み方

### prod (parky.co.jp) 用 workflow

`.github/workflows/deploy-public-prod.yml` 新設時に以下を追加:

```yaml
      - name: Build
        env:
          PUBLIC_SITE_URL: https://parky.co.jp
          PUBLIC_PUBLISHED_PREFECTURES: tokyo,kanagawa
          PUBLIC_SUPABASE_URL: ${{ env.SUPABASE_URL_PROD }}
          PUBLIC_SUPABASE_ANON_KEY: ${{ env.SUPABASE_ANON_KEY_PROD }}
        run: npm run build -w portal/public
```

`PUBLIC_PUBLISHED_PREFECTURES` を更新してコミットするだけで、
次回デプロイから新しい地域が自動的に解禁される。

### dev (dev.parky.co.jp) 用 workflow

既存 `deploy-public-dev.yml` の `Build` ステップに同じ env を追加。
dev は検証目的なので全解禁 (`*` or 未設定) を推奨。

## 新地域解禁時のチェックリスト

1. ✅ 該当 prefecture の `cities` / `stations` テーブルに seed 投入済み
2. ✅ `parking_lot_nearby_spots` の rebuild バッチを回し、近隣駅情報が埋まっている
3. ✅ `hub_inventory_stats` MV を `REFRESH MATERIALIZED VIEW` で更新
4. ✅ 在庫 5 件以上の駅が十分にあるか (最低 10 駅目安)
5. ✅ dev で build し、`/p/{pref}/` 配下のページが期待通り生成されるか目視確認
6. ✅ `PUBLIC_PUBLISHED_PREFECTURES` に slug を追加
7. ✅ prod デプロイ後、sitemap に新 URL が含まれているか確認
8. ✅ Search Console の URL 検査で 1-2 ページのインデックス申請

## 切り戻し

問題が見つかった場合、`PUBLIC_PUBLISHED_PREFECTURES` から該当 slug を
外して再デプロイすれば即座に封印できる。
URL はそのまま 404 になるため、Google には「削除された URL」として
処理される。インデックスされた URL が気になる場合は、
Search Console から一時削除リクエストを出すことも可能。
