サマリ

プロジェクト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

全体アーキテクチャ

構成図は drawio (AWS 公式アイコン v2026 系) で作成しています。下のビューアは .drawio ファイルを 直接レンダリングしています。zoom / pan / 編集ボタンが使えます。

ソース: /diagrams/kosodate-map/architecture.drawio (drawio で開けば編集可能)

A. AWS 構成

カテゴリAWS サービス役割
配信CloudFront + S3静的サイト配信(OAC で S3 直接アクセス遮断)
ドメイン / TLSRoute 53 + ACMkosodate-area.com + TLS 証明書
データレイヤDynamoDB保育施設・学校・市区町村マスタ格納
データ取込EventBridge + Lambda自治体公開データを定期取込み、DynamoDB に upsert
認可IAM (GitHub OIDC)CI から短命クレデンシャルでデプロイ
観測CloudWatch Logs / AlarmsLambda・配信のログ集約

B. なぜ統合か(ドメイン戦略)

  1. ターゲット層完全重複: 30〜40 代子育て世代はすべての領域を 1 人で意思決定する
  2. ライフサイクル連続性: 保活 (0-3 歳) → 学区検討 (5-7 歳) → 中学進学 (10-12 歳) と長期間に渡る
  3. データ・UI・技術基盤共通: 地図 UI / 自治体データ取込 / 検索機能はすべて同じ
  4. ドメインオーソリティ集中: 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 は関数ごとに必要最小のロール
  • 個人情報の収集なし — 公開データのみを扱い、ユーザー固有情報は保持しない