Preferences DataStore
キーと値の設定をリアクティブに保存します
「Preferences DataStore」はCoddyKit上の無料Android Academyレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはAndroid Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Android Academyコースには全4レッスンが含まれています。
Preferences DataStore
Preferences DataStoreは、SharedPreferencesと同様に単純なキーと値のペアを保存しますが、最新の非同期APIを備えています。オブジェクト全体に対するスキーマや型安全性は強制されません。
値には型付きのキーを使ってアクセスします。
DataStoreの作成
KotlinファイルのトップレベルでpreferencesDataStoreプロパティデリゲートを使用すると、ファイルごとに1つのDataStoreインスタンスを作成できます。nameはディスク上のファイル名になります。
import androidx.datastore.preferences.preferencesDataStore
import androidx.datastore.preferences.core.Preferences
val Context.dataStore: DataStore<Preferences> by
preferencesDataStore(name = "settings")トップレベルデリゲートを使う理由
このデリゲートにより、プロセス内でそのファイル名に対応するDataStoreインスタンスが1つだけになることが保証されます。同じファイルに対して2つ作成すると、同じデータをめぐって競合するためエラーが発生します。
トップレベルのContext拡張として宣言することで、シングルトンとして維持できます。
Preferenceキー
各値には型付きキーが必要です。キーはエントリの名前を指定すると同時に、その型を固定します。各サポート対象の型に対応するキーは、ヘルパー関数で作成できます。
import androidx.datastore.preferences.core.stringPreferencesKey
import androidx.datastore.preferences.core.booleanPreferencesKey
import androidx.datastore.preferences.core.intPreferencesKey
val USERNAME = stringPreferencesKey("username")
val DARK_MODE = booleanPreferencesKey("dark_mode")
val LAUNCH_COUNT = intPreferencesKey("launch_count")サポートされるキーの型
Preferences DataStoreは、次のプリミティブ型のキーをサポートしています。
stringPreferencesKeybooleanPreferencesKeyintPreferencesKey、longPreferencesKey、floatPreferencesKey、doublePreferencesKeystringSetPreferencesKey
キーを1か所で定義する
よく使われる方法は、すべてのキーをobjectにまとめることです。これによりキーを見つけて再利用しやすくなり、文字列名の入力ミスも防げます。
object PrefKeys {
val USERNAME = stringPreferencesKey("username")
val DARK_MODE = booleanPreferencesKey("dark_mode")
val FONT_SIZE = intPreferencesKey("font_size")
}文字列キーと変数名の違い
文字列の引数(例: "dark_mode")がディスクに書き込まれる値であることに注意してください。後からこれを変更すると、以前の値にアクセスできなくなります。Kotlinのval名は、コード内で使用する名前にすぎません。
用途ごとに1つのDataStore
用途が異なる場合は、ファイル名をそれぞれ変えて複数のDataStoreを作成できます。たとえば、"settings"ストアと"user_session"ストアを作成できます。関連するキーはまとめて管理してください。
val Context.settingsStore by preferencesDataStore(name = "settings")
val Context.sessionStore by preferencesDataStore(name = "session")UIレイヤーからのアクセス
デリゲートはContextに付属しますが、Composableから直接読み取らないでください。DataStoreをrepositoryに注入し、そこからViewModelにFlowを公開します。これによりUIをテストしやすくなります。
シンプルなRepositoryの構成
DataStoreをrepositoryクラスでラップすると、すっきりしたAPIを提供でき、キーの定義とマッピングロジックを1か所にまとめられます。
class SettingsRepository(private val dataStore: DataStore<Preferences>) {
val darkMode: Flow<Boolean> = dataStore.data
.map { it[PrefKeys.DARK_MODE] ?: false }
}デフォルト値
キーがまだ存在しない場合があるため、読み取り結果はnullになります。Preferenceの値をマッピングするときは、Elvis演算子?:を使って必ずデフォルト値を指定してください。
val fontSize: Flow<Int> = dataStore.data
.map { prefs -> prefs[PrefKeys.FONT_SIZE] ?: 14 }理解度チェック
Preferenceキーを理解できているか確認しましょう。
まとめ
Preferences DataStoreを設定しました。
- トップレベルの
preferencesDataStoreデリゲートで1つのインスタンスを作成する stringPreferencesKey、booleanPreferencesKeyなどで型付きキーを定義する- キーを
objectにまとめ、アクセスをrepositoryでラップする - 存在しないキーには必ずデフォルト値を指定する
次は、これらの設定を実際に読み書きします。
よくある質問
「Preferences DataStore」レッスンは無料ですか?
はい。「Preferences DataStore」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Android Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Android Academyコースには全4レッスンが含まれています。
「Preferences DataStore」で何を学びますか?
キーと値の設定をリアクティブに保存します ブラウザで直接実行するハンズオンコードでAndroid Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Android Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのAndroid Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。
「Preferences DataStore」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このAndroid Academyレッスンでコードを書いて実行できますか?
はい。すべてのAndroid Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- DataStoreとSharedPreferences
- Preferences DataStore
- 設定の読み書き
- Proto DataStore