サマリ
| プロジェクト | kosodate-area.com |
| ステータス | 公開稼働中(保活マップ+学区マップ+住居情報) |
| 掲載施設数 | 保育施設 約 27,000 / 公立小・中学校 約 28,000 |
| カバレッジ | 47 都道府県、市区町村単位で絞り込み可能 |
| サブディレクトリ | /hokatsu/(保活)・/gakku/(学区)・/jushi/(住居)・/column/(コラム) |
| 月額運用費 | $2 〜 $10(静的ページ数が多くデータ更新頻度で変動)+ ドメイン更新料 |
| 構成方針 | Next.js (App Router, Static Export) + S3 + CloudFront (OAC) + DynamoDB + Lambda + Terraform フル IaC |
A. AWS 構成
| カテゴリ | AWS サービス | 役割 |
| 配信 | CloudFront + S3 | 静的サイト配信(OAC で S3 直接アクセス遮断) |
| ドメイン / TLS | Route 53 + ACM | kosodate-area.com + TLS 証明書 |
| データレイヤ | DynamoDB | 保育施設・学校・市区町村マスタ格納 |
| データ取込 | EventBridge + Lambda | 自治体公開データを定期取込み、DynamoDB に upsert |
| 認可 | IAM (GitHub OIDC) | CI から短命クレデンシャルでデプロイ |
| 観測 | CloudWatch Logs / Alarms | Lambda・配信のログ集約 |
B. なぜ統合か(ドメイン戦略)
- ターゲット層完全重複: 30〜40 代子育て世代はすべての領域を 1 人で意思決定する
- ライフサイクル連続性: 保活 (0-3 歳) → 学区検討 (5-7 歳) → 中学進学 (10-12 歳) と長期間に渡る
- データ・UI・技術基盤共通: 地図 UI / 自治体データ取込 / 検索機能はすべて同じ
- ドメインオーソリティ集中: 1 サイトで月 10 万 PV のほうが、2 サイトで月 5 万 PV ずつより SEO で取りやすい
C. サイト構造(現状)
kosodate-area.com/
├── /hokatsu/{都道府県}/{市区町村}/ ← 保活マップ(公開中)
├── /gakku/{都道府県}/{市区町村}/ ← 学区マップ(公開中)
├── /jushi/{都道府県}/{市区町村}/ ← 住居・住み替え情報(公開中)
└── /column/ ← コラム・解説記事
市区町村単位 × 都道府県単位の静的ページが大量に生成される構造。SSG なので CloudFront キャッシュで配信完結。
D. 採用判断のポイント
| 項目 | 採用 | 理由 |
| 展開戦略 | 統合(同一ドメイン、サブディレクトリ) | ドメインオーソリティ集中、データ・UI 共通化 |
| 静的化 | Next.js (App Router, Static Export) | 市区町村粒度の大量ページを CloudFront キャッシュで配信、サーバ常時稼働なし |
| データソース | 自治体公開データ(WAM NET ほか) | 無償・継続的に更新、API キー不要 |
| データ取込 | Lambda + EventBridge | 定期取込み、人手なし |
| 共通化 | グランピングマップと Terraform モジュール共有 | 運用負荷集約、地理データ基盤の再利用 |
E. セキュリティ・コンプライアンス
- HTTPS only — ACM 発行の TLS 証明書 + CloudFront で強制
- S3 直接公開なし — CloudFront Origin Access Control (OAC) で S3 を private に
- 長期 AWS キー不使用 — GitHub Actions は OIDC で短命クレデンシャル取得
- 最小権限 IAM — Lambda は関数ごとに必要最小のロール
- 個人情報の収集なし — 公開データのみを扱い、ユーザー固有情報は保持しない