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
300
永続化、なに使おう?
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
220
OS間でBluetooth処理を(一部)共通化している話
n_seki
0
100
やってみようMaven!
n_seki
0
350
Try Android Health Connect
n_seki
0
93
Other Decks in Technology
See All in Technology
Geospatialの世界最前線を探る [2025年版]
dayjournal
1
210
AWS 잘하는 개발자 되기 - AWS 시작하기: 클라우드 개념부터 IAM까지
kimjaewook
0
130
ACA でMAGI システムを社内で展開しようとした話
mappie_kochi
1
310
「れきちず」のこれまでとこれから - 誰にでもわかりやすい歴史地図を目指して / FOSS4G 2025 Japan
hjmkth
1
280
業務効率化をさらに加速させる、ノーコードツールとStep Functionsのハイブリッド化
smt7174
2
130
OCI Network Firewall 概要
oracle4engineer
PRO
2
7.9k
20251007: What happens when multi-agent systems become larger? (CyberAgent, Inc)
ornew
1
200
AWS Top Engineer、浮いてませんか? / As an AWS Top Engineer, Are You Out of Place?
yuj1osm
2
210
【Oracle Cloud ウェビナー】クラウド導入に「専用クラウド」という選択肢、Oracle AlloyとOCI Dedicated Region とは
oracle4engineer
PRO
3
130
M5製品で作るポン置きセルラー対応カメラ
sayacom
0
170
"プロポーザルってなんか怖そう"という境界を超えてみた@TSUDOI by giftee Tech #1
shilo113
0
180
20201008_ファインディ_品質意識を育てる役目は人かAIか___2_.pdf
findy_eventslides
2
600
Featured
See All Featured
It's Worth the Effort
3n
187
28k
Gamification - CAS2011
davidbonilla
81
5.5k
Imperfection Machines: The Place of Print at Facebook
scottboms
269
13k
Unsuck your backbone
ammeep
671
58k
Measuring & Analyzing Core Web Vitals
bluesmoon
9
620
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
16k
GraphQLとの向き合い方2022年版
quramy
49
14k
Fireside Chat
paigeccino
40
3.7k
Java REST API Framework Comparison - PWX 2021
mraible
33
8.9k
Optimising Largest Contentful Paint
csswizardry
37
3.4k
Keith and Marios Guide to Fast Websites
keithpitt
411
23k
How STYLIGHT went responsive
nonsquared
100
5.8k
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を積極的に採用したい •
仕様以外の観点からも考える ◦ 技術への慣れ(自分/メンバー) ◦ 既存実装との兼ね合い
おしまい 👑