Androidアプリを開発していると、ユーザーの設定や状態を保存したい場面が多々あります。例えば、「通知をオンにする」「テーマをダークモードに切替」などの設定です。これらの設定を保存するために、Androidでは主に2つの方法が用意されています。それが、SharedPreferencesとDataStoreです。
本記事では、これらの方法の特徴や使い分け方について、初心者の方にもわかりやすく解説します。
SharedPreferencesとは?
SharedPreferencesは、アプリ内での設定情報を保存するための仕組みです。キーと値のペアでデータを保存し、XML形式のファイルに格納されます。
- 保存されるデータは、boolean、int、long、float、Stringなどの基本的な型です。
- 保存先は、アプリのデータディレクトリ内のshared_prefsフォルダにXMLファイルとして保存されます。
- データの保存・取得は、SharedPreferencesオブジェクトを通じて行います。
例えば、ユーザーが「通知をオンにする」という設定を行った場合、その状態をSharedPreferencesに保存することで、アプリを再起動してもその設定を保持することができます。
SharedPreferencesの基本的な使い方
SharedPreferencesを使用するには、以下の手順で操作します。
- SharedPreferencesオブジェクトの取得アプリのコンテキストからSharedPreferencesを取得します。
- データの保存SharedPreferences.Editorを使用して、キーと値のペアを保存します。
- データの取得保存したキーを指定して、対応する値を取得します。
- データの削除不要になったデータを削除します。
以下は、SharedPreferencesを使用したデータの保存と取得の例です。
java
// SharedPreferencesの取得
SharedPreferences sharedPref = getSharedPreferences("my_settings", Context.MODE_PRIVATE);
// データの保存
SharedPreferences.Editor editor = sharedPref.edit();
editor.putString("username", "John");
editor.putInt("age", 25);
editor.apply();
// データの取得
String username = sharedPref.getString("username", "default");
int age = sharedPref.getInt("age", 0);
DataStoreとは?
DataStoreは、SharedPreferencesの後継として推奨される新しいデータ保存の仕組みです。SharedPreferencesの問題点を改善し、より安全で効率的なデータ保存を実現しています。
- データの保存形式には、Preferences DataStoreとProto DataStoreの2種類があります。
- Preferences DataStoreは、SharedPreferencesと同様にキーと値のペアでデータを保存します。
- Proto DataStoreは、Protocol Buffersを使用して、より複雑なデータ構造を保存できます。
- 非同期でのデータ操作が可能で、UIスレッドをブロックしません。
- 型安全性が高く、コンパイル時にエラーを検出できます。
DataStoreの基本的な使い方
DataStoreを使用するには、以下の手順で操作します。
- DataStoreオブジェクトの作成DataStoreを初期化します。
- データの保存DataStoreにデータを保存します。
- データの取得DataStoreからデータを取得します。
- データの削除DataStoreからデータを削除します。
以下は、Preferences DataStoreを使用したデータの保存と取得の例です。
kotlin
// DataStoreの初期化
val dataStore: DataStore = context.createDataStore(name = "settings")
// データの保存
val usernameKey = stringPreferencesKey("username")
val ageKey = intPreferencesKey("age")
dataStore.edit { preferences ->
preferences = "John"
preferences = 25
}
// データの取得
val preferences = dataStore.data.first()
val username = preferences ?: "default"
val age = preferences ?: 0
SharedPreferencesとDataStoreの使い分け
SharedPreferencesとDataStoreは、それぞれに特徴と適した用途があります。
- SharedPreferences設定項目が少なく、同期的な操作で問題ない場合に適しています。
- DataStore非同期処理が必要な場合や、型安全性を重視する場合、または複雑なデータ構造を扱う場合に適しています。
よくある質問
SharedPreferencesとDataStoreは併用できますか?
はい、併用することが可能です。ただし、同じデータを両方で管理しないように注意してください。データの整合性を保つために、どちらか一方を選択して使用することをお勧めします。
DataStoreはいつ導入されたのですか?
DataStoreは2020年にGoogleによって導入されました。SharedPreferencesの問題点を改善するための新しいデータ保存の仕組みとして、Android Jetpackの一部として提供されています。
SharedPreferencesのデータはどこに保存されますか?
SharedPreferencesのデータは、アプリのデータディレクトリ内のshared\_prefsフォルダにXMLファイルとして保存されます。例えば、`/data/data/com.example.app/shared_prefs/my_settings.xml`のようなパスになります。
まとめ
Androidアプリで設定値を保存する方法として、SharedPreferencesとDataStoreの2つがあります。SharedPreferencesはシンプルで使いやすいですが、非同期処理や型安全性が求められる場合はDataStoreの使用を検討してください。



コメント