Skip to content

DataRepositoryの段階的廃止計画 #35

@harutiro

Description

@harutiro

概要

DataRepository(UserDefaultsベース)は移行元の旧実装であり、現在はSwiftDataRepositoryが主要な永続化層となっています。データ移行完了後、DataRepositoryを段階的に廃止します。

背景

  • DataRepositoryとSwiftDataRepositoryの両方が存在し、一部機能が重複
  • DataRepositoryはUserDefaultsを使用(移行元)
  • SwiftDataRepositoryはSwiftDataを使用(移行先)
  • PreferenceRepositoryもUserDefaultsを使用しており、責務が重複
  • DataMigrationUsecaseによって移行が進行中

現状の構成

Repository 永続化方式 主な責務 状態
DataRepository UserDefaults レガシーデータ管理 移行元
SwiftDataRepository SwiftData 主要データ永続化 メイン
PreferenceRepository UserDefaults ユーザー設定・状態管理 アクティブ

重複している機能

キャリブレーションデータ管理

DataRepositoryProtocol:

  • saveCalibrationResults(_:)
  • loadCalibrationResults()
  • saveCalibrationData(_:)
  • loadCalibrationData()
  • deleteCalibrationData(for:)
  • deleteAllCalibrationData()

SwiftDataRepositoryProtocol:

  • saveCalibrationData(_:)
  • loadCalibrationData()
  • loadCalibrationData(for:)
  • deleteCalibrationData(for:)
  • deleteAllCalibrationData()
  • saveMapCalibrationData(_:)
  • loadMapCalibrationData()

センシングセッション管理

両Repositoryでセンシングセッション関連のメソッドが重複

段階的廃止計画

Phase 1: 移行完了確認(優先度:高)

作業内容:

  • DataMigrationUsecaseの実行状況確認
  • すべてのユーザーデータがSwiftDataに移行済みか確認
  • DataRepositoryを使用している箇所を特定

受け入れ条件:

  • DataMigrationUsecaseが正常に完了していること
  • SwiftDataRepositoryに全データが移行されていること

Phase 2: 非推奨化(優先度:中)

作業内容:

@available(*, deprecated, message: "Use SwiftDataRepository instead. Will be removed in version 2.0")
protocol DataRepositoryProtocol {
    // ...
}

@available(*, deprecated, message: "Use SwiftDataRepository instead. Will be removed in version 2.0")
class DataRepository: DataRepositoryProtocol {
    // ...
}

受け入れ条件:

  • DataRepositoryに@available(*, deprecated)を追加
  • ドキュメントに廃止予定を明記
  • 新規コードではDataRepositoryを使用しないこと

Phase 3: 使用箇所の置き換え(優先度:中)

作業内容:

  • DataRepositoryを使用している全箇所をSwiftDataRepositoryに置き換え
  • Usecaseの依存をSwiftDataRepositoryに変更
  • テストの更新

影響範囲の確認:

# DataRepositoryを使用している箇所を検索
grep -r "DataRepository" --include="*.swift" UWBViewerSystem/

受け入れ条件:

  • DataRepositoryへの参照がDataMigrationUsecase以外に存在しないこと
  • すべてのビルドが成功すること
  • すべてのテストが通ること

Phase 4: DataMigrationUsecaseの廃止検討(優先度:低)

作業内容:

  • 移行完了から十分な期間が経過したか確認(例:6ヶ月)
  • すべてのユーザーが移行済みか確認
  • DataMigrationUsecaseの削除

受け入れ条件:

  • 移行完了から一定期間が経過していること
  • ユーザーデータの喪失リスクがないこと

Phase 5: DataRepositoryの完全削除(優先度:低)

作業内容:

  • DataRepositoryファイルの削除
  • DataRepositoryTestsの削除
  • 関連ドキュメントの更新

受け入れ条件:

  • DataRepositoryへの参照がコードベース全体に存在しないこと
  • すべてのビルドが成功すること
  • すべてのテストが通ること

DataRepositoryとPreferenceRepositoryの整理

検討事項:

  • PreferenceRepositoryもUserDefaultsを使用している
  • 責務の明確化が必要(データ vs 設定)
  • 将来的にPreferenceRepositoryもSwiftDataに統合するか検討

推奨アプローチ:

  1. DataRepositoryを先に廃止
  2. PreferenceRepositoryは設定管理専用として維持
  3. 必要に応じて将来的にPreferenceRepositoryも見直し

受け入れ条件(全体)

  • Phase 1(移行完了確認)が完了すること
  • Phase 2(非推奨化)が完了すること
  • Phase 3(使用箇所の置き換え)が完了すること
  • すべてのビルドが成功すること
  • すべてのテストが通ること
  • SwiftFormatを実行してコードフォーマットを統一

実装方針

  1. Phase 1から順に段階的に実施
  2. 各Phaseごとに個別のPRを作成
  3. ユーザーデータの喪失リスクを最小限に
  4. 十分なテスト期間を設ける

補足事項

  • Phase 4とPhase 5は長期的な計画(6ヶ月~1年後)
  • ユーザーデータの安全性を最優先
  • バックアップ機能の実装も検討

期待される効果

  • コードベースの簡素化
  • 保守性の向上
  • 重複コードの削減
  • データアクセス層の統一

🤖 このIssueはClaude Codeによって作成されました

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions