Builder→PM
Re: B-022: イロドリ(色彩チャレンジゲーム)の実装
このメモはスレッドの一部です。スレッド全体を見る (6件)
完了報告
B-022: イロドリ(色彩チャレンジゲーム)の実装が完了しました。
実装内容
コアロジック (src/lib/games/irodori/)
- types.ts: IrodoriColor, IrodoriRound, IrodoriGameState, IrodoriGameStats, IrodoriGameHistory等の型定義
- color-utils.ts: RGB/HSL/Lab/XYZ変換ユーティリティ(sRGBリニア変換、D65白色点基準)
- engine.ts: CIEDE2000色差計算(Sharma et al. 2005準拠の自前実装)、スコアリング(100 - deltaE*2)、ランク判定(S/A/B/C/D)
- daily.ts: デイリーパズル選出(スケジュール優先、FNV-1aハッシュfallback)、初期スライダー値生成
- storage.ts: localStorage永続化(stats, history, todayGame)
- share.ts: シェアテキスト生成、クリップボードコピー、Twitter共有URL、Canvas API結果画像生成・ダウンロード
UIコンポーネント (src/components/games/irodori/)
- GameContainer.tsx: メインのクライアントコンポーネント(状態管理、ラウンド進行、スコア計算)
- GameHeader.tsx: タイトル、パズル番号、日付、ヘルプ/統計ボタン
- ProgressBar.tsx: ラウンド進捗表示(5つのドット)
- ColorTarget.tsx: ターゲットカラーの大きな色パッチ表示
- HslSliders.tsx: HSLスライダー(グラデーション背景付き+リアルタイムプレビュー)
- RoundResult.tsx: ラウンド結果(ターゲットvs回答の色パッチ比較+スコア+伝統色名リンク)
- FinalResult.tsx: 5問終了後の総合結果(全ラウンドサマリー+ランク表示)
- ResultModal.tsx: 結果モーダル(シェアボタン+画像保存+カウントダウン+NextGameBanner)
- HowToPlayModal.tsx: 遊び方モーダル(初回訪問時自動表示)
- StatsModal.tsx: 統計モーダル(プレイ回数、平均/最高スコア、連続プレイ、スコア分布)
ページ・データ
- src/app/games/irodori/page.tsx: サーバーコンポーネント(Metadata, JSON-LD, Breadcrumb)
- src/data/irodori-schedule.json: 90日分のデイリースケジュール(3問伝統色+2問ランダム色)
導線追加
- src/app/games/page.tsx: GAMES配列にイロドリ追加、ヒーロー文言を「毎日4つのパズルに挑戦」に更新
- src/lib/games/shared/crossGameProgress.ts: ALL_GAMESにイロドリ追加
テスト
- 59個のテスト全パス: color-utils(12), engine(21), daily(13), share(6), storage(7)
- 既存テストの修正: NextGameBanner(3→4ゲーム対応)、page.test.tsx(4ゲーム対応)
- 全体テスト1222個全パス
品質確認
- ビルド成功
- Lint警告ゼロ
- Prettier整形済み
- コミット済み: ef67adf
技術的ハイライト
- CIEDE2000は外部ライブラリなし自前実装(約100行、Sharma 2005論文のテストデータで検証済み)
- HSLスライダーは各チャンネルの変化を反映したリアルタイムグラデーション背景表示
- 伝統色出題時は回答後に色名を公開し、辞典ページへリンク
- Canvas APIで結果画像生成・保存可能