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
そのローカルDB、プロジェクトに合ってますか? 明日から変える最適なDB
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Kosei Akaboshi (akaboshinit)
November 13, 2025
92
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
そのローカルDB、プロジェクトに合ってますか? 明日から変える最適なDB
Kosei Akaboshi (akaboshinit)
November 13, 2025
More Decks by Kosei Akaboshi (akaboshinit)
See All by Kosei Akaboshi (akaboshinit)
custom_lintで始めるチームルール管理
akaboshinit
0
380
WasmがFlutter on the Webに もたらす変化
akaboshinit
0
39
Featured
See All Featured
Building AI with AI
inesmontani
PRO
1
1.1k
Keith and Marios Guide to Fast Websites
keithpitt
413
23k
Google's AI Overviews - The New Search
badams
0
1k
Testing 201, or: Great Expectations
jmmastey
46
8.2k
Building a Modern Day E-commerce SEO Strategy
aleyda
45
9.1k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
12
1.2k
The Curious Case for Waylosing
cassininazir
1
380
Tips & Tricks on How to Get Your First Job In Tech
honzajavorek
1
530
Leveraging LLMs for student feedback in introductory data science courses - posit::conf(2025)
minecr
1
280
How to train your dragon (web standard)
notwaldorf
97
6.7k
Color Theory Basics | Prateek | Gurzu
gurzu
0
360
The Language of Interfaces
destraynor
162
27k
Transcript
そのローカルDB、プロジェクトに合ってますか? 明日から変える最適なDB akaboshinit Flutter Kaigi 2025 Flutter Kaigi 2025 1
自己紹介 赤星光誓 @akaboshinit 株式会社WinTicket 所属 Flutter Kaigi 2025 2
今日話すこと ローカルDBの選択肢と比較 DB選定の判断軸を考える Flutter Kaigi 2025 3
Flutterで使われる代表的なローカルDB カテゴリ DB SQL Sqflite, Drift NoSQL Hive, Isar, ObjectBox,
Sembast KVS SharedPreferences Flutter Kaigi 2025 4
まず考えやすいパフォーマンス軸で 適切なローカルDBを考える DB選定で最初に気になるのはパフォーマンス 各DBのREADMEにはベンチマーク結果が掲載されている Flutter Kaigi 2025 5
各DBのREADMEにはベンチマーク結果が掲載されている しかし、問題がある 各DBが自分に有利なグラフを掲載?? 計測条件がバラバラ 何が本当に速いのかわからない Flutter Kaigi 2025 6
それらを踏まえて 同一条件でベンチマークを実施してみる 全DBで同じ条件でベンチマークを実行 フェアな比較を実現 Flutter Kaigi 2025 7
ベンチマーク実施内容 Clear(初期化) Insert Single(1000件) Read All(全件読み込み) Query(100件取得) Update Random(ランダム更新) Delete
Random(ランダム削除) Batch Insert(バッチ挿入) Flutter Kaigi 2025 8
ベンチマーク実施環境 iPhone 15 Pro Max Flutter 3.35.7 / iOS 26.1
パッケージ バージョン SharedPreferences 2.2.3 Hive 2.2.3 Isar 3.1.0 Sembast 3.8.5+2 Sqflite 2.3.3+1 Drift 2.29.0 Flutter Kaigi 2025 9
Insert Single(1000件) DB 平均時間 評価 SharedPreferences 48.40ms 最速 Hive 72.59ms
高速 Isar 155.26ms 速い Sembast 285.04ms 普通 Sqflite 823.17ms 遅い Drift 987.26ms 遅い Flutter Kaigi 2025 10
Read All 結果 DB 平均時間 評価 Hive 0.27ms 圧倒的 Sembast
0.81ms 高速 Isar 4.22ms 速い Drift 5.68ms 速い SharedPreferences 5.80ms 速い Sqflite 5.93ms 速い Flutter Kaigi 2025 11
Query(limit 100) DB 平均時間 評価 Sembast 0.17ms 最速 Hive 0.36ms
高速 Sqflite 1.84ms 速い Drift 2.28ms 速い Isar 3.53ms 速い SharedPreferences 6.01ms 普通 Flutter Kaigi 2025 12
Update Random(100回) DB 平均時間 評価 Hive 0.24ms 圧倒的 SharedPreferences 0.40ms
高速 Sembast 0.70ms 速い Isar 0.75ms 速い Sqflite 1.72ms 速い Drift 2.22ms 速い Flutter Kaigi 2025 13
Batch Insert(100 batches of 10) DB 平均時間 評価 Isar 47.55ms
最速 SharedPreferences 48.24ms 高速 Hive 85.73ms 速い Sembast 182.20ms 普通 Sqflite 205.34ms 遅い Drift 209.47ms 遅い Flutter Kaigi 2025 14
ベンチマーク結果まとめ SharedPreferences: 総合1位、Insert/Updateが高速 Hive: 総合2位、Read/Updateが圧倒的 Isar: 総合3位、バランス良く高速 Sembast: Query性能が優秀 Sqflite/Drift:
SQL系は比較的遅め Flutter Kaigi 2025 15
ベンチマーク結果まとめ 全ての操作において一番のパッケージは存在しない (あくまで現バージョンでの結果です。今後それぞれで最適化が進み、この結果は柔軟 に変わる可能性が高いです) 今一番早いのが⚪︎⚪︎だから、それを選定するというのは正しくないことが多い Flutter Kaigi 2025 16
というか そもそもパフォーマンスって本当に大事なのか? Flutter Kaigi 2025 17
ほとんどのプロダクトでは ローカルDBの高度な機能を必要としない Flutter Kaigi 2025 18
パフォーマンスが"悪く"なければそれで良いことが多い ミリ秒単位の差はユーザーが気づかない ほとんどのプロダクトではローカルDBに対してタイトな要件は無い => ユーザー体験を損なわない範囲であれば十分 Flutter Kaigi 2025 19
では、ローカルDBにとって 本当に大事なことは何か? Flutter Kaigi 2025 20
メンテナンスされ続けること Flutter Kaigi 2025 21
なぜメンテナンスが重要か? 1. Flutter/他パッケージのブロッキング Flutter の新バージョンに対応できない 他のパッケージとの依存関係が壊れる 2. データ移行の必要性 ブロッキングが発生しているなら別のDBへの移行が必要になる 安全なデータ移行は準備が必要で、より後回しになりがち
Flutter Kaigi 2025 22
FlutterでのローカルDBコミュニティの特徴 盛り上がっている一方で、パッケージの流行り廃りが早い 個人開発者がメンテナンスしているパッケージが多い Flutter Kaigi 2025 23
主要DBのメンテナンス体制 DB メンテナンス主体 SharedPreferences 企業(Flutter公式) ObjectBox 企業 Sqflite 個人開発 Hive
個人開発 Isar 個人開発 Drift 個人開発 Sembast 個人開発 Flutter Kaigi 2025 24
開発者がコミュニティ活性度という 不確定な状況と戦うための方法 Flutter Kaigi 2025 25
1. ローカルDBを抽象化 Adapterパターンを使う 実装を隠蔽することで、パッケージの変更を容易にする Flutter Kaigi 2025 26
Adapterパターンの実装例 abstract class DatabaseAdapter { Future<void> initialize(); Future<void> insert(Map<String, dynamic>
data); Future<List<Map<String, dynamic>>> readAll(); Future<void> update(String id, Map<String, dynamic> data); Future<void> delete(String id); } class HiveAdapter implements DatabaseAdapter { // Hive specific implementation } class DriftAdapter implements DatabaseAdapter { // Drift specific implementation } Flutter Kaigi 2025 27
1. ローカルDBを抽象化 パッケージの実装を隠蔽することで、別パッケージへの変更を容易にする => コードの変更量を少なく対処できる Flutter Kaigi 2025 28
2. データの移行ができる体制を作る 移行計画を前提にしたデータ構造を作る シンプルなデータ構造を作る データのExport機能を準備 Flutter Kaigi 2025 29
DB選定の判断軸まとめ パフォーマンスは判断材料の一つに過ぎない パフォーマンスだけで選ばない メンテナンス状況が重要 長期的な保守性が重要 抽象化で将来の変更に備える 保守がされなくなっても、簡単にDBを乗り換えるように常に準備すること Flutter Kaigi 2025
30
ご清聴ありがとうございました Flutter Kaigi 2025 31