Proto DataStore
型付きの構造化データを保存します
「Proto DataStore」はCoddyKit上の無料Android Academyレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはAndroid Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Android Academyコースには全4レッスンが含まれています。
Proto DataStore
Proto DataStoreは、単純なキーと値のペアではなく、型が厳密に定められた構造化オブジェクトを保存します。スキーマを定義すると、DataStoreはファイルごとに1つの型付きオブジェクトを保存します。
設定が一貫したモデルを形成する場合に適しています。
型付きデータを使う理由
Preferences DataStoreは型を持たないため、キーの入力ミスや誤った型での読み取りは、実行時まで検出されません。Proto DataStoreでは、設定オブジェクト全体に対するコンパイル時の型安全性が得られます。
- 入力を間違えやすい文字列キーがない
- デフォルト値をスキーマで定義できる
- リファクタリングしやすいフィールド
シリアライザー形式の選択
従来の方法では、Protocol Buffers(proto)を使ってスキーマを定義します。kotlinx.serializationや、任意のカスタム形式を使ってシリアライズすることもできます。スキーマにはフィールドと型を記述します。
Protoスキーマの定義
設定のメッセージを記述した.protoファイルを作成します。protobufコンパイラーが、そこからKotlin/Javaクラスを生成します。
syntax = "proto3";
option java_package = "com.example.app";
option java_multiple_files = true;
message UserSettings {
bool dark_mode = 1;
int32 font_size = 2;
string username = 3;
}Serializerの実装
DataStoreには、型をストリームから読み書きする方法を把握したSerializerと、ファイルが空の場合に使用するdefaultValueが必要です。
object UserSettingsSerializer : Serializer<UserSettings> {
override val defaultValue: UserSettings = UserSettings.getDefaultInstance()
override suspend fun readFrom(input: InputStream): UserSettings =
UserSettings.parseFrom(input)
override suspend fun writeTo(t: UserSettings, output: OutputStream) =
t.writeTo(output)
}Proto DataStoreの作成
preferencesDataStoreではなくdataStoreデリゲートを使用し、ファイル名とSerializerを渡します。
val Context.settingsStore: DataStore<UserSettings> by dataStore(
fileName = "user_settings.pb",
serializer = UserSettingsSerializer
)型付きデータの読み取り
読み取りはsettingsStore.dataから行いますが、Flowの型はモデルそのものになります。キーもキャストも必要なく、フィールドに直接アクセスできます。
val darkMode: Flow<Boolean> = context.settingsStore.data
.map { settings -> settings.darkMode }updateDataによる書き込み
Proto DataStoreでは、editの代わりにupdateData suspend関数を使用します。現在のオブジェクトを受け取り、新しいオブジェクトを返します。protobufでは、生成されたbuilderを使用します。
suspend fun setDarkMode(enabled: Boolean) {
context.settingsStore.updateData { current ->
current.toBuilder()
.setDarkMode(enabled)
.build()
}
}イミュータブルな更新
既存のオブジェクトを変更せず、常に新しいオブジェクトを作成して返していることに注目してください。このイミュータビリティにより、更新がトランザクションとして処理され、すべての監視側で一貫性が保たれます。
破損への対処
保存されたファイルが読み取れなくなると、DataStoreはCorruptionExceptionをスローします。corruptionHandlerを指定すると、クラッシュさせる代わりに安全なデフォルト値を返せます。
val Context.settingsStore by dataStore(
fileName = "user_settings.pb",
serializer = UserSettingsSerializer,
corruptionHandler = ReplaceFileCorruptionHandler {
UserSettings.getDefaultInstance()
}
)PreferencesとProtoの比較
必要に応じて選択してください。
- Preferences: 関連性のないフラグが少数あり、すぐに設定でき、スキーマが不要な場合
- Proto: 構造化された設定モデル、型安全性、定義済みのデフォルト値が必要な場合
どちらも、非同期・トランザクション処理・Flowベースという基盤を共有しています。
理解度チェック
Proto DataStoreを理解できているか確認しましょう。
まとめ
Proto DataStoreを使って型付きデータを保存する方法を学びました。
- 多くの場合はProtocol Buffersを使ってスキーマを定義する
defaultValueを備えたSerializerを実装するdataStoreデリゲートでストアを作成する- フィールドを直接読み取り、
updateDataで書き込む - デフォルト値を返すハンドラーで破損に対処する
これでDataStoreコースは終了です。
AI チューターと学ぶ Kotlin — 無料
ブラウザでリアルコードを書いて実行し、24/7 の AI チューターから瞬時にサポートを受け、ウェブまたはアプリで続きから学習できます。
- コース
- 36
- レッスン
- 152
よくある質問
「Proto DataStore」レッスンは無料ですか?
はい。「Proto DataStore」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Android Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Android Academyコースには全4レッスンが含まれています。
「Proto DataStore」で何を学びますか?
型付きの構造化データを保存します ブラウザで直接実行するハンズオンコードでAndroid Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Android Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのAndroid Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。
「Proto DataStore」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このAndroid Academyレッスンでコードを書いて実行できますか?
はい。すべてのAndroid Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- DataStoreとSharedPreferences
- Preferences DataStore
- 設定の読み書き
- Proto DataStore