操作
リファクタ #211
完了ロボライバル機能を本体から削除し izu-IR 側に移管する
リファクタ #211:
ロボライバル機能を本体から削除し izu-IR 側に移管する
説明
refs #195
#187 の方針「ロボライバル機能を IR 側に」に従い、beatoraja 本体のローカルロボライバル実装を整理・削除する。izu-IR サーバー(izu-ir #194)がロボライバルを提供し、plugin(#195)の getRivals がサーバーから取得するため、本体内蔵の RoboRival は置き換え可能。
背景¶
- 現状 beatoraja にはローカルの偽 IR としてのロボライバル機能がある(
RoboRivalIRConnectionなど)。 - izu-IR 移管後はサーバーがロボライバルスコアを返すため、本体側の重複実装は不要になる見込み。
影響範囲(要整理)¶
grep -ri RoboRival src で本体 18 ファイル + テスト 4 ファイルに分布。主な箸所:
- IR:
ir/RoboRivalIRConnection.java,ir/RankingData.java - ランチャー UI:
launcher/RoboRivalConfigurationView.java/.fxml,launcher/PlayConfigurationView.java/.fxml - 設定/永続化:
RoboRivalConfig.java,PlayerConfig.java,PlayerConfigPersistenceDto.java,PlayerConfigValidator.java,RivalDataAccessor.java - プレイ/ターゲット:
play/RoboRivalRotationTargetProperty.java,play/TargetProperty.java,play/BMSPlayer.java,MainController.java - リザルト:
result/MusicResult.java,result/CourseResult.java - テスト:
RoboRivalTest.java,play/RoboRivalRotationTargetPropertyTest.java,launcher/LauncherFxmlLoadSmokeTest.java,PlayerConfigFileCompatibilityTest.java
やること(要仕様決定)¶
- 本体のロボライバル UI・設定・コネクション(
RoboRivalIRConnection他)を削除するか、izu-IR 経由に一本化するかを決定。 - **ターゲット表示(RIVAL/ロボライバルをプレイ中ターゲットにする機能)**を残すかを要決定。残す場合は IR から取得したライバルスコアをターゲット源にする形へ組み替えが必要。
-
PlayerConfig永続化の互換性(PlayerConfigPersistenceDto/PlayerConfigFileCompatibilityTest)に注意し、既存設定ファイルを壊さない移行を検討。 - 関連テストの削除/更新。
注意¶
- 影響範囲が広く(プレイ/リザルト/設定永続化)大きなリファクタ。着手時にサブタスク分解推奨。
- 本体での RoboRival 削除は IR 有効化(#210)・ izu-IR ロボライバル取得の動作確認後に行うのが安全。
関連¶
- #187(仕様ブレスト: ロボライバルを IR 側に)
- #210(IR 有効化)
- izu-ir #194(server の ranking/rival/robo-rival API)ーizu-ir #195(plugin getRivals)
エージェント ちゃん さんが22日前に更新
- 期日 を 2026/06/16 にセット
- 開始日 を 2026/06/15 から 2026/06/16 に変更
- 次のチケットに後続 機能 #210: IR機能を有効化する(IRConnectionManager.isIRAvailable を true に) を追加
エージェント ちゃん さんが21日前に更新
- ステータス を 未着手 から 実装中 に変更
- 進捗率 を 0 から 10 に変更
実装に着手しました。
- ブランチ:
feature/211 - 対応方針: ローカル疑似IR「ロボライバル」一式(
RoboRivalIRConnection・RoboRivalConfig・設定UI・永続化・各クラスの特例分岐)を削除し izu-IR に一本化する。プレイ中ターゲットROBO_RIVAL_ROTATIONはRivalDataAccessor(IR取得ライバルスコア)を源とするため存続させ izu-IR ライバルへ転用する。PlayerConfig永続化はignoreUnknownFieldsにより旧 config 互換を維持。
エージェント ちゃん さんが21日前に更新
- ステータス を 実装中 から 完了 に変更
- 進捗率 を 10 から 100 に変更
対応が完了しました。
概要¶
ロボライバル機能を izu-IR サーバー側へ移管する方針(#187 確定 / #210 で IR 有効化済)に従い、beatoraja 本体のローカル疑似IR「ロボライバル」実装一式を削除し izu-IR に一本化した。
削除したもの(ローカル疑似IR一式)¶
-
ir/RoboRivalIRConnection.java(ネットワークなしの疑似IR)、RoboRivalConfig.java - ランチャー「Robo Rival」設定タブ:
launcher/RoboRivalConfigurationView.java/.fxml+PlayConfigurationView.fxml/.javaのタブ・配線 -
PlayerConfig.roboRivalフィールド・getter/setter、PlayerConfigPersistenceDtoの永続化、PlayerConfigValidator.validateRoboRival - RoboRival 特例分岐:
MainController(IRStatus 組み立て)、RivalDataAccessor(instanceof RoboRivalIRConnection)、ir/RankingData(robo-self ローカルスコアマージ)、result/MusicResult・result/CourseResult(送信抑止・ランキング取得・getResultRankingIR簡略化)
維持したもの(izu-IR ライバルへ転用)¶
- プレイ中ターゲット
ROBO_RIVAL_ROTATION(play/RoboRivalRotationTargetProperty/play/BMSPlayerのローテーション処理)。RivalDataAccessor(IR取得ライバル)を源とするため izu-IR ライバルにそのまま機能する。
互換性¶
PlayerConfigPersistenceDto.read の ignoreUnknownFields=true により、旧 config.json の roboRival ブロックは無視され安全にロードされる(前方互換)。回帰テストを追加。
テスト¶
-
xvfb-run -a ./gradlew test: 成功(FXML を実ロードするLauncherFxmlLoadSmokeTestを含む全テスト green) - テスト変更:
RoboRivalTest.java削除、LauncherFxmlLoadSmokeTestから robo 専用ケース/ヘルパー除去+tab非存在アサーション追加、PlayerConfigFileCompatibilityTestに旧roboRivalブロックの前方互換回帰テストを追加。RoboRivalRotationTargetPropertyTestは変更なし。 - 変更ファイル: 計 17 件
関連 MR¶
- !46 (feature/211 → develop)
操作