モジュール地図(Tier 0–3)
パッケージは依存の深さで4層に分かれる。下層ほど generic で、上層はそれを組み立てる。実装済みは M0–M6 で着地した7パッケージ、それ以外は M7+ の opt-in feature module である。
| Tier | パッケージ | 役割 | 状態 |
|---|---|---|---|
| 0 | @event/core | contentStore / auth / defineEnv / KV / cron / next.config factory | 実装済み |
| 0 | @event/fours-sdk | 唯一の型付き 4S クライアント(transport / event / profile / verify / session / webhook) | 実装済み |
| 1 | @event/schema | 正規ドメイン型 + LOCKED / CARD_OVERLAY フィールド登録簿 | 実装済み |
| 1 | @event/cms | JSON-as-DB 読み出し + FieldSchema→GenericForm の schema 駆動 admin | 実装済み |
| 1 | @event/crm-schema | Drizzle schema factory(db flag) | 計画 |
| 2 | @event/session-card | 1A–10A photo-first カード engine + editor + persist | 実装済み |
| 2 | @event/visuals / feedback / booking / networking | 生成スタジオ / サーベイ / 予約 / マッチング(各 opt-in) | 計画 |
| 3 | @event/shell | realm 認証 / nav registry / ChromeGate / dev-login / middleware | 実装済み |
| 3 | @event/asset-kit | asset store(server)+ capture + bulkZip + image variants | 実装済み |
| 3 | @event/content-web / spatial / mailer | i18n・SEO / マップ / メール(opt-in) | 計画 |
依存方向は一方通行である: session-card は core(ContentStore / KvLike)と schema(Session / CARD_OVERLAY_FIELDS)に依存し、shell は core に依存する。パッケージがアプリに依存することはない — server action や next/headers はアプリ側から callback / 値として注入する(例: CmsActionsOptions.requireAuth、Realm.requireFromValue(cookieValue))。
internal-packages パターン
パッケージはビルド成果物を作らない。TS ソースをそのまま export し、消費側 Next.js が transpile する。
// packages/core/package.json
{
"name": "@event/core",
"exports": {
".": "./src/index.ts",
"./auth": "./src/auth.ts"
}
}
// apps/starter/next.config.ts
import { createNextConfig } from "@event/core";
export default createNextConfig({
transpilePackages: [
"@event/schema", "@event/fours-sdk", "@event/core",
"@event/cms", "@event/session-card", "@event/shell", "@event/asset-kit",
],
});
tsup / dist ディレクトリ / publish パイプラインが不要になり、パッケージの編集が即 HMR に乗る。副作用として subpath export が bundle 境界の制御装置を兼ねる:
@event/core/auth— edge middleware から barrel を経由すると contentStore のnode:fs/node:cryptoが edge bundle に混入する。middleware は必ずこの subpath から import する@event/session-card/persist— OverlayStore は server 専用@event/shell/ui/@event/cms/ui— "use client" コンポーネントの分離@event/asset-kit— barrel を持たず/server/capture/bulk/imageの4 entrypoint のみ。client bundle が@vercel/blobや sharp を引かない
feature flags
イベントの機能構成は root の event.config.ts にある1つのフラグオブジェクトで宣言する(設計書 §2):
export const eventConfig = {
db: false, // @event/crm-schema(Drizzle/Neon)
betterAuth: false,
blob: true, // @event/asset-kit server store
kv: true, // KV ミラー / live 系
sentry: false,
fourS: true, // @event/fours-sdk 接続(mode は env が決める)
surveys: false, // @event/feedback
booking: false, // @event/booking
networking: false // @event/networking
};
flag が false のモジュールは mount されず、env も要求されない。4S の接続段階は flag ではなく env から導出される FoursMode(第5章)が担う。
monorepo レイアウト
event-manual/ Turborepo + yarn workspaces
├─ packages/
│ ├─ core/ fours-sdk/ schema/ cms/
│ ├─ session-card/ … engine/ model/ render/ editor/ persist/ preview/
│ ├─ shell/ asset-kit/
├─ apps/
│ ├─ manual/ event-manual.zfilms.jp(本サイト、port 3400)
│ └─ starter/ create-event-app テンプレート(port 3401)
├─ tooling/tsconfig/ base / react-library / nextjs 共有 tsconfig
└─ turbo.json package.json
yarn typecheck / yarn build は turbo が依存順に全 workspace を回す。新イベント = apps/ に workspace を1つ追加し、adapter・theme・content の3面を書くこと(第3章)。