シリアライズ
シリアライズ(Serialization)とは、アプリケーションで使用されるデータを、ネットワーク経由で転送したり、データベースやファイルに保存したりできる形式に変換するプロセスのことです。一方、デシリアライズ(deserialization)は、外部ソースからデータを読み取り、それをランタイムオブジェクトに変換する逆のプロセスです。これらは、サードパーティとデータをやり取りするほとんどのアプリケーションにとって不可欠な要素です。
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.3.0" kotlin("plugin.serialization") version "2.3.0" }groovyplugins { id 'org.jetbrains.kotlin.jvm' version '2.3.0' id 'org.jetbrains.kotlin.plugin.serialization' version '2.3.0' }JSON シリアライズライブラリの依存関係を追加します:
org.jetbrains.kotlinx:kotlinx-serialization-json:1.9.0kotlindependencies { 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アノテーションを付けて、シリアライズ可能にします。kotlinimport kotlinx.serialization.Serializable @Serializable data class Data(val a: Int, val b: String)Json.encodeToString()を呼び出して、このクラスのインスタンスをシリアライズします。kotlinimport 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"}リストなどのオブジェクトコレクションも、1 回の呼び出しでシリアライズできます:
kotlinval dataList = listOf(Data(42, "str"), Data(12, "test")) val jsonList = Json.encodeToString(dataList)JSON からオブジェクトをデシリアライズするには、
decodeFromString()関数を使用します。kotlinimport 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 Guide を参照してください。
以下のリソースで Kotlin シリアライズのさまざまな側面を調べることができます:
