機能 #380
完了機能 #344: [Phase 4] レンダリングと UI/スキン描画
beatoraja スキン: IR 拡張+JSON スキンパーサ
説明
目的¶
beatoraja スキンを表示するための第一段。内部スキン IR を beatoraja のスキンオブジェクトモデルへ拡張し、JSON 形式 (.json) スキンをパースして IR へ写像する。#360 で分割された beatoraja スキンエンジンの 1/3。
スコープ¶
- beatoraja スキンオブジェクトモデルの IR 拡張:
header/destination(複数アニメ keyframe) /image/imageset/value(number) /text/slider/graph/judge/gauge/bga/noteなど。LR2 IR とは別系統で無損失保持(既存ferrhythm-skinの方針を踏襲)。 - beatoraja JSON スキン形式のパーサ(
serde_json)。 -
op/timer/value/offset等は素データ保持し、意味付け・描画は後続チケットへ委譲。
スコープ外¶
- Lua スキン実行(
.luaskin/.lua)→ 次チケット。 - timer/value/option ID のゲーム状態への接続→ 3 つ目のチケット。
検証¶
コンテナ TDD(パーサ/IR 写像)。実描画は Windows ホスト。
担当¶
Codex 委譲(IR+パーサのみ、frontend-design 不要)。
関連¶
#360 で「画面の状態遷移+ネイティブ UI」を実装済み。本系列は #344 Phase 4 内で beatoraja スキン描画を完成させる。
エージェント ちゃん さんが14日前に更新
- ステータス を 未着手 から 却下 に変更
ネイティブ UI を主体とする方針転換(2026-06-22 ユーザー決定)により、samples/skin/ の beatoraja スキンは使用せず、beatoraja スキンパーサ・エンジンは不要化したため 却下。将来 beatoraja スキン対応が必要になった際に再起票する。
エージェント ちゃん さんが14日前に更新
- ステータス を 却下 から 未着手 に変更
却下を取り消して復活。
2026-06-22 のネイティブUI主体方針を再転換。ネイティブUI(#383)の作り込みが期待に届かず、beatoraja スキン(Lua含む)を完全パースして完全移植する方針に変更(ユーザー指示)。ネイティブUI描画は破棄、#383 のウィンドウ/入力/音声配線は #382 のスキン描画統合で流用。本チケット(IR拡張+JSONパーサ)から着手。
エージェント ちゃん さんが14日前に更新
- ステータス を 未着手 から 実装中 に変更
- 進捗率 を 0 から 10 に変更
実装に着手しました。
- ブランチ:
feature/380-beatoraja-skin-ir - 対応方針:
ferrhythm-skinに beatoraja スキンオブジェクトモデルのIR(LR2 IRとは別系統・無損保持)を新設し、beatorajaの寛容JSON方言(//コメント・配列要素間のカンマ欠落・Shift-JIS)を読む専用リーダで IR へ写像。Lua実行・ID接続・描画は後続(#381/#382)。Codex委譲。
エージェント ちゃん さんが14日前に更新
- ステータス を 実装中 から 完了 に変更
- 進捗率 を 10 から 100 に変更
対応が完了しました。
概要¶
beatoraja スキンエンジンの第一段。beatoraja のスキンオブジェクトモデルを無損失で表す内部 IR と、それを生成する寛容 JSON パーサを ferrhythm-skin に新設。Lua 実行・描画・ID 写像は後続(#381/#382)。
変更点¶
-
beatoraja::model:json/JsonSkin.javaを忠実 1:1 移植(Skin+全 36 ネスト型)。無損失・既定値保持・Integer.MIN_VALUE未設定をOption<i32>・ref/timer/op は生 int 保持(#382 境界)。 -
beatoraja::json:libgdxJsonReader相当の寛容リーダ(//・/* */コメント/要素間カンマ省略/末尾カンマ/無クォート・単一クォート)。未知キーはwarningsへ退避。 -
parse_json_skin(UTF-8/Shift-JIS フォールバック)、SkinError::Json追加、クレートルートへ配線。 - 変更ファイル:
crates/ferrhythm-skin/src/beatoraja/{model,json,mod}.rs新設、error.rs/lib.rs修正(4 件)。
テスト¶
-
cargo test -p ferrhythm-skin: 成功(35 件、serde feature 時 36 件)。寛容 JSON 単体+写像+env 駆動の実スキンパース。実decide.json(Shift-JIS+カンマ省略+コメント)を type=6/1920x1080 で確認。 -
cargo clippy --all-targets -- -D warnings/cargo fmt --all -- --check: 成功。ワークスペース全 27 スイート緑。
関連 MR¶
- !25 (feature/380-beatoraja-skin-ir → develop)