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
330
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
永続化、なに使おう?
Ebisu.mobile#4
2024/01/23
n-seki
January 23, 2024
More Decks by n-seki
See All by n-seki
2App, 1Repository
n_seki
0
37
10年もののバグを退治した話
n_seki
0
270
OS間でBluetooth処理を(一部)共通化している話
n_seki
0
110
やってみようMaven!
n_seki
0
380
Try Android Health Connect
n_seki
0
99
Other Decks in Technology
See All in Technology
【公開用】AI_Dev_Ex2026_AI_登壇資料
matsuritechnologies
PRO
1
490
大 AI 時代におけるC# の事情 ~ぶっちゃけトークを交えながら~
nenonaninu
0
120
副作用のある Lambda でも Lambda Power Tuning は使えるのか / lambda-power-tuning-side-effects
koukihosaka
1
140
それでも、技術なブログを書く理由 #kichijojipm / Why I Still Write Tech Blogs Even Now
shinkufencer
0
450
探索・可視化・自動化を一本化 Amazon Quickでデータ活用スピードを上げる方法
koheiyoshikawa
0
170
なぜ、あなたのAPIは使われないのか? AX時代の設計原則、ガードレール、運用体制
yokawasa
1
210
[Droidcon Orlando '26] The Android Lens: Applying Mobile Forensics to AI Performance
amanda_hinchman
1
110
AIツールを導入しても生産性はあがらない? カオナビが直面した 3つの壁と乗り越え方。/ Overcoming 3 Barriers to AI-Driven Productivity at kaonavi
kaonavi
0
180
大量データに対しても、生成AIを用いてリーズナブルにデータ加工をしたい!Databricksのai_queryについて調べてみた
kamoshika
1
280
「守りたい体験」を渡すだけで E2E を生成させられるようになった話
hinac0
2
1k
OPENLOGI Company Profile for engineer
hr01
1
74k
“それは自分の仕事じゃない"を越えて行け
yuukiyo
1
520
Featured
See All Featured
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.7k
Taking LLMs out of the black box: A practical guide to human-in-the-loop distillation
inesmontani
PRO
3
2.3k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
35
2.5k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
130k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
249
1.3M
Building an army of robots
kneath
306
46k
It's Worth the Effort
3n
188
29k
Mobile First: as difficult as doing things right
swwweet
225
10k
Lightning talk: Run Django tests with GitHub Actions
sabderemane
0
220
Jamie Indigo - Trashchat’s Guide to Black Boxes: Technical SEO Tactics for LLMs
techseoconnect
PRO
0
510
Exploring anti-patterns in Rails
aemeredith
3
450
Dominate Local Search Results - an insider guide to GBP, reviews, and Local SEO
greggifford
PRO
0
210
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を積極的に採用したい •
仕様以外の観点からも考える ◦ 技術への慣れ(自分/メンバー) ◦ 既存実装との兼ね合い
おしまい 👑