プロジェクト

全般

プロフィール

機能 #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_* 全列)

エージェント ちゃん さんが15日前に追加. 15日前に更新.

ステータス:
完了
優先度:
通常
担当者:
対象バージョン:
開始日:
2026/06/23
期日:
2026/06/23
進捗率:

100%

予定工数:

説明

目的

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 とのスキーマ/値照合。

関連

  • #366(ノーツレーダーフル計算)に依存
  • #352 の自前スキーマを置換(事実上の再設計)。

関連するチケット 1 (0件未完了1件完了)

次のチケットに後続 Ferrhythm - 機能 #366: ferrhythm-chart: ノーツレーダー(チャート解析指標)計算完了いづ さん2026/06/222026/06/22

操作

エージェント ちゃん さんが15日前に更新 操作 #1

  • 期日2026/06/23 にセット
  • 開始日2026/06/21 から 2026/06/23 に変更
  • 次のチケットに後続 機能 #366: ferrhythm-chart: ノーツレーダー(チャート解析指標)計算 を追加

エージェント ちゃん さんが15日前に更新 操作 #2

  • ステータス未着手 から 実装中 に変更
  • 進捗率0 から 10 に変更

実装に着手しました。

  • ブランチ: feature/368-beatoraja-songdata-schema
  • 対応方針: ferrhythm-db のスキーマを beatoraja songdata.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日前に更新 操作 #3

  • ステータス実装中 から 完了 に変更
  • 進捗率10 から 100 に変更

対応が完了しました。

概要

ferrhythm-db のスキーマを beatoraja songdata.db と完全互換に全面再設計し、生成 DB を beatoraja と相互に読み書きできるようにした。#352 の自前スキーマを beatoraja 互換スキーマへ置換。

変更点

  • スキーマ: beatoraja 互換の folder(PK path) / song(PK pathmd5/sha256 NOT NULL、84 の feature_* REAL 列を beatoraja の列名・型・順序どおり) / information(PK sha256) を採用。差分スキャン用の内部 scan_cache(path,size,mtime,sha256) を追加し #352 の差分スキャンを維持。user_version=2 への移行でレガシーテーブルを DROP。
  • 識別子(新 identity.rs): beatoraja SongUtils.crc32 を忠実移植(poly 0xEDB88320path+"\\\0"・符号拡張・符号なし先頭ゼロ無し hex・e2977170 番兵・スキャンルート接頭辞除去)。
  • モデル/CRUD: FolderRow/SongRow/InformationRow/ScanCacheRowid を廃し path/sha256 キー。SongRow::from_chart が Chart→song 列(mode id・judge・feature/content ビット・length・notes・min/max BPM・folder/parent CRC32)を写像し、#366 analyze_chart 出力の全 feature_* をコピー。
  • スキャン: チャート毎に analyze_chart を 1 回呼び feature_*information を配線。並列解析・プルーニング・ルート分離を維持。
  • chart 側: ChartAnalysis.last_time_ms を加算的に公開(song.length 用)。
  • 独自 scores テーブル・ScoreRecordferrhythm-score 依存を撤去(スコア保存は将来チケットへ)。
  • 変更ファイル: crates/ferrhythm-db/{schema,model,db,scan,lib}.rs・新規 identity.rsCargo.tomlcrates/ferrhythm-chart/src/analysis/mod.rsCargo.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)

他の形式にエクスポート: PDF Atom