urokogumo の公開サイトは 1つの Next.js アプリ から複数ドメインを配信しています。
構成の要点
| 要素 | 役割 |
|---|---|
SITE_ID 環境変数 | ビルド時にどのサイトか決定 |
@urokogumo/site-core | サイト定義・URL・テンプレ種別 |
content/sites/{id}/ | 文章・team・サービス定義 |
vercel-ignore.sh | 変更のないサイトはビルドスキップ |
なぜやるか
- キッチンカー用のデザインと会社サイトを 同じコンポーネント資産 で保ちたい
- コンテンツ担当が JSON / Markdown だけ触れるようにしたい
- 将来
tech.urokogumo.orgを別プロジェクトにしても 記事フォルダは共有 したい
コード側のイメージ
// packages/site-core — サイトはデータで切替
export const SITES: Record<SiteId, SiteConfig> = { ... };
// apps/web — テンプレート出し分け
if (site.template === "corporate") return <CorporateHome />;
if (site.template === "restaurant") return <RestaurantHome />;
ハマったところ
- Vercel の
outputFileTracingRootが環境によって二重パスになる → 本番のみ無効化 - 各プロジェクトの Root Directory を
multisite/apps/webに統一
関連
- Works: 公式サイト monorepo 再構築
- Lab では fix-queue など社内ツールの試作ログを別チャネルに置いています