3434tecnova-platform/
3535├── apps/ # エンドユーザー向けアプリ
3636│ ├── api/ # Hono on Cloudflare Workers
37- │ ├── checkin/ # Next.js iPad PWA
38- │ ├── mentor/ # Next.js スマホPWA (Phase 1.5)
37+ │ ├── checkin/ # Next.js iPad PWA(受付端末)
3938│ └── admin/ # Next.js 管理PC画面
4039├── packages/ # アプリ間で共有するライブラリ
4140│ ├── db/ # Drizzle schema・migrations
4241│ ├── shared/ # 共通型・Zodスキーマ・Sheets連携
43- │ ├── ui/ # 共通UIコンポーネント (shadcn/ui)
44- │ └── auth/ # Better Auth設定
42+ │ └── ui/ # 共通UIコンポーネント (shadcn/ui)・APIクライアント・共通フォーマッタ
4543└── docs/ # 設計ドキュメント
4644```
4745
46+ ` apps/mentor ` (メンタースマホPWA)は Phase 1.5 でスコープ化されるが現時点では未実装。
47+ Better Auth の設定は ` packages/auth ` ではなく ` apps/api/src/lib/auth.ts ` に集約している
48+ (リクエスト毎に instance を作る制約上、Workers の Env を直接受け取れる場所に置くのが自然なため)。
49+
4850** 新しい機能の追加先を判断する基準:**
4951
5052- 単一アプリ固有 → 該当 ` apps/* `
5153- 複数アプリで使う → ` packages/* ` のいずれか
5254- DB関連 → ` packages/db `
5355- 型定義・Zodスキーマ・外部API連携 → ` packages/shared `
56+ - フロント共通の UI / ` apiFetch ` / JST フォーマッタ / ` MeProvider ` → ` packages/ui `
5457
5558---
5659
@@ -132,15 +135,15 @@ DBは Cloudflare D1(SQLite)。インタラクティブ・トランザクシ
1321353 . ** ` db.batch([...]) ` で原子的に** : ` INSERT participants ` + ` INSERT sessions `
1331364 . スプシ書き戻し
1341375 . ** 失敗時の補償** : ` db.batch([...]) ` で ` DELETE sessions ` → ` DELETE participants ` を実行
135- 6 . PK衝突時はステップ1からリトライ(最大3回)
138+ 6 . PK 衝突時のリトライは現行未実装( ` apps/api/src/lib/checkin.ts ` の TODO)。当面は運用上の手動再試行で回復する
136139
137- 詳細: [ ` docs/mvp.md ` 6.1節] ( ./docs/mvp.md#61-認証なしチェックインipad用 ) の ` /checkin/activate ` 処理順
140+ 詳細: [ ` docs/mvp.md ` 6.1節] ( ./docs/mvp.md#61-受付端末用checkinメンター認証必須 ) の ` /checkin/activate ` 処理順
138141
139142### 5. 個人情報の取り扱い
140143
141- - 内製DBには ** 本名・住所・年齢・保護者連絡先・学校名は保持しない **
142- - これらは教員側の管理スプシで完結する設計
143- - ニックネーム・学年のみが学生側で扱える情報
144+ - 内製DBに保持するのは ** 氏名(本名)・ニックネーム・学年 ** のみ
145+ - 氏名はメンターの呼びかけや救急時の本人確認のために必要なので学生側でも持つが、 ** メイン識別子はニックネーム ** (QR・検索・一覧の主表示はニックネーム)
146+ - 住所・年齢・保護者連絡先・学校名は ** 保持しない ** 。これらは教員側の管理スプシで完結する設計
144147
145148### 6. タイムゾーン
146149
@@ -174,8 +177,8 @@ DBは Cloudflare D1(SQLite)。インタラクティブ・トランザクシ
1741772 . ** 型を定義する** (` packages/shared/src/types/ ` または該当アプリ内)
1751783 . ** Zodスキーマを定義する** (` packages/shared/src/schemas/ ` )
1761794 . ** DB操作が必要なら** 、` packages/db ` のスキーマを確認・更新
177- 5 . ** APIエンドポイントを実装** (` apps/api ` )
178- 6 . ** フロント側で呼び出し** (Hono Client ` hc ` を使うことで型推論が効く )
180+ 5 . ** APIエンドポイントを実装** (` apps/api ` 、 ` routes/ ` 配下にモジュール単位で )
181+ 6 . ** フロント側で呼び出し** (` @tecnova/ui/lib/api-client ` の ` apiFetch ` を使い、レスポンスは ` packages/shared/src/schemas ` の型でアサート )
1791827 . ** 動作確認** してから次へ
180183
181184---
@@ -187,9 +190,11 @@ DBは Cloudflare D1(SQLite)。インタラクティブ・トランザクシ
187190pnpm dev
188191
189192# 特定アプリのみ起動
193+ # 注: workspace 名は package.json の "name" を使う。フロント2つは
194+ # @tecnova/ プレフィックスを付けていない(checkin / admin)。
190195pnpm --filter @tecnova/api dev
191- pnpm --filter @tecnova/ checkin dev
192- pnpm --filter @tecnova/ admin dev
196+ pnpm --filter checkin dev
197+ pnpm --filter admin dev
193198
194199# Lint & format
195200pnpm biome check --write .
@@ -201,9 +206,8 @@ pnpm type-check
201206pnpm --filter @tecnova/db db:generate
202207
203208# DB マイグレーション適用(ローカル D1 / 本番 D1)
204- cd apps/api
205- npx wrangler d1 migrations apply tecnova-db --local
206- npx wrangler d1 migrations apply tecnova-db --remote
209+ pnpm --filter @tecnova/api db:apply:local
210+ pnpm --filter @tecnova/api db:apply:remote
207211
208212# Cloudflare Workers デプロイ
209213pnpm --filter @tecnova/api deploy
0 commit comments