シリアライゼーション
_シリアライゼーション_とは、アプリケーションが使用するデータを、ネットワーク経由で転送したり、データベースやファイルに保存したりできる形式に変換するプロセスです。一方、_デシリアライゼーション_とは、外部ソースからデータを読み込み、それをランタイムオブジェクトに変換する逆のプロセスです。これら二つは、サードパーティとデータをやり取りするほとんどのアプリケーションにとって不可欠です。
JSONやprotocol buffersのようなデータシリアライゼーションフォーマットは特に一般的です。言語にとらわれず、プラットフォームにも依存しないため、あらゆるモダンな言語で書かれたシステム間でのデータ交換を可能にします。
Kotlinでは、データシリアライゼーションツールは、別のコンポーネントであるkotlinx.serializationで利用できます。これは、org.jetbrains.kotlin.plugin.serialization
Gradleプラグイン、ランタイムライブラリ、およびコンパイラプラグインのいくつかの部分で構成されています。
コンパイラプラグインであるkotlinx-serialization-compiler-plugin
とkotlinx-serialization-compiler-plugin-embeddable
は、Maven Centralに直接公開されています。後者のプラグインは、スクリプティングアーティファクトのデフォルトオプションであるkotlin-compiler-embeddable
アーティファクトと連携するように設計されています。Gradleは、コンパイラ引数としてコンパイラプラグインをプロジェクトに追加します。
ライブラリ
kotlinx.serialization
は、サポートされているすべてのプラットフォーム(JVM、JavaScript、Native)と、様々なシリアライゼーションフォーマット(JSON、CBOR、protocol buffersなど)用のライブラリセットを提供します。サポートされているシリアライゼーションフォーマットの完全なリストは以下で確認できます。
すべてのKotlinシリアライゼーションライブラリはorg.jetbrains.kotlinx:
グループに属しています。その名前はkotlinx-serialization-
で始まり、シリアライゼーションフォーマットを反映したサフィックスを持ちます。例:
org.jetbrains.kotlinx:kotlinx-serialization-json
は、KotlinプロジェクトにJSONシリアライゼーションを提供します。org.jetbrains.kotlinx:kotlinx-serialization-cbor
は、CBORシリアライゼーションを提供します。
プラットフォーム固有のアーティファクトは自動的に処理されるため、手動で追加する必要はありません。JVM、JS、Native、およびマルチプラットフォームプロジェクトで同じ依存関係を使用してください。
kotlinx.serialization
ライブラリは独自のバージョン管理構造を使用しており、Kotlinのバージョン管理とは一致しないことに注意してください。最新バージョンを見つけるには、GitHubのリリースを確認してください。
フォーマット
kotlinx.serialization
には、様々なシリアライゼーションフォーマット用のライブラリが含まれています。
- JSON:
kotlinx-serialization-json
- Protocol buffers:
kotlinx-serialization-protobuf
- CBOR:
kotlinx-serialization-cbor
- Properties:
kotlinx-serialization-properties
- HOCON:
kotlinx-serialization-hocon
(JVMのみ)
JSONシリアライゼーション(kotlinx-serialization-json
)を除くすべてのライブラリはExperimentalであり、APIが予告なく変更される可能性があることに注意してください。
YAMLやApache Avroなど、より多くのシリアライゼーションフォーマットをサポートするコミュニティでメンテナンスされているライブラリもあります。利用可能なシリアライゼーションフォーマットに関する詳細情報については、kotlinx.serialization
のドキュメントを参照してください。
例: JSONシリアライゼーション
KotlinオブジェクトをJSONにシリアライズする方法を見てみましょう。
プラグインと依存関係の追加
開始する前に、プロジェクトでKotlinシリアライゼーションツールを使用できるようにビルドスクリプトを設定する必要があります。
KotlinシリアライゼーションGradleプラグイン
org.jetbrains.kotlin.plugin.serialization
(またはKotlin Gradle DSLでkotlin("plugin.serialization")
)を適用します。kotlinplugins { kotlin("jvm") version "2.2.10" kotlin("plugin.serialization") version "2.2.10" }
groovyplugins { id 'org.jetbrains.kotlin.jvm' version '2.2.10' id 'org.jetbrains.kotlin.plugin.serialization' version '2.2.10' }
JSONシリアライゼーションライブラリの依存関係
org.jetbrains.kotlinx:kotlinx-serialization-json:1.9.0
を追加します。kotlindependencies { implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.9.0") }
groovydependencies { implementation 'org.jetbrains.kotlinx:kotlinx-serialization-json:1.9.0' }
これで、コードでシリアライゼーションAPIを使用する準備ができました。APIはkotlinx.serialization
パッケージとそのフォーマット固有のサブパッケージ(例:kotlinx.serialization.json
)にあります。
JSONのシリアライズとデシリアライズ
- クラスに
@Serializable
アノテーションを付与してシリアライズ可能にします。
import kotlinx.serialization.Serializable
@Serializable
data class Data(val a: Int, val b: String)
- このクラスのインスタンスを
Json.encodeToString()
を呼び出してシリアライズします。
import kotlinx.serialization.Serializable
import kotlinx.serialization.json.Json
import kotlinx.serialization.encodeToString
@Serializable
data class Data(val a: Int, val b: String)
fun main() {
val json = Json.encodeToString(Data(42, "str"))
}
その結果、このオブジェクトの状態をJSONフォーマットで含む文字列:{"a": 42, "b": "str"}
が得られます。
リストなどのオブジェクトコレクションも、単一の呼び出しでシリアライズできます。
kotlinval dataList = listOf(Data(42, "str"), Data(12, "test")) val jsonList = Json.encodeToString(dataList)
decodeFromString()
関数を使用して、JSONからオブジェクトをデシリアライズします。
import kotlinx.serialization.Serializable
import kotlinx.serialization.json.Json
import kotlinx.serialization.decodeFromString
@Serializable
data class Data(val a: Int, val b: String)
fun main() {
val obj = Json.decodeFromString<Data>("""{"a":42, "b": "str"}""")
}
これで完了です!オブジェクトをJSON文字列にシリアライズし、それらをオブジェクトにデシリアライズすることに成功しました。
次について
Kotlinでのシリアライゼーションに関する詳細については、Kotlin Serialization ガイドを参照してください。
次のリソースでKotlinシリアライゼーションのさまざまな側面を探求できます。