Skip to content

Commit ebe6916

Browse files
authored
docs: update agents guide (#681)
1 parent 6add406 commit ebe6916

1 file changed

Lines changed: 146 additions & 81 deletions

File tree

AGENTS.md

Lines changed: 146 additions & 81 deletions
Original file line numberDiff line numberDiff line change
@@ -1,136 +1,201 @@
11
# AGENTS Guide (vuefes-japan-speakers)
22

3-
このドキュメントは、エージェントや貢献者が本リポジトリで効率よく作業するための実務ガイドです。セットアップ、構成、一般的なタスクの手順、テスト/デプロイの流れを簡潔にまとめています
3+
このドキュメントは、本リポジトリで作業するエージェントや貢献者向けの実務ガイドです。セットアップ、構成、よくある変更、検証、デプロイの要点をまとめています
44

55
## プロジェクト概要
66

77
- フレームワーク: Nuxt 4(Vue 3)
8-
- 目的: 歴代の Vue Fes Japan スピーカー一覧を表示
9-
- UI/スタイル: Tailwind CSS 4(カスタムコンポーネント中心)
10-
- データ供給: Nuxt サーバルート(`server/api`)から年別データを返却
8+
- 目的: 歴代の Vue Fes Japan スピーカーと発表タイトルを一覧できる非公式アーカイブ
9+
- UI/スタイル: Nuxt UI 4 + Tailwind CSS 4 + カスタムコンポーネント
10+
- データ供給: Nuxt サーバルート(`server/api`)から年別・全件データを返却
11+
- デプロイ: NuxtHub / Cloudflare 系の設定を利用
1112

1213
## 前提・セットアップ
1314

14-
- 推奨: Node.js LTS, pnpm(`packageManager: pnpm@10.33.1`
15-
- 依存関係のインストール:
15+
- 推奨: Node.js LTS。CI は Node.js 24 で動作します。
16+
- パッケージマネージャー: `pnpm@10.33.2``package.json``packageManager` を参照)
17+
- このリポジトリでは Vite+(`vp`)経由の操作を基本にします。
1618

1719
```bash
18-
pnpm install
20+
curl -fsSL https://vite.plus | bash
21+
vp install
22+
vp config
1923
```
2024

21-
## よく使うスクリプト
25+
`vp install``packageManager` を見て依存関係を入れます。`vp config``vite.config.ts` の設定を反映します。通常は install 時にも実行されますが、生成設定や Vite+ 設定を変更した場合は手動で実行してください。
2226

23-
- 開発サーバ: `pnpm dev`
24-
- ビルド: `pnpm build`
25-
- 静的生成: `pnpm generate`
26-
- プレビュー: `pnpm preview`
27-
- 型チェック: `pnpm vp:check`
28-
- Lint: `pnpm vp:lint`
29-
- フォーマット: `pnpm vp:fmt`
30-
- テスト(全件): `pnpm vp:test`
31-
- テスト(監視): `pnpm vp:test:watch`
27+
## よく使うコマンド
28+
29+
| 用途 | 推奨コマンド | npm script |
30+
| --- | --- | --- |
31+
| 開発サーバ | `vp run dev` | `pnpm dev` |
32+
| ビルド | `vp run build` | `pnpm build` |
33+
| 静的生成 | `vp run generate` | `pnpm generate` |
34+
| プレビュー | `vp run preview` | `pnpm preview` |
35+
| Lint | `vp lint .` | `pnpm vp:lint` |
36+
| Format | `vp fmt .` | `pnpm vp:fmt` |
37+
| Format 確認 | `vp fmt . --check` | - |
38+
| Type Check | `vp check` | `pnpm vp:check` |
39+
| Test | `vp test run` | `pnpm vp:test` |
40+
| Test(watch) | `vp test` | `pnpm vp:test:watch` |
41+
42+
作業前後の検証は、変更内容に応じて `vp lint .``vp fmt . --check``vp check``vp test run` を組み合わせます。
3243

3344
## ディレクトリ構成(要点)
3445

3546
- `app/`
36-
- `pages/` ページ
37-
- `components/` UI コンポーネント
38-
- `composables/` アプリ用のロジック(`useVfjsI18n`, `useColorScheme`, `speaker` など)
39-
- `utils/` ユーティリティ関数
40-
- `assets/css/main.css` グローバル CSS・カラートークン定義
47+
- `app.vue`: ルート、SEO、フォント、アイコンなどの共通設定
48+
- `pages/`: トップ、年別一覧、スピーカー詳細ページ
49+
- `components/`: ヘッダー、フッター、マストヘッド、一覧・タイムライン、フィルタ UI
50+
- `composables/`: `useVfjsI18n``useColorScheme`、スピーカー取得・絞り込みロジック
51+
- `utils/`: 年判定、文字列ソート、スピーカー集約などのユーティリティ
52+
- `assets/css/main.css`: Tailwind 読み込み、フォント、カラートークン、フォーカススタイル
4153
- `server/`
42-
- `api/` API ルート
43-
- `data/` 年別スピーカーデータ(`speakers-YYYY.ts` とインデックス)
44-
- `public/` 静的ファイル
45-
- `nuxt.config.ts` Nuxt 設定ファイル
46-
- `eslint.config.mjs`, `vitest.config.ts`, `tsconfig.json` ツール設定
54+
- `api/`: `/api/speakers``/api/speakers/[year]`
55+
- `data/`: 年別スピーカーデータと集約ロジック
56+
- `types/`: `SpeakerInfo``SpeakerWithYear``YEARS` などの共有型
57+
- `public/`: ロゴ、favicon、OG 画像などの静的ファイル
58+
- `pnpm-workspace.yaml`: catalog と依存バージョンの定義
59+
- `vite.config.ts`: Vite+ の lint / staged 設定
60+
- `vitest.config.ts`: Nuxt テスト環境と happy-dom 設定
61+
- `nuxt.config.ts`: Nuxt モジュール、Nitro、NuxtHub、ESLint 設定
4762

4863
## API とデータ
4964

50-
- 一覧: `server/api/speakers.ts`
65+
- 全件: `server/api/speakers.ts`
5166
- 年別: `server/api/speakers/[year].ts`
52-
- データ源: `server/data/` 配下に `speakers-2018.ts``speakers-2025.ts` などを配置し、`server/data/index.ts` から集約・エクスポートします。
67+
- データ源: `server/data/speakers-YYYY.ts`
68+
- 集約: `server/data/index.ts`
69+
- 有効年: `types/index.ts``YEARS`
70+
71+
現在の有効年は `2018``2019``2022``2023``2024``2025` です。2020 年と 2021 年は含まれていません。
5372

54-
### 変更に伴う確認ポイント:
73+
### 新しい開催年を追加するとき
5574

56-
- 新しい年を追加したら、API のレスポンスが期待通りかテストで検証(`server/api/speakers/[year].test.ts` など)。
57-
- UI 側で年選択や一覧表示が反映されるか(`app/utils/years.ts`, `YearFilterBar.vue`)を確認。
75+
- `server/data/speakers-YYYY.ts` を作成し、`SpeakerInfo[]` に沿ってデータを定義する。
76+
- `server/data/index.ts` に import と `speakersByYear` のエントリを追加する。
77+
- `types/index.ts``YEARS` に年を追加する。UI の年表示はこの値を参照します。
78+
- `server/api/speakers/[year].test.ts` の有効年・エラーメッセージ期待値を更新する。
79+
- 必要に応じて `README.md` の参考リンクも更新する。
80+
- `/``/[year]``/speakers/[name]` で表示とリンクを確認する。
5881

5982
## UI/ページの要点
6083

6184
- ルーティング:
62-
- `app/pages/[year]/index.vue` 年別一覧ページ
63-
- `app/pages/speakers/[name]/index.vue` スピーカー詳細/個別ページ
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)` 等)
85+
- `app/pages/index.vue`: 全体ビュー。タイムライン表示と一覧表示を切り替えます。
86+
- `app/pages/[year]/index.vue`: 年別一覧ページ
87+
- `app/pages/speakers/[name]/index.vue`: スピーカー詳細ページ
88+
- 主要コンポーネント:
89+
- `AppHeader.vue`: ナビゲーション、言語切替、配色切替
90+
- `AppMasthead.vue`: トップページの概要・統計表示
91+
- `ChronicleView.vue`: 年別タイムライン表示
92+
- `DirectoryView.vue`: スピーカー単位の一覧。並び替えと開閉行を持ちます。
93+
- `SpeakerFilterBar.vue` / `YearFilterBar.vue`: 検索・年フィルタ UI
94+
- `AppFooter.vue`: フッター
95+
- 表示状態:
96+
- トップページの view は `localStorage('vfjs:view')` に保存されます。
97+
- density は `localStorage('vfjs:density')` に保存されます。
98+
- 言語は `localStorage('vfjs:lang')` に保存されます。
7199

72100
## カラースキーム
73101

74-
`useColorScheme` composable でライト / ダーク / システム の3段階を管理します
102+
`useColorScheme` composable `light` / `dark` / `system` を管理します
75103

76-
- 状態: `'light' | 'dark' | 'system'`デフォルト: `'system'`
104+
- デフォルト: `system`
77105
- 保存先: `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 エラーを引き起こすため除去済み)
106+
- 適用方法:
107+
- `system`: `document.documentElement``data-color-scheme` 属性を削除し、`prefers-color-scheme` に委ねる。
108+
- `light` / `dark`: `data-color-scheme="light"` または `data-color-scheme="dark"` をセットする。
109+
- CSS 定義: `app/assets/css/main.css`
110+
- `@import 'tailwindcss' theme(static);`
111+
- `--paper``--ink``--accent``--rule` などの CSS カスタムプロパティを定義します。
83112

84113
## テスト
85114

86-
- ランナー: Vitest(DOM: happy-dom)
87-
- 位置: `app/**.test.ts`, `server/**.test.ts`
88-
- 実行: `pnpm vp:test:watch`
115+
- ランナー: Vitest(Vite+ 経由)
116+
- DOM: Nuxt テスト環境 + happy-dom
117+
- 設定: `vitest.config.ts`
118+
- テスト位置:
119+
- `app/**.test.ts`
120+
- `server/**.test.ts`
121+
- 実行:
89122

90-
## 型チェック
123+
```bash
124+
vp test run
125+
```
91126

92-
- ランナー: vite-plus(`vp check`
93-
- 実行: `pnpm vp:check`
94-
- 目的: 型の整合性を保ち、潜在的なバグを防止
127+
ウォッチ実行は `vp test` を使います。
95128

96-
### 書き方の指針:
129+
### テスト方針
97130

98-
- ユニットテストは入出力と副作用の最小検証に集中。
99-
- ルート/API は境界値・異常系(存在しない年など)もカバー。
131+
- ユニットテストは入出力と副作用の最小検証に集中する。
132+
- API ルートは有効値、境界値、異常系を確認する。
133+
- 年追加時は `YEARS`、API のエラーメッセージ、UI 側の年表示が連動しているか確認する。
134+
135+
## 型チェックと lint
136+
137+
- 型チェック: `vp check`
138+
- Lint: `vp lint .`
139+
- Format: `vp fmt .`
140+
- Format 確認: `vp fmt . --check`
141+
142+
型エラーを隠すための型削除や過度な型アサーションは避け、原因を直してください。`vite.config.ts` の staged 設定では `vp check --fix` が走る想定です。
100143

101144
## 典型タスクの手順
102145

103-
### 1. 新しい開催年のスピーカーデータを追加
146+
### スピーカー検索/フィルタを調整
147+
148+
- `SpeakerFilterBar.vue``YearFilterBar.vue``DirectoryView.vue``ChronicleView.vue` を確認する。
149+
- 取得・絞り込みロジックが必要なら `app/composables/speaker.ts` を更新する。
150+
- スピーカー集約や日本語判定に関わる場合は `app/utils/speakerMap.ts``app/utils/stringCollate.ts` も確認する。
151+
- 影響範囲のテストを更新する。
104152

105-
- `server/data/speakers-YYYY.ts` を作成し型に沿ってデータを定義。
106-
- `server/data/index.ts` にインポートとエクスポートを追加。
107-
- 必要に応じて `app/utils/years.ts` に年を追加(表示順の維持に注意)。
108-
- API テストを追加/更新(`server/api/speakers/[year].test.ts`)。
109-
- UI 表示を確認(`/[year]` ページ、年セレクタ)。
153+
### コンポーネントを追加
110154

111-
### 2. スピーカー検索/フィルタを調整
155+
- `app/components/` に追加し、該当ページで利用する。
156+
- 既存の CSS カスタムプロパティと Tailwind ユーティリティに合わせる。
157+
- グローバルな見た目やフォーカススタイルは `app/assets/css/main.css` を確認する。
158+
- UI の振る舞いは小さな単位でテストする。
112159

113-
- `SpeakerFilterBar.vue``DirectoryView.vue` を変更。
114-
- 変更に合わせ `composables/speaker.ts` で取得ロジックやフィルタを調整。
115-
- 影響範囲のテスト更新(該当ページ/コンポーネントの test)。
160+
### 表示文言や言語切替を変更
116161

117-
### 3. コンポーネントを追加
162+
- 文言は `app/composables/useVfjsI18n.ts``translations` を更新する。
163+
- `ja``en` の両方を揃える。
164+
- スピーカー名の英語表記はデータ側の `nameEn` を確認する。
165+
166+
## CI
167+
168+
GitHub Actions は Vite+ セットアップ後に以下を実行します。
169+
170+
- `vp lint .`
171+
- `vp fmt . --check`
172+
- `vp check`
173+
- `vp test run`
174+
175+
CI の対象 path は `app/**``server/**``types/**`、各種設定ファイル、lockfile などです。ドキュメントのみの変更では一部の workflow が走らない場合があります。
176+
177+
## デプロイ
178+
179+
NuxtHub へのデプロイは以下を使います。
180+
181+
```bash
182+
vpx nuxthub deploy
183+
```
118184

119-
- `app/components/` に追加し、該当ページで読み込み。
120-
- スタイルは Tailwind ユーティリティを優先。
121-
- UI の振る舞いは小さな単位でテスト。
185+
NuxtHub / Cloudflare 関連の依存は `pnpm-workspace.yaml``cloudflare` catalog にまとまっています。
122186

123187
## 開発フロー(推奨)
124188

125-
- ブランチ: `feat/*`, `fix/*`, `chore/*` など用途別に作成
126-
- 実装: 小さなコミットで進め、関連テストを同時に更新。
127-
- 検証: `pnpm vp:lint && pnpm vp:check && pnpm vp:test` で事前チェック
128-
- 型チェックは特に重要。型を消すなどしてエラーを隠さないこと。その場合は詰めます
129-
- レビュー: 変更点の要約、スクリーンショットや再現手順があると親切
189+
- ブランチ: `feat/*``fix/*``chore/*``docs/*` など用途別に作成する
190+
- コミット: Conventional Commits を使う。例: `docs: update agents guide`
191+
- 実装: 小さめの差分で進め、関連テストやドキュメントも合わせて更新する
192+
- 検証: 変更内容に応じて `vp lint . && vp fmt . --check && vp check && vp test run` を実行する
193+
- レビュー: 変更点の要約、確認したコマンド、必要に応じてスクリーンショットや再現手順を添える
130194

131195
## トラブルシュート
132196

133-
- Node/pnpm の不整合: ローカルの pnpm を `pnpm -v` で確認(推奨 10 系)。
134-
- 型エラー: `pnpm vp:check` で事前に洗い出し。
135-
- 再三忠告しますが、型を消すなどしてエラーを隠さないこと。その場合は詰めます。
136-
- キャッシュ問題: Nuxt のキャッシュが怪しい場合は開発サーバ再起動で解消することがあります。
197+
- 依存関係の不整合: `vp install` を実行し、必要なら `vp config` も実行する。
198+
- パッケージマネージャーの確認: `pnpm -v``10.33.2` 系か確認する。
199+
- 型エラー: `vp check` で原因を洗い出し、型定義・import・データ構造を直す。
200+
- Nuxt 生成物の不整合: 開発サーバを再起動し、必要なら `vp config` を再実行する。
201+
- テスト環境の差異: `vitest.config.ts` の Nuxt 環境と happy-dom 設定を確認する。

0 commit comments

Comments
 (0)