public/index.html → /service)セッション開始:2026/06/09 15:17
スマピタが「完全紹介制のサービス」であることを伝える案内ページを、
静的ファイル apps/www/public/index.html として置いていたものを、
Next.js のルート apps/www/app/service/page.tsx へ移設する。
公開サイト(apps/www)の他ページと同じ App Router 上で管理し、
メタデータ・画像配信・アイコンの扱いをアプリの作法(generateMetadata() / 環境変数経由の CloudFront)に揃える。
/service はコーポレートLP(/=section1〜9)とは
別物の単独ページ。`/` は従来どおり残し、/service へのリダイレクトや相互導線は設けない。public/index.html はレガシー。app/page.tsx が / を占有するため、
旧静的ファイルは / では配信され得ず(せいぜい /index.html)、実質的に半ば死んだページだった。削除する。robots 指定は付けない。
コーポレートLP(/=index:false)とは方針が異なるが、旧静的ページの踏襲として意図的にこの判断とした。新規
apps/www/app/service/page.tsx
旧 index.html の <body> を JSX 化。generateMetadata() で
title「スマピタ|完全紹介制サービス」/description/OG/icons を付与。アイコンは
${getAwsCloudfrontEndpoint()}/icon.png(環境変数経由)。force-dynamic。
ロゴは next/image の <Image> で CloudFront から表示。
新規
apps/www/app/service/styles.css
旧 index.html の <style> をそのまま分離(プレーンCSS)。page.tsx から import "./styles.css"。
削除
apps/www/public/index.html / apps/www/public/icon.png
レガシーの静的ページとアイコンを削除。public/icon.png は app/lib のコードから参照されておらず
(旧 index.html も CloudFront URL を参照)、削除は安全と確認。
🟡 仕様確認(robots):
/service は robots 指定が無く検索インデックスされ得る。
公開サイトの / は index:false のため不整合に見えるが、
「インデックス許可のまま現状維持」で合意(旧静的ページの踏襲)。
✅ 確認(画像):
next.config.js の images.remotePatterns が
*.cloudfront.net を許可済みのため、<Image> の CloudFront 画像は解決できる。
🔵 前提(環境変数):
AWS_CLOUDFRONT_ENDPOINT の配信ルートに icon.png が存在することが前提
(旧ハードコード https://dn02r2vz60l0t.cloudfront.net/icon.png と同一を想定)。
🔵 軽微:
styles.css はプレーンCSSで body / * / h1 / a 等のグローバルセレクタを含む。
単独フルページのため実害は低いが、将来クライアント遷移で他ルートと併存する場合はスコープ汚染に留意。
apps/www で tsc --noEmit を実行し、型エラー無し(EXIT=0)を確認。
/service / icon.png の参照箇所を grep で洗い出し、外部からの参照が無い(=導線・依存が無い独立ページ)ことを確認した。