Skip to content

Commit d006d55

Browse files
committed
chore: migrate to vuerend
1 parent ebe6916 commit d006d55

62 files changed

Lines changed: 3411 additions & 14717 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/workflows/format.yml

Lines changed: 13 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -5,20 +5,18 @@ on:
55
branches:
66
- main
77
paths:
8-
- 'app/**'
9-
- 'README.md'
10-
- 'server/**'
11-
- 'types/**'
12-
- 'package.json'
13-
- 'pnpm-workspace.yaml'
14-
- 'pnpm-lock.yaml'
15-
- 'vite.config.ts'
16-
- 'vitest.config.ts'
17-
- 'eslint.config.mjs'
18-
- 'nuxt.config.ts'
19-
- 'tsconfig.json'
20-
- 'server/tsconfig.json'
21-
- '.github/workflows/format.yml'
8+
- "app/**"
9+
- "README.md"
10+
- "server/**"
11+
- "types/**"
12+
- "package.json"
13+
- "pnpm-workspace.yaml"
14+
- "pnpm-lock.yaml"
15+
- "vite.config.ts"
16+
- "vitest.config.ts"
17+
- "eslint.config.mjs"
18+
- "tsconfig.json"
19+
- ".github/workflows/format.yml"
2220

2321
permissions:
2422
contents: read
@@ -32,7 +30,7 @@ jobs:
3230
- name: Setup Vite+
3331
uses: voidzero-dev/setup-vp@be55d5df2da88a2387a2e6764871ca9e5387e187 # v1
3432
with:
35-
node-version: '24'
33+
node-version: "24"
3634
cache: true
3735
- name: Install dependencies
3836
run: vp install

.github/workflows/linter.yml

Lines changed: 12 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -5,19 +5,17 @@ on:
55
branches:
66
- main
77
paths:
8-
- 'app/**'
9-
- 'server/**'
10-
- 'types/**'
11-
- 'package.json'
12-
- 'pnpm-workspace.yaml'
13-
- 'pnpm-lock.yaml'
14-
- 'vite.config.ts'
15-
- 'vitest.config.ts'
16-
- 'eslint.config.mjs'
17-
- 'nuxt.config.ts'
18-
- 'tsconfig.json'
19-
- 'server/tsconfig.json'
20-
- '.github/workflows/linter.yml'
8+
- "app/**"
9+
- "server/**"
10+
- "types/**"
11+
- "package.json"
12+
- "pnpm-workspace.yaml"
13+
- "pnpm-lock.yaml"
14+
- "vite.config.ts"
15+
- "vitest.config.ts"
16+
- "eslint.config.mjs"
17+
- "tsconfig.json"
18+
- ".github/workflows/linter.yml"
2119

2220
permissions:
2321
contents: read
@@ -31,7 +29,7 @@ jobs:
3129
- name: Setup Vite+
3230
uses: voidzero-dev/setup-vp@be55d5df2da88a2387a2e6764871ca9e5387e187 # v1
3331
with:
34-
node-version: '24'
32+
node-version: "24"
3533
cache: true
3634
- name: Install dependencies
3735
run: vp install

.github/workflows/typecheck.yml

Lines changed: 12 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -5,19 +5,17 @@ on:
55
branches:
66
- main
77
paths:
8-
- 'app/**'
9-
- 'server/**'
10-
- 'types/**'
11-
- 'package.json'
12-
- 'pnpm-workspace.yaml'
13-
- 'pnpm-lock.yaml'
14-
- 'vite.config.ts'
15-
- 'vitest.config.ts'
16-
- 'eslint.config.mjs'
17-
- 'nuxt.config.ts'
18-
- 'tsconfig.json'
19-
- 'server/tsconfig.json'
20-
- '.github/workflows/typecheck.yml'
8+
- "app/**"
9+
- "server/**"
10+
- "types/**"
11+
- "package.json"
12+
- "pnpm-workspace.yaml"
13+
- "pnpm-lock.yaml"
14+
- "vite.config.ts"
15+
- "vitest.config.ts"
16+
- "eslint.config.mjs"
17+
- "tsconfig.json"
18+
- ".github/workflows/typecheck.yml"
2119

2220
permissions:
2321
contents: read
@@ -31,7 +29,7 @@ jobs:
3129
- name: Setup Vite+
3230
uses: voidzero-dev/setup-vp@be55d5df2da88a2387a2e6764871ca9e5387e187 # v1
3331
with:
34-
node-version: '24'
32+
node-version: "24"
3533
cache: true
3634
- name: Install dependencies
3735
run: vp install

.github/workflows/vitest.yml

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -5,19 +5,17 @@ on:
55
branches:
66
- main
77
paths:
8-
- 'app/**'
9-
- 'server/**'
10-
- 'types/**'
11-
- 'package.json'
12-
- 'pnpm-workspace.yaml'
13-
- 'pnpm-lock.yaml'
14-
- 'vite.config.ts'
15-
- 'vitest.config.ts'
16-
- 'eslint.config.mjs'
17-
- 'nuxt.config.ts'
18-
- 'tsconfig.json'
19-
- 'server/tsconfig.json'
20-
- '.github/workflows/vitest.yml'
8+
- "app/**"
9+
- "server/**"
10+
- "types/**"
11+
- "package.json"
12+
- "pnpm-workspace.yaml"
13+
- "pnpm-lock.yaml"
14+
- "vite.config.ts"
15+
- "vitest.config.ts"
16+
- "eslint.config.mjs"
17+
- "tsconfig.json"
18+
- ".github/workflows/vitest.yml"
2119

2220
permissions:
2321
contents: read
@@ -31,10 +29,12 @@ jobs:
3129
- name: Setup Vite+
3230
uses: voidzero-dev/setup-vp@be55d5df2da88a2387a2e6764871ca9e5387e187 # v1
3331
with:
34-
node-version: '24'
32+
node-version: "24"
3533
cache: true
3634
- name: Install dependencies
3735
run: vp install
36+
- name: Install Playwright browsers
37+
run: vp exec playwright install --with-deps chromium
3838
- name: Run vp test
3939
run: vp test run
4040
env:

.gitignore

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
1-
# Nuxt dev/build outputs
2-
.output
1+
# Vite / vuerend dev and build outputs
2+
.cache
3+
dist
34
.data
5+
6+
# Legacy generated outputs
7+
.output
48
.nuxt
59
.nuxtrc
610
.nitro
7-
.cache
8-
dist
911

1012
# Node dependencies
1113
node_modules

.npmrc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
auto-install-peers=false

AGENTS.md

Lines changed: 49 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,13 @@
11
# AGENTS Guide (vuefes-japan-speakers)
22

3-
このドキュメントは、本リポジトリで作業するエージェントや貢献者向けの実務ガイドです。セットアップ、構成、よくある変更、検証、デプロイの要点をまとめています
3+
このドキュメントは、本リポジトリで作業するエージェントや貢献者向けの実務ガイドです。セットアップ、構成、よくある変更、検証の要点をまとめています
44

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

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

1312
## 前提・セットアップ
1413

@@ -26,44 +25,47 @@ vp config
2625

2726
## よく使うコマンド
2827

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` |
28+
| 用途 | 推奨コマンド | npm script |
29+
| ------------- | ------------------ | -------------------- |
30+
| 開発サーバ | `vp run dev` | `pnpm dev` |
31+
| ビルド | `vp run build` | `pnpm build` |
32+
| 静的生成 | `vp run generate` | `pnpm generate` |
33+
| プレビュー | `vp run preview` | `pnpm preview` |
34+
| Lint | `vp lint .` | `pnpm vp:lint` |
35+
| Format | `vp fmt .` | `pnpm vp:fmt` |
36+
| Format 確認 | `vp fmt . --check` | - |
37+
| Type Check | `vp check` | `pnpm vp:check` |
38+
| Test | `vp test run` | `pnpm vp:test` |
39+
| Test(watch) | `vp test` | `pnpm vp:test:watch` |
4140

4241
作業前後の検証は、変更内容に応じて `vp lint .``vp fmt . --check``vp check``vp test run` を組み合わせます。
4342

4443
## ディレクトリ構成(要点)
4544

4645
- `app/`
47-
- `app.vue`: ルート、SEO、フォント、アイコンなどの共通設定
48-
- `pages/`: トップ、年別一覧、スピーカー詳細ページ
46+
- `app.ts`: vuerend アプリとルート定義
47+
- `routes/`: ルートコンポーネント
48+
- `islands/`: クライアントで hydrate するページ island
49+
- `island-definitions.ts`: island 定義
50+
- `islands.ts`: クライアント island レジストリ
4951
- `components/`: ヘッダー、フッター、マストヘッド、一覧・タイムライン、フィルタ UI
5052
- `composables/`: `useVfjsI18n``useColorScheme`、スピーカー取得・絞り込みロジック
5153
- `utils/`: 年判定、文字列ソート、スピーカー集約などのユーティリティ
5254
- `assets/css/main.css`: Tailwind 読み込み、フォント、カラートークン、フォーカススタイル
5355
- `server/`
54-
- `api/`: `/api/speakers``/api/speakers/[year]`
55-
- `data/`: 年別スピーカーデータと集約ロジック
56+
- `data/`: 年別スピーカーデータ(`speakers-YYYY.ts`)と集約ロジック
5657
- `types/`: `SpeakerInfo``SpeakerWithYear``YEARS` などの共有型
5758
- `public/`: ロゴ、favicon、OG 画像などの静的ファイル
5859
- `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 設定
60+
- `vite.config.ts`: Vite / vuerend / Vite+ の設定
61+
- `vitest.config.ts`: Vitest Browser Mode(Playwright / Chromium)の設定
62+
- `eslint.config.mjs`, `tsconfig.json`: ツール設定
6263

63-
## API とデータ
64+
## ルートとデータ
6465

65-
- 全件: `server/api/speakers.ts`
66-
- 年別: `server/api/speakers/[year].ts`
66+
- 全件: `app/app.ts``/` ルートで `getAllSpeakersWithYear()` を渡す
67+
- 年別: `app/app.ts``/:year` ルートで `getSpeakersByYear(year)` を渡す
68+
- スピーカー別: `app/app.ts``/speakers/:name` ルートで `getSpeakerTalks(name)` を渡す
6769
- データ源: `server/data/speakers-YYYY.ts`
6870
- 集約: `server/data/index.ts`
6971
- 有効年: `types/index.ts``YEARS`
@@ -75,16 +77,20 @@ vp config
7577
- `server/data/speakers-YYYY.ts` を作成し、`SpeakerInfo[]` に沿ってデータを定義する。
7678
- `server/data/index.ts` に import と `speakersByYear` のエントリを追加する。
7779
- `types/index.ts``YEARS` に年を追加する。UI の年表示はこの値を参照します。
78-
- `server/api/speakers/[year].test.ts` の有効年・エラーメッセージ期待値を更新する
80+
- `server/data/index.test.ts` や該当 island のテストで props と表示が期待通りか検証する
7981
- 必要に応じて `README.md` の参考リンクも更新する。
8082
- `/``/[year]``/speakers/[name]` で表示とリンクを確認する。
8183

8284
## UI/ページの要点
8385

8486
- ルーティング:
85-
- `app/pages/index.vue`: 全体ビュー。タイムライン表示と一覧表示を切り替えます。
86-
- `app/pages/[year]/index.vue`: 年別一覧ページ
87-
- `app/pages/speakers/[name]/index.vue`: スピーカー詳細ページ
87+
- `app/routes/HomeRoute.ts`: 全体一覧ページ
88+
- `app/routes/YearRoute.ts`: 年別一覧ページ
89+
- `app/routes/SpeakerRoute.ts`: スピーカー詳細ページ
90+
- ページ island:
91+
- `HomePageIsland.vue`: 全体一覧のインタラクション
92+
- `YearPageIsland.vue`: 年別一覧のインタラクション
93+
- `SpeakerPageIsland.vue`: スピーカー詳細のインタラクション
8894
- 主要コンポーネント:
8995
- `AppHeader.vue`: ナビゲーション、言語切替、配色切替
9096
- `AppMasthead.vue`: トップページの概要・統計表示
@@ -96,6 +102,7 @@ vp config
96102
- トップページの view は `localStorage('vfjs:view')` に保存されます。
97103
- density は `localStorage('vfjs:density')` に保存されます。
98104
- 言語は `localStorage('vfjs:lang')` に保存されます。
105+
- スタイル: Tailwind CSS 4 ユーティリティ + CSS カスタムプロパティ(`var(--paper)`, `var(--ink)`, `var(--accent)` 等)
99106

100107
## カラースキーム
101108

@@ -113,7 +120,7 @@ vp config
113120
## テスト
114121

115122
- ランナー: Vitest(Vite+ 経由)
116-
- DOM: Nuxt テスト環境 + happy-dom
123+
- 実行環境: Vitest Browser Mode(Playwright / Chromium)
117124
- 設定: `vitest.config.ts`
118125
- テスト位置:
119126
- `app/**.test.ts`
@@ -129,8 +136,9 @@ vp test run
129136
### テスト方針
130137

131138
- ユニットテストは入出力と副作用の最小検証に集中する。
132-
- API ルートは有効値、境界値、異常系を確認する。
133-
- 年追加時は `YEARS`、API のエラーメッセージ、UI 側の年表示が連動しているか確認する。
139+
- データ取得ロジックは有効値、境界値、異常系を確認する。
140+
- 年追加時は `YEARS`、データ集約、UI 側の年表示が連動しているか確認する。
141+
- Browser Mode で落ちる場合は、まず `vitest.config.ts``browser` 設定と Playwright のブラウザ導入状況を確認する。
134142

135143
## 型チェックと lint
136144

@@ -152,7 +160,7 @@ vp test run
152160

153161
### コンポーネントを追加
154162

155-
- `app/components/` に追加し、該当ページで利用する
163+
- `app/components/` に追加し、該当ページや island で利用する
156164
- 既存の CSS カスタムプロパティと Tailwind ユーティリティに合わせる。
157165
- グローバルな見た目やフォーカススタイルは `app/assets/css/main.css` を確認する。
158166
- UI の振る舞いは小さな単位でテストする。
@@ -172,17 +180,7 @@ GitHub Actions は Vite+ セットアップ後に以下を実行します。
172180
- `vp check`
173181
- `vp test run`
174182

175-
CI の対象 path は `app/**``server/**``types/**`、各種設定ファイル、lockfile などです。ドキュメントのみの変更では一部の workflow が走らない場合があります。
176-
177-
## デプロイ
178-
179-
NuxtHub へのデプロイは以下を使います。
180-
181-
```bash
182-
vpx nuxthub deploy
183-
```
184-
185-
NuxtHub / Cloudflare 関連の依存は `pnpm-workspace.yaml``cloudflare` catalog にまとまっています。
183+
Browser Mode の test job では、テスト前に `vp exec playwright install --with-deps chromium` で Chromium を導入します。CI の対象 path は `app/**``server/**``types/**`、各種設定ファイル、lockfile などです。ドキュメントのみの変更では一部の workflow が走らない場合があります。
186184

187185
## 開発フロー(推奨)
188186

@@ -194,8 +192,8 @@ NuxtHub / Cloudflare 関連の依存は `pnpm-workspace.yaml` の `cloudflare` c
194192

195193
## トラブルシュート
196194

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 設定を確認する
195+
- Node/pnpm の不整合: `node -v``pnpm -v` を確認する
196+
- Vite+ 設定の不整合: `vp config` を再実行する
197+
- 型エラー: `vp check` で先に洗い出す。型を消してエラーを隠さない
198+
- Browser Mode のブラウザ不足: `vp exec playwright install chromium` を実行する。Linux CI では `--with-deps` も付ける
199+
- キャッシュ問題: Vite や生成物のキャッシュが怪しい場合は開発サーバを再起動する

README.md

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,8 +60,11 @@ GitHub Actions でも同じ `vp` コマンドを実行します。
6060

6161
## Deploy
6262

63+
`pnpm generate``dist/client` に静的ファイルを生成します。生成後の確認には `pnpm preview` を使います。
64+
6365
```bash
64-
vpx nuxthub deploy
66+
pnpm generate
67+
pnpm preview
6568
```
6669

6770
## License

0 commit comments

Comments
 (0)