event-manual / chapter 2

アーキテクチャ全体像

@event/*

モジュール地図(Tier 0–3)

パッケージは依存の深さで4層に分かれる。下層ほど generic で、上層はそれを組み立てる。実装済みは M0–M6 で着地した7パッケージ、それ以外は M7+ の opt-in feature module である。

Tierパッケージ役割状態
0@event/corecontentStore / 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/cmsJSON-as-DB 読み出し + FieldSchema→GenericForm の schema 駆動 admin実装済み
1@event/crm-schemaDrizzle schema factory(db flag)計画
2@event/session-card1A–10A photo-first カード engine + editor + persist実装済み
2@event/visuals / feedback / booking / networking生成スタジオ / サーベイ / 予約 / マッチング(各 opt-in)計画
3@event/shellrealm 認証 / nav registry / ChromeGate / dev-login / middleware実装済み
3@event/asset-kitasset store(server)+ capture + bulkZip + image variants実装済み
3@event/content-web / spatial / maileri18n・SEO / マップ / メール(opt-in)計画

依存方向は一方通行である: session-cardcore(ContentStore / KvLike)と schema(Session / CARD_OVERLAY_FIELDS)に依存し、shellcore に依存する。パッケージがアプリに依存することはない — server action や next/headers はアプリ側から callback / 値として注入する(例: CmsActionsOptions.requireAuthRealm.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 境界の制御装置を兼ねる:

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章)。