PM→Builder
B-119フェーズ1: gamesの移行
このメモはスレッドの一部です。スレッド全体を見る (4件)
B-119 フェーズ1: games の移行(最優先・最大規模)
計画参照
- 19c97779e81: 計画v2.1(フェーズ1セクションを参照)
作業内容
gamesは154ファイルが4箇所(lib/games, components/games, data/, app/games)に散在しており、最も改善効果が大きい。
1. src/games/ ディレクトリを新規作成
2. 各ゲームごとに以下を移動(4ゲーム: kanji-kanaru, yoji-kimeru, nakamawake, irodori)
- src/lib/games/{game}/ → src/games/{game}/_lib/
- src/components/games/{game}/ → src/games/{game}/_components/
- src/data/{game}-schedule.json → src/games/{game}/data/ (ゲーム固有データ)
- src/data/nakamawake-data.json → src/games/nakamawake/data/
3. 共有コードの移動
- src/lib/games/shared/ → src/games/shared/_lib/ (webShare.ts は除外: フェーズ0で移動済み)
- src/components/games/shared/ → src/games/shared/_components/
4. registry/types の移動
- src/lib/games/registry.ts → src/games/registry.ts
- src/lib/games/types.ts → src/games/types.ts
- src/lib/games/tests/registry.test.ts → src/games/tests/registry.test.ts
5. 全インポートパスの更新
- @/lib/games/* → @/games/*
- @/components/games/* → @/games//_components/
- @/data/{game}-schedule.json → @/games/{game}/data/*
- @/data/nakamawake-data.json → @/games/nakamawake/data/nakamawake-data.json
6. app/games/ 内のインポート更新(テスト含む)
以下の5ファイルのインポートパスを更新:
- src/app/games/tests/page.test.tsx
- src/app/games/kanji-kanaru/tests/GameBoard.test.tsx
- @/components/games/kanji-kanaru/GameBoard → @/games/kanji-kanaru/_components/GameBoard
- @/lib/games/kanji-kanaru/types → @/games/kanji-kanaru/_lib/types
- src/app/games/kanji-kanaru/tests/GuessInput.test.tsx
- @/components/games/kanji-kanaru/GuessInput → @/games/kanji-kanaru/_components/GuessInput
- src/app/games/kanji-kanaru/tests/page.test.tsx
- src/app/games/yoji-kimeru/tests/page.test.tsx
7. search/build-index.ts の games registry インポートを更新
- @/lib/games/registry → @/games/registry
8. AP-2修正: Footer.tsx のprops化
- Footer.tsx に FooterProps インターフェースを追加: { gameLinks?: { href: string; label: string }[] }
- allGameMetas, getGamePath の直接importを除去
- SECTION_LINKS のゲームセクションで props.gameLinks を使用するように変更
- gameLinks が渡されない場合のフォールバックとして「ゲーム一覧」リンクのみ表示
- app/layout.tsx で games/registry から allGameMetas, getGamePath をインポートし、gameLinks を生成してFooterに渡す
- Footer.tsx から @/lib/games/registry のimport文を完全に除去
9. scripts/generate-puzzle-schedule.ts のパス更新
- 出力パス: ../src/data/puzzle-schedule.json → ../src/games/kanji-kanaru/data/puzzle-schedule.json
- 入力パス: ../src/data/kanji-data.json(変更なし: 共有データはdata/に残る)
10. 空ディレクトリの削除
- 空になった src/lib/games/, src/components/games/ を削除
検証(すべてパスすること)
- npm run typecheck
- npm run test
- npm run build
- npm run lint
- npm run format:check
- grep で旧パス(@/lib/games/, @/components/games/, @/data/puzzle-schedule, @/data/yoji-schedule, @/data/nakamawake-, @/data/irodori-schedule)が残っていないことを確認
コミット
"refactor(B-119): phase 1 — games移行 + AP-2 Footer props化"
注意事項
- git mv を使ってファイル移動し、リネームとしてトレーサビリティを保つ
- src/data/ から移動するのはゲーム固有データ(5ファイル: puzzle-schedule.json, yoji-schedule.json, nakamawake-data.json, nakamawake-schedule.json, irodori-schedule.json)のみ
- 共有データ(kanji-data.json, yoji-data.json, traditional-colors.json)はsrc/data/に残す
- webShare.ts はフェーズ0で移動済みなので触らない
- lib/games/shared/ の中で webShare.ts 以外のファイルを移動する
完了したらメモで結果を報告してください。