Imported from yamanoku/vuefes-japan-speakers (
AGENTS.md). Install upstream withnpx skills add yamanoku/vuefes-japan-speakers. Copyright stays with the author.
AGENTS Guide (vuefes-japan-speakers)
このドキュメントは、本リポジトリで作業するエージェントや貢献者向けの実務ガイドです。セットアップ、構成、よくある変更、検証の要点をまとめています。
プロジェクト概要
- 目的: 歴代の Vue Fes Japan スピーカーと発表タイトルを一覧できるアーカイブサイト
- フレームワーク: vuerend(Vue 3 / Vite)
- UI/スタイル: Tailwind CSS 4 + Vue コンポーネント
- ツールチェーン: Vize(lint / format / type check)+ Vite Plus
- データ供給:
src/dataの静的データを vuerend ルートの props として渡す
前提・セットアップ
- 推奨: Node.js LTS。CI は Node.js 24 で動作します。
- パッケージマネージャー: pnpm(
package.jsonのpackageManagerを参照) - このリポジトリでは Vite Plus(
vp)経由の操作を基本にします。
curl -fsSL https://vite.plus | bash
vp install
vp config
vp install は packageManager を見て依存関係を入れます。vp config は vite.config.ts の設定を反映します。通常は install 時にも実行されますが、生成設定や Vite Plus 設定を変更した場合は手動で実行してください。
よく使うコマンド
| 用途 | 推奨コマンド |
|---|---|
| 開発サーバ | vp dev |
| Musea Gallery | vp dev 後に /__musea__ |
| ビルド | vp build |
| 静的生成 | vp build |
| プレビュー | vp preview --outDir dist/client |
| Lint | vp run lint |
| Format | vp run format |
| Format 確認 | vp run format:check |
| Type Check | vp run typecheck |
| Test | vp test run |
| Test(watch) | vp test watch |
作業前後の検証は、変更内容に応じて vp run lint、vp run format:check、vp run typecheck、vp test run を組み合わせます。
ディレクトリ構成(要点)
src/app.ts: vuerend アプリとルート定義routes/: ルートコンポーネントislands/: クライアントで hydrate するページ islandisland-definitions.ts: island 定義islands.ts: クライアント island レジストリcomponents/: ヘッダー、フッター、マストヘッド、一覧・タイムライン、フィルタ UI*.art.vue: Musea の component gallery 用 art ファイル
composables/: コンポーザブル関数集utils/: 年判定、文字列ソート、スピーカー集約などのユーティリティ関数集data/: 年別スピーカーデータ(speakers-YYYY.ts)と集約ロジックassets/css/main.css: Tailwind 読み込み、フォント、カラートークン、デフォルトスタイル
musea/: Musea 専用の preview CSS と art 用サンプルデータconfig/vite/: Vite custom plugin と Vite Plus lint/format/task 設定types/:SpeakerInfo、SpeakerWithYear、YEARSなどの共有型public/: ロゴ、favicon、OG 画像などの静的ファイルpnpm-workspace.yaml: catalog と依存バージョンの定義vite.config.ts: Vite / vuerend / Musea / Vite Plus の配線tsconfig.json,tsconfig.vize.json: TypeScript と Vize 型チェック設定
ルートとデータ
- 全件:
src/app.tsの/ルートでgetAllSpeakersWithYear()を渡す - 年別:
src/app.tsの/:yearルートでgetSpeakersByYear(year)を渡す - スピーカー別:
src/app.tsの/speakers/:nameルートでgetSpeakerTalks(name)を渡す - データ源:
src/data/speakers-YYYY.ts - 集約:
src/data/index.ts - 有効年:
types/index.tsのYEARS - パネルディスカッションは
SpeakerInfoのformat: "panel"で表現します。
現在の有効年はtypes/index.ts の YEARS で定義されています。
新しい開催年を追加するとき
src/data/speakers-YYYY.tsを作成し、SpeakerInfo[]に沿ってデータを定義する。src/data/index.tsに import とspeakersByYearのエントリを追加する。types/index.tsのYEARSに開催された年を追加する。UI の年表示はこの値を参照します。src/data/index.test.tsや該当 island のテストで props と表示が期待通りか検証する。- 必要に応じて
README.mdの参考リンクも更新する。 /、/[year]、/speakers/[name]で表示とリンクを確認する。
UI/ページの要点
- ルーティング:
src/routes/HomeRoute.vue: 全体一覧ページsrc/routes/YearRoute.vue: 年別一覧ページsrc/routes/SpeakerRoute.vue: スピーカー詳細ページ
- ページ island:
HomePageIsland.vue: 全体一覧のインタラクションYearPageIsland.vue: 年別一覧のインタラクションSpeakerPageIsland.vue: スピーカー詳細のインタラクション
- 主要コンポーネント:
AppHeader.vue: ナビゲーション、言語切替、配色切替AppMasthead.vue: トップページの概要・統計表示ChronicleView.vue: 年別タイムライン表示DirectoryView.vue: スピーカー単位の一覧。並び替えと開閉行を持ちます。SpeakerFilterBar.vue/YearFilterBar.vue: 検索・年フィルタ UIAppFooter.vue: フッター
- 表示状態:
- トップページの view は
localStorage('vfjs:view')に保存されます。 - 言語は
localStorage('vfjs:lang')に保存されます。
- トップページの view は
- スタイル: Tailwind CSS ユーティリティ
Vize / Lint / 型チェック
- Vue SFC compiler は vuerend の標準 Vue plugin を使います。
- Lint:
vp run lintで Oxlint と Vize の Vue 診断をまとめて実行します。Oxlint 単体の設定はconfig/vite/tooling.tsのlint、Vize の preset はvize.config.tsを参照します。 - Format:
vp run formatで oxfmt と Vize formatter を組み合わせて実行します。 - 型チェック:
vize check --tsconfig tsconfig.vize.jsonをvp run typecheck経由で実行します。 - Musea:
@vizejs/vite-plugin-museaを Vite plugin として有効化し、src/**/*.art.vueを/__musea__に表示します。 - Vize 関連 package は
pnpm-workspace.yamlのvizecatalog にまとめます。
テスト
- ランナー: Vitest(Vite Plus 経由)
- 実行環境: Vitest Browser Mode(Playwright / Chromium)
- 設定:
vite.config.ts - テスト位置:
src/**.test.ts
- 実行:
vp test run
ウォッチ実行は vp test watch を使います。
テスト方針
- ユニットテストは入出力と副作用の最小検証に集中する。
- データ取得ロジックは有効値、境界値、異常系を確認する。
- 年追加時は
YEARS、データ集約、UI 側の年表示が連動しているか確認する。 - Browser Mode で落ちる場合は、まず
vite.config.tsのtest.browser設定と Playwright のブラウザ導入状況を確認する。
型チェックと lint
- 型チェック:
vp run typecheck - Lint:
vp run lint - Format:
vp run format - Format 確認:
vp run format:check
型エラーを隠すための型削除や過度な型アサーションは避け、原因を直してください。
典型タスクの手順
スピーカー検索/フィルタを調整
SpeakerFilterBar.vue、YearFilterBar.vue、DirectoryView.vue、ChronicleView.vueを確認する。- 取得・絞り込みロジックが必要なら
src/composables/speaker.tsを更新する。 - スピーカー集約や日本語判定に関わる場合は
src/utils/speakerMap.ts、src/utils/stringCollate.tsも確認する。 - 影響範囲のテストを更新する。
コンポーネントを追加
src/components/に追加し、該当ページや island で利用する。- 既存の CSS カスタムプロパティと Tailwind ユーティリティに合わせる。
- グローバルな見た目やフォーカススタイルは
src/assets/css/main.cssを確認する。 - UI の振る舞いは小さな単位でテストする。
表示文言や言語切替を変更
- 文言は
src/composables/useVfjsI18n.tsのtranslationsを更新する。 jaとenの両方を揃える。- スピーカー名の英語表記はデータ側の
nameEnを確認する。
CI
GitHub Actions は Vite Plus セットアップ後に以下を実行します。
vp run lintvp run format:checkvp run typecheckvp test run
Browser Mode の test job では、テスト前に vp exec playwright install --with-deps chromium で Chromium を導入します。CI の対象 path は src/**、musea/**、config/**、types/**、各種設定ファイル、lockfile などです。ドキュメントのみの変更では一部の workflow が走らない場合があります。
デプロイ
vp build で dist/client に静的ファイルを生成します。生成後の確認には vp preview --outDir dist/client を使います。
開発フロー(推奨)
- ブランチ:
feat/*、fix/*、chore/*、docs/*など用途別に作成する。 - コミット: Conventional Commits を使う。例:
docs: update agents guide - 実装: 小さめの差分で進め、関連テストやドキュメントも合わせて更新する。
- 検証: 変更内容に応じて
vp run lint && vp run format:check && vp run typecheck && vp test runを実行する。 - レビュー: 変更点の要約、確認したコマンド、必要に応じてスクリーンショットや再現手順を添える。
トラブルシュート
- 依存関係の不整合:
vp installを実行し、必要ならvp configも実行する。 - パッケージマネージャーの確認:
package.jsonのpackageManagerを確認する。 - 型エラー:
vp run typecheckで原因を洗い出し、型定義・import・データ構造を直す。 - Vite Plus 設定の不整合:
vp configを再実行する。 - Browser Mode のブラウザ不足:
vp exec playwright install chromiumを実行する。Linux CI では--with-depsも付ける。 - キャッシュ問題: Vite や生成物のキャッシュが怪しい場合は開発サーバを再起動する。
Cursor Cloud specific instructions
このセクションは、依存インストール済みの Cloud Agent VM で作業する将来のエージェント向けの補足です。標準コマンドは上記の表(README / AGENTS)を参照してください。ここには非自明な注意点のみを記載します。
vpの PATH:vpは~/.vite-plusにインストールされ、対話シェルでは~/.bashrc経由で読み込まれます。非対話シェル(スクリプトやtmux send-keysなど)ではvpが PATH に無いことがあるので、先に. "$HOME/.vite-plus/env"を読み込んでからvpを実行してください。- 開発サーバ:
vp devはhttp://localhost:5173/(Vite のデフォルトポート)で起動します。server.portの明示設定はありません。長時間走らせる場合は tmux セッションで起動してください。 - テスト:
vp test runは Vitest の Browser Mode(Playwright / Chromium)で動きます。Chromium は環境更新スクリプト(vp exec playwright install chromium)で導入済みです。ブラウザが見つからないエラーが出たら同コマンドを再実行してください。 - Node: 既定の環境 Node(v22 系 LTS)で lint / typecheck / test / build / dev すべて動作します。CI は Node 24 です。
- クライアント遷移の描画: dev サーバでスピーカー詳細(
/speakers/:name)へクライアント遷移する際、一瞬ローディング表示(白いキューブ)を挟んでから描画されます。最終描画は正常です(curlでも各ルートは 200 を返します)。 - ビルド確認:
vp buildは SSG で全ルート(現在 156 ルート)をdist/clientに生成します。生成物の確認はvp preview --outDir dist/client。