Jetpack DataStore: SharedPreferencesの置き換え用ライブラリ、ついにリリース

投稿者: | 2021年8月17日

Jetpack DataStore

SharedPreferencesに悩まされた開発者は少なくないだろう。非同期な操作をしているアプリだと思い通りに動いてくれないことがある。

それに対するGoogleの回答が今回紹介するDataStore
だ。

ついにリリースされたが・・・。

この8月4日にリリースされたばかりの新ライブラリである。日本語のページは2021年8月17日において少し古く、リリースされていないことになっている。困ったものだ。

DataStoreとは、そして利用法はDocs内のGuidesにある。

DataStore自体の説明は本家のものを引用する。これは日本語と英語の乖離がないようだ。

Jetpack DataStore は、プロトコル バッファを使用して Key-Value ペアや型付きオブジェクトを格納できるデータ ストレージ ソリューションです。DataStore は、Kotlin コルーチンとフローを使用して、データを非同期的に、一貫した形で、トランザクションとして保存します。

現在、データの保存に SharedPreferences を使用しているのであれば、その代わりとして DataStore に移行することを検討してください。

注意すべきなのは

注: 大規模なデータセットや複雑なデータセット、部分更新、参照整合性をサポートする必要がある場合は、DataStore の代わりに Room を使用することを検討してください。DataStore は、小規模で単純なデータセットに適したものであり、部分更新や参照整合性をサポートしていません。

とあることだ。本来、既にSharedPreferencesを使うべきでないのに使っているプロジェクトでは意義が薄いだろう。

DataStore には、Preferences DataStore と Proto DataStore の 2 種類があります。

Preferences DataStore では、キーを使用してデータの保存およびアクセスを行います。この実装では、定義済みのスキーマは必要ありませんが、タイプセーフではありません。
Proto DataStore では、カスタムデータ型のインスタンスとしてデータを保存します。この実装では、プロトコル バッファを使用してスキーマを定義する必要がありますが、タイプセーフです。

CoroutinesだけではなくRxJavaにも対応

今回、一番良くなったと思えるのは非同期処理との整合性だろう。Kotlin coroutinesとFlowを利用と書いてあるが、オプションでRxJava2とRxJava3もサポートできる事があげられる。(Guidesを参照。)

UXが重要視されるようになったこともあり、非同期処理を入れることが多くなった。SharedPreferencesからの乗り換えは今後増えるだろう。

まとめ

2021年8月4日にJetpack DataStoreがめでたく正式リリースされた。非同期処理との整合性が上がったSharedPreferencesの改訂版と言えるだろう。

あくまでもSharedPreferencesの改訂版なのでSharedPreferencesが適さないプロジェクトではRoomを使ってねということらしい。

コメントを残す