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
290
永続化、なに使おう?
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
340
Try Android Health Connect
n_seki
0
91
Other Decks in Technology
See All in Technology
react-callを使ってダイヤログをいろんなとこで再利用しよう!
shinaps
1
240
ChatGPTとPlantUML/Mermaidによるソフトウェア設計
gowhich501
1
130
Codeful Serverless / 一人運用でもやり抜く力
_kensh
7
400
OCI Oracle Database Services新機能アップデート(2025/06-2025/08)
oracle4engineer
PRO
0
110
Webブラウザ向け動画配信プレイヤーの 大規模リプレイスから得た知見と学び
yud0uhu
0
230
dbt開発 with Claude Codeのためのガードレール設計
10xinc
2
1.2k
「全員プロダクトマネージャー」を実現する、Cursorによる仕様検討の自動運転
applism118
21
10k
要件定義・デザインフェーズでもAIを活用して、コミュニケーションの密度を高める
kazukihayase
0
110
企業の生成AIガバナンスにおけるエージェントとセキュリティ
lycorptech_jp
PRO
2
160
Django's GeneratedField by example - DjangoCon US 2025
pauloxnet
0
140
なぜスクラムはこうなったのか?歴史が教えてくれたこと/Shall we explore the roots of Scrum
sanogemaru
5
1.6k
生成AIでセキュリティ運用を効率化する話
sakaitakeshi
0
640
Featured
See All Featured
Building Applications with DynamoDB
mza
96
6.6k
Fashionably flexible responsive web design (full day workshop)
malarkey
407
66k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
34
6k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
22k
Rails Girls Zürich Keynote
gr2m
95
14k
KATA
mclloyd
32
14k
Producing Creativity
orderedlist
PRO
347
40k
RailsConf 2023
tenderlove
30
1.2k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
44
2.5k
A Modern Web Designer's Workflow
chriscoyier
696
190k
Writing Fast Ruby
sferik
628
62k
The Invisible Side of Design
smashingmag
301
51k
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を積極的に採用したい •
仕様以外の観点からも考える ◦ 技術への慣れ(自分/メンバー) ◦ 既存実装との兼ね合い
おしまい 👑