66
77- フレームワーク: Nuxt 4(Vue 3)
88- 目的: 歴代の Vue Fes Japan スピーカー一覧を表示
9- - UI/スタイル: @ nuxt/ui , Tailwind CSS 4
9+ - UI/スタイル: Tailwind CSS 4(カスタムコンポーネント中心)
1010- データ供給: Nuxt サーバルート(` server/api ` )から年別データを返却
1111
1212## 前提・セットアップ
1313
14- - 推奨: Node.js LTS, pnpm(` packageManager: pnpm@10.15.0 ` )
14+ - 推奨: Node.js LTS, pnpm(` packageManager: pnpm@10.33.1 ` )
1515- 依存関係のインストール:
1616
1717``` bash
@@ -24,19 +24,20 @@ pnpm install
2424- ビルド: ` pnpm build `
2525- 静的生成: ` pnpm generate `
2626- プレビュー: ` pnpm preview `
27- - 型チェック: ` pnpm typecheck `
28- - Lint: ` pnpm lint `
29- - テスト(全件): ` pnpm test `
30- - テスト(監視): ` pnpm test:watch `
27+ - 型チェック: ` pnpm vp:check `
28+ - Lint: ` pnpm vp:lint `
29+ - フォーマット: ` pnpm vp:fmt `
30+ - テスト(全件): ` pnpm vp:test `
31+ - テスト(監視): ` pnpm vp:test:watch `
3132
3233## ディレクトリ構成(要点)
3334
3435- ` app/ `
3536 - ` pages/ ` ページ
3637 - ` components/ ` UI コンポーネント
37- - ` composables/ ` アプリ用のロジック
38+ - ` composables/ ` アプリ用のロジック( ` useVfjsI18n ` , ` useColorScheme ` , ` speaker ` など)
3839 - ` utils/ ` ユーティリティ関数
39- - ` assets/css/main.css ` Tailwind CSS設定ファイル
40+ - ` assets/css/main.css ` グローバル CSS・カラートークン定義
4041- ` server/ `
4142 - ` api/ ` API ルート
4243 - ` data/ ` 年別スピーカーデータ(` speakers-YYYY.ts ` とインデックス)
@@ -53,28 +54,43 @@ pnpm install
5354### 変更に伴う確認ポイント:
5455
5556- 新しい年を追加したら、API のレスポンスが期待通りかテストで検証(` server/api/speakers/[year].test.ts ` など)。
56- - UI 側で年選択や一覧表示が反映されるか(` app/utils/years.ts ` , ` YearSelector .vue` )を確認。
57+ - UI 側で年選択や一覧表示が反映されるか(` app/utils/years.ts ` , ` YearFilterBar .vue` )を確認。
5758
5859## UI/ページの要点
5960
6061- ルーティング:
6162 - ` app/pages/[year]/index.vue ` 年別一覧ページ
6263 - ` app/pages/speakers/[name]/index.vue ` スピーカー詳細/個別ページ
63- - コンポーネント例:
64- - ` SpeakerTable.vue ` 一覧表示
65- - ` SpeakerSelector.vue ` / ` YearSelector.vue ` フィルタ・ナビゲーション
66- - スタイル: Tailwind CSS 4 を使用
64+ - コンポーネント:
65+ - ` AppHeader.vue ` ナビゲーション・言語切替・カラースキーム切替
66+ - ` AppMasthead.vue ` / ` AppFooter.vue ` ページ共通ヘッダ・フッタ
67+ - ` DirectoryView.vue ` 全スピーカー一覧(開示行で年バッジ表示)
68+ - ` ChronicleView.vue ` 年別タイムライン表示
69+ - ` SpeakerFilterBar.vue ` / ` YearFilterBar.vue ` フィルタ UI
70+ - スタイル: Tailwind CSS 4 ユーティリティ + CSS カスタムプロパティ(` var(--paper) ` , ` var(--ink) ` , ` var(--accent) ` 等)
71+
72+ ## カラースキーム
73+
74+ ` useColorScheme ` composable でライト / ダーク / システム の3段階を管理します。
75+
76+ - 状態: ` 'light' | 'dark' | 'system' ` (デフォルト: ` 'system' ` )
77+ - 保存先: ` localStorage('vfjs:color-scheme') `
78+ - 適用方法: ` :root ` の ` data-color-scheme ` 属性を操作
79+ - ` system ` → 属性を削除し ` @media (prefers-color-scheme: dark) ` に委ねる
80+ - ` light ` / ` dark ` → ` data-color-scheme="light/dark" ` をセット
81+ - CSS 定義: ` app/assets/css/main.css ` にトークンを定義(ライト/ダーク両方)
82+ - ` @import 'tailwindcss' ` (` theme(static) ` は LightningCSS minify エラーを引き起こすため除去済み)
6783
6884## テスト
6985
7086- ランナー: Vitest(DOM: happy-dom)
7187- 位置: ` app/**.test.ts ` , ` server/**.test.ts `
72- - 実行: ` pnpm test:watch `
88+ - 実行: ` pnpm vp: test:watch `
7389
7490## 型チェック
7591
76- - ランナー: nuxt typecheck
77- - 実行: ` pnpm typecheck `
92+ - ランナー: vite-plus( ` vp check ` )
93+ - 実行: ` pnpm vp:check `
7894- 目的: 型の整合性を保ち、潜在的なバグを防止
7995
8096### 書き方の指針:
@@ -94,7 +110,7 @@ pnpm install
94110
95111### 2. スピーカー検索/フィルタを調整
96112
97- - ` SpeakerSelector .vue` や ` SpeakerTable .vue` を変更。
113+ - ` SpeakerFilterBar .vue` や ` DirectoryView .vue` を変更。
98114- 変更に合わせ ` composables/speaker.ts ` で取得ロジックやフィルタを調整。
99115- 影響範囲のテスト更新(該当ページ/コンポーネントの test)。
100116
@@ -108,13 +124,13 @@ pnpm install
108124
109125- ブランチ: ` feat/* ` , ` fix/* ` , ` chore/* ` など用途別に作成。
110126- 実装: 小さなコミットで進め、関連テストを同時に更新。
111- - 検証: ` pnpm lint && pnpm typecheck && pnpm test ` で事前チェック。
127+ - 検証: ` pnpm vp: lint && pnpm vp:check && pnpm vp: test ` で事前チェック。
112128 - 型チェックは特に重要。型を消すなどしてエラーを隠さないこと。その場合は詰めます。
113129- レビュー: 変更点の要約、スクリーンショットや再現手順があると親切。
114130
115131## トラブルシュート
116132
117133- Node/pnpm の不整合: ローカルの pnpm を ` pnpm -v ` で確認(推奨 10 系)。
118- - 型エラー: ` pnpm typecheck ` で事前に洗い出し。
134+ - 型エラー: ` pnpm vp:check ` で事前に洗い出し。
119135 - 再三忠告しますが、型を消すなどしてエラーを隠さないこと。その場合は詰めます。
120136- キャッシュ問題: Nuxt のキャッシュが怪しい場合は開発サーバ再起動で解消することがあります。
0 commit comments