Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
永続化、なに使おう?
Search
n-seki
January 23, 2024
Technology
0
280
永続化、なに使おう?
Ebisu.mobile#4
2024/01/23
n-seki
January 23, 2024
Tweet
Share
More Decks by n-seki
See All by n-seki
10年もののバグを退治した話
n_seki
0
180
OS間でBluetooth処理を(一部)共通化している話
n_seki
0
100
やってみようMaven!
n_seki
0
320
Try Android Health Connect
n_seki
0
87
Other Decks in Technology
See All in Technology
いまから始めるAWS CDK 〜モダンなインフラ構築入門〜/iac-night-cdk-introduction
tomoki10
4
1.1k
いまからでも遅くない!コンテナでWebアプリを動かしてみよう!コンテナハンズオン編
nomu
0
200
最近のラズピッピいじり / 20250308-rpijam-13th-birthday
akkiesoft
0
150
AWSではじめる Web APIテスト実践ガイド / A practical guide to testing Web APIs on AWS
yokawasa
8
850
Amazon Athenaから利用時のGlueのIcebergテーブルのメンテナンスについて
nayuts
0
150
Roomの監視可能なクエリのカスタマイズとレガシーコードへの適用
shiita0903
2
150
StotybookからはじめるVRT -個人開発編-
arrow2nd
1
530
入門 PEAK Threat Hunting @SECCON
odorusatoshi
0
190
社内でKaggle部を作って初学者育成した話
daikon99
1
210
早くて強い「リアルタイム解析基盤」から広げるマルチドメイン&プロダクト開発
plaidtech
PRO
1
160
2025/3/1 公共交通オープンデータデイ2025
morohoshi
0
130
x86-64 Assembly Essentials
latte72
4
900
Featured
See All Featured
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
33
2.8k
YesSQL, Process and Tooling at Scale
rocio
172
14k
Building a Scalable Design System with Sketch
lauravandoore
462
33k
Why Our Code Smells
bkeepers
PRO
336
57k
Code Reviewing Like a Champion
maltzj
521
39k
We Have a Design System, Now What?
morganepeng
51
7.4k
VelocityConf: Rendering Performance Case Studies
addyosmani
328
24k
Keith and Marios Guide to Fast Websites
keithpitt
411
22k
GraphQLとの向き合い方2022年版
quramy
44
14k
The World Runs on Bad Software
bkeepers
PRO
67
11k
Side Projects
sachag
452
42k
What's in a price? How to price your products and services
michaelherold
244
12k
Transcript
永続化、なに使おう? Realm脱却のユースケース 2024/01/23 Ebisu.mobile#4 Naoto Uwaseki
• Naoto Uwaseki ◦ STORES 決済 のAndroidアプリ/SDK の開発 ◦ @n_seki_
( X / Twitter ) / @n-seki (GitHub) AndroidXの中ではRoomが好きです!! →モルモットです。
Androidの永続化の話をします🌵
「Realmから別の技術への移行」を題材に、 Androidの永続化の方法を比較し、 技術選定の流れをダイジェストでお送りします✋
昨年末にRealm脱却対応を行いました🔥 • ある処理にRealmが使われていた • かなり古いバージョン...... • 他の機能ではRealmを使ってない Realm: モバイル端末で使えるデータベース https://github.com/realm
よし、Realmにさよならしよう👋
……どの技術に移行するべきだろう?🤔
……どの技術に移行するべきだろう?🤔 Room? SharedPreferences? Preferences DataStore? Proto DataStore? ……?
どんな永続化技術があるか確認しましょう🌵
永続化しない • そのデータは本当に永続化の必要がありますか? ◦ 永続化した瞬間から考えることが増える ◦ やらないのが一番バグらない • 少し立ち止まって永続化の必要性について思いを馳 せたい
Realm脱却の仕様を確認 • プリミティブな値ではなく、まとまりをもったデータを保 存したい(複数のカラムがある) • アプリがインストールされている間は参照したい ◦ → 永続化は必要そう •
将来的にデータ構造を変更する可能性もある • データ量は少ない
AndroidXの仲間たち🌟
Preferences DataStore • Key-Value形式でのデータ保存 • スレッドセーフ ◦ != SharedPreferences •
ハック:JSONを文字列データとして保存する ◦ 型安全ではない
Preferences DataStore
Preferences DataStore
Proto DataStore • Protocol Buffers ◦ https://protobuf.dev/ • 任意の型のデータを保存できる •
スレッドセーフ/型安全
Proto DataStore
Proto DataStore
Proto DataStore
Proto DataStore
Room • SQLiteを便利に使えるライブラリ • スレッドセーフ/型安全 • マイグレーションもかんたん ◦ AutoMigration (from
2.4.0)
Room
Room
複雑なデータ 型安全 向いている データ量 マイグレーション 永続化しない! - - - DataStore-Shard
✕ 小 ◯ DataStore-Proto ◯ 小 ◯ Room ◯ 大 ◯
Proto DataStore v.s Room
非機能的な観点からも考える ✊
Proto DataStore v.s Room • 他の機能ではRoomを利用している ◦ Roomならメンバー全員が慣れている技術なのでメ ンテナンスも比較的容易 •
ここだけProto DataStoreにすると、将来的にRealmと同 じ道をたどる可能性がある
Roomに決定 👏
実装対応 そしてリリース 🚀
実は、昨日リリースしました 🕺
まとめ • 本当に永続化が必要か、ちょっとだけ立ち止まる • 技術を比較検討する ◦ 型安全やマイグレーションの容易性から、Roomや Proto DataStoreを積極的に採用したい •
仕様以外の観点からも考える ◦ 技術への慣れ(自分/メンバー) ◦ 既存実装との兼ね合い
おしまい 👑