-
Notifications
You must be signed in to change notification settings - Fork 0
Open
Labels
リファクタリングリファクタリングを行いますリファクタリングを行います
Description
概要
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に統合するか検討
推奨アプローチ:
- DataRepositoryを先に廃止
- PreferenceRepositoryは設定管理専用として維持
- 必要に応じて将来的にPreferenceRepositoryも見直し
受け入れ条件(全体)
- Phase 1(移行完了確認)が完了すること
- Phase 2(非推奨化)が完了すること
- Phase 3(使用箇所の置き換え)が完了すること
- すべてのビルドが成功すること
- すべてのテストが通ること
- SwiftFormatを実行してコードフォーマットを統一
実装方針
- Phase 1から順に段階的に実施
- 各Phaseごとに個別のPRを作成
- ユーザーデータの喪失リスクを最小限に
- 十分なテスト期間を設ける
補足事項
- Phase 4とPhase 5は長期的な計画(6ヶ月~1年後)
- ユーザーデータの安全性を最優先
- バックアップ機能の実装も検討
期待される効果
- コードベースの簡素化
- 保守性の向上
- 重複コードの削減
- データアクセス層の統一
🤖 このIssueはClaude Codeによって作成されました
Metadata
Metadata
Assignees
Labels
リファクタリングリファクタリングを行いますリファクタリングを行います