Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Realm → Room 完全削除へのロードマップ

Realm → Room 完全削除へのロードマップ

食べログ × ANDPAD × Sansan × ピクシブ モバイル勉強会 #5
#5 の開催テーマは「長寿アプリの負債解消・アーキ変遷」
https://andpad.connpass.com/event/404097/

Avatar for Sadashi Ota

Sadashi Ota

October 07, 2026

More Decks by Sadashi Ota

Other Decks in Technology

Transcript

  1. 自己紹介 太田 定志(おおた さだし) • • • • 2018年 株式会社カカクコム入社

    食べログカンパニー 開発本部 技術部 アプリ基盤チーム 主にAndroidアプリを担当 アーキテクチャの見直し、リファクタリング、 OS/ライブラリのアップデート、リリー スフローの最適化、 CI/CDの改善、開発環境の整備、採用、チームビルディン グ などなど、、、 • X • sada(@sadashi_ota) • GitHub • @sadashi-ota • Qiita • sadashi The Android robot is reproduced or modified from work created and shared by Google and used according to terms described in the Creative Commons 3.0 Attribution License. 2
  2. Realmとは もちろんメリットだけでなくて、いくつか悩ましいところもありました。 • スレッド制限(Thread Confinement)によるクラッシュ ◦ これが結構多かったのでは? • クラス設計(継承・データ型)の制限 ◦

    RealmObjectの継承必須。DateやEnumが使えない。。。 • ユニットテスト・モック化が極めて困難 ◦ 結局ラッパー用意しないとテストが面倒。。。 • ネイティブライブラリ(.so)によるAPKサイズの肥大化 ◦ SQLiteと違ってアーキテクチャごとの .so が必要 ◦ 今は App Bundle のおかげで問題ないけど 6
  3. Room移行計画 移行にあたり色々考えることがあります。 • アプリサイズ ◦ マイグレーションがあるのでライブラリが一定期間同居する ▪ 今回RoomはSQLiteのラッパーなのでほぼ影響なし • マイグレーションにかかる時間

    ◦ アプリ起動時とかにやる場合、時間がかかると色々考慮すること が増える ▪ スプラッシュで許容できるか、時間がかかるならローディン グ出すかなどで実装箇所も変わってくる 9
  4. Room移行計画 • 必要なデータサイズ ◦ マイグレーション時に必要なデータサイズ ◦ 失敗時の考慮次第では古いデータをすぐ消さないという可能性も あるので、一時的ではなく純増するケースも • マイグレーション失敗時の考慮

    ◦ 途中で失敗した時の扱い ◦ マイグレーション後に何かあった場合の考慮 ▪ マイグレーションコードに問題がある場合は、旧データの バックアップがあるとどうにかなることもある 10
  5. Room移行計画 具体的にはこんな感じ Realm & Room の共存期間 Realm → Room の実装

    Room移行リリース (ver A) データ移行期間 強制アップデート後の 様子見期間 ver A を強制アップデート 12 Realm 削除
  6. Room移行計画 食べログでの場合 • アプリサイズ・データサイズ・処理時間は問題なし ◦ もともとローカルDBはそこまでのサイズではない ◦ マイグレーションもスプラッシュ出してる間にすぐ終わる • マイグレーション失敗時の考慮

    ◦ 事前にパターン洗い出しと、その対策を企画と相談して決定 • スケジュール ◦ 半年に1度のペースで古いアプリの強制アップデートを実施して いるため、その運用に載せる形で進めるで合意 13
  7. Room移行実施 実装面は概ね苦戦はしなかった • Infraモジュールに作ったRepository層で分離できていた ◦ instrumentation test でRepositoryを対象としたDB周りのテス トを用意することで品質保証 ◦

    基本Infraモジュールの修正で完結できた ◦ 昔はメインモジュールにもRealmが浸透していたので、リファク タが功を奏した • しかし修正量は多かった・・・ 15
  8. Room移行実施 しかし、そんなにスムーズにはいきません • 半年後の強制アップデートで ver A 未満のユーザーがどれぐらい残っ ているか次第 ◦ 半年ではまだ微妙に残っていた

    • キャンペーン中などは実施しない運用なので、タイミングがずれるこ ともある ◦ 一部OSバージョンの足切りと絡んでアップデートできなくなって しまうこともあるので 16
  9. Room移行実施 結局スケジュールは以下のようになりました • Room移行 ◦ 2025/07 にリリース • 強制アップデート ◦

    2026/06 で実施 Realmと共存しているので、KSP化も進めきれず。 そして、強制アップデートから3ヶ月たった現在・・・ 17
  10. まとめ ライブラリ・DBの移行には色々考慮することがある • 別のDBへのマイグレーションは単純な機能追加より考慮すべきこと が多い • ライブラリ自体が同居する期間が必要になることが多い ◦ DBに限らずどんなものでも同じ •

    実装面では抽象化等の設計の重要性を再認識 ◦ ここはAIでやるとしても変わらない部分 • 移行スケジュールは必須 ◦ 消し切らないと負債(リスク)は抱えたまま ◦ とはいえ、古いアプリバージョンのユーザーは一定数いたりする ので、ある程度の長期化も覚悟する(プロダクト次第ですが) 20