操作
機能 #368
完了機能 #340: [Phase 1] 非依存コア(パーサ/スキンIR/DB/タイミング)
ferrhythm-db: beatoraja songdata.db スキーマ完全互換化(folder/song/information・feature_* 全列)
機能 #368:
ferrhythm-db: beatoraja songdata.db スキーマ完全互換化(folder/song/information・feature_* 全列)
説明
目的¶
ferrhythm-db のスキーマを beatoraja フォーク(/workspaces/beatoraja)の songdata.db と完全互換にし、生成した DB ファイルを beatoraja と相互に読書できるようにする。
背景¶
#352 では Ferrhythm 自前スキーマ(folders/songs/scores/song_analysis、列名 radar_notes 等)でマージ済み。しかしユーザ要件「beatoraja songdata.db と完全互換」により、beatoraja フォークのスキーマ(folder/song/information(+score系)、列名 feature_notes_density 等・約 80 の feature_*/*_radar)を採用する必要がある。本チケットで #352 の自前スキーマを beatoraja 互換スキーマへ置換する。
スコープ(設計時に詳細確定)¶
- beatoraja の
folder/song/information(+必要な score 系) テーブル DDL をSQLiteSongDatabaseAccessor.javaに合わせて採用(列名/型/主キー/インデックス)。 -
songテーブルの6主軸+約 80 のfeature_*/feature_*_radar列、informationテーブルのn/ln/s/ls/total/density/peakdensity/enddensity/mainbpm/distribution/speedchange/lanenotes。 - #366 の計算出力(フル feature_* + information)を scan 時に書き込む配線。
- distribution/speedchange/lanenotes は beatoraja の直列化形式(base36 等)に合わせる。
- beatoraja が生成した実 songdata.db を読める・逆に beatoraja が読めることの検証。
- #352 の差分スキャン設計(path,size,mtime)は維持。
検証(コンテナ)¶
cargo test グリーン。beatoraja 生成の songdata.db とのスキーマ/値照合。
関連¶
エージェント ちゃん さんが15日前に更新
- 期日 を 2026/06/23 にセット
- 開始日 を 2026/06/21 から 2026/06/23 に変更
- 次のチケットに後続 機能 #366: ferrhythm-chart: ノーツレーダー(チャート解析指標)計算 を追加
エージェント ちゃん さんが15日前に更新
- ステータス を 未着手 から 実装中 に変更
- 進捗率 を 0 から 10 に変更
実装に着手しました。
- ブランチ:
feature/368-beatoraja-songdata-schema - 対応方針:
ferrhythm-dbのスキーマを beatorajasongdata.db互換へ全面再設計し、folder/song(約80のfeature_*)/informationテーブルを beatoraja DDL に合わせて採用。#366 のanalyze_chart出力(feature_* + information)を scan 時に書き込み配線する。path/folder 識別子は beatoraja の相対パス+CRC32 方式に忠実化。#352 の差分スキャン (path,size,mtime) は内部scan_cacheテーブルで維持。独自scoresテーブルは削除し将来チケットへ。
エージェント ちゃん さんが15日前に更新
- ステータス を 実装中 から 完了 に変更
- 進捗率 を 10 から 100 に変更
対応が完了しました。
概要¶
ferrhythm-db のスキーマを beatoraja songdata.db と完全互換に全面再設計し、生成 DB を beatoraja と相互に読み書きできるようにした。#352 の自前スキーマを beatoraja 互換スキーマへ置換。
変更点¶
- スキーマ: beatoraja 互換の
folder(PKpath) /song(PKpath、md5/sha256NOT NULL、84 のfeature_*REAL 列を beatoraja の列名・型・順序どおり) /information(PKsha256) を採用。差分スキャン用の内部scan_cache(path,size,mtime,sha256) を追加し #352 の差分スキャンを維持。user_version=2への移行でレガシーテーブルを DROP。 - 識別子(新
identity.rs): beatorajaSongUtils.crc32を忠実移植(poly0xEDB88320・path+"\\\0"・符号拡張・符号なし先頭ゼロ無し hex・e2977170番兵・スキャンルート接頭辞除去)。 - モデル/CRUD:
FolderRow/SongRow/InformationRow/ScanCacheRow。idを廃しpath/sha256キー。SongRow::from_chartが Chart→song列(mode id・judge・feature/content ビット・length・notes・min/max BPM・folder/parent CRC32)を写像し、#366analyze_chart出力の全feature_*をコピー。 - スキャン: チャート毎に
analyze_chartを 1 回呼びfeature_*+informationを配線。並列解析・プルーニング・ルート分離を維持。 - chart 側:
ChartAnalysis.last_time_msを加算的に公開(song.length用)。 - 独自
scoresテーブル・ScoreRecord・ferrhythm-score依存を撤去(スコア保存は将来チケットへ)。 - 変更ファイル:
crates/ferrhythm-db/{schema,model,db,scan,lib}.rs・新規identity.rs・Cargo.toml・crates/ferrhythm-chart/src/analysis/mod.rs・Cargo.lock(計 9 件)
テスト¶
-
cargo test(workspace): 成功(全 23 スイート green / ferrhythm-db 39・ferrhythm-chart 75 含む) -
cargo clippy --all-targets/cargo fmt --all -- --check: 成功(0 警告 / clean)
残課題(Windows ホスト検証)¶
- 実 beatoraja 生成
songdata.dbとの相互読み書き照合(日本語フォルダ名含む)。mode/judge/feature(RANDOM/UNDEFINEDLN 未対応)/charthashの近似値と CRC32 の文字コード依存(UTF-8 vs MS932)の妥当性。
関連 MR¶
- !11 (feature/368-beatoraja-songdata-schema → develop)
操作