Kotlin:
YAML を操作する

どのようにして:

KotlinにはYAMLの解析やシリアライゼーションのための組み込みサポートはありませんが、snakeyaml(一般的なYAML解析用)やkotlinx.serialization(YAML形式の拡張を使用)などの人気のあるサードパーティライブラリを利用してYAMLファイルを扱うことができます。

snakeyamlを使用する

依存関係:

implementation 'org.yaml:snakeyaml:1.30'

YAMLを読む:

import org.yaml.snakeyaml.Yaml
import java.io.FileInputStream

fun readYaml(filePath: String) {
    val yaml = Yaml()
    val inputStream = FileInputStream(filePath)
    val data = yaml.load<Map<String, Any>>(inputStream)

    println(data)
}

// 使い方のサンプル
fun main() {
    readYaml("config.yaml")
}

config.yamlのサンプル:

database:
  host: localhost
  port: 5432

サンプル出力:

{database={host=localhost, port=5432}}

kotlinx.serializationをYAMLで使用する

まず、適切なYAMLサポートライブラリを含むkotlinx-serializationライブラリがあることを確認してください(kotlinx.serializationは主にJSONおよびその他の形式を直接対象としていますが、使用可能であれば、YAMLサポートや代替ライブラリもチェックしてください)。

依存関係:

// JSON用(説明のため、YAMLサポートや代替ライブラリがあるかチェックしてください)
implementation 'org.jetbrains.kotlinx:kotlinx-serialization-json:1.3.2'

シリアライズ可能なデータクラスを定義する:

import kotlinx.serialization.Serializable

@Serializable
data class Config(
    val database: Database
)

@Serializable
data class Database(
    val host: String,
    val port: Int
)

残念ながら、執筆時点でkotlinx.serializationにおける直接のYAMLサポートは限定的であるか進化している可能性があります。snakeyamlでYAMLをJSONに変換してからkotlinx.serializationでJSONをパースするような中間表現を使用する必要があるかもしれませんし、kotlinx.serializationと互換性のあるコミュニティ主導のYAMLシリアライゼーションプロジェクトを探す必要があります。

JSONの場合、コードは次のようになります:

import kotlinx.serialization.json.Json
import kotlinx.serialization.decodeFromString

fun main() {
    val jsonText = """
    {
        "database": {
            "host": "localhost",
            "port": 5432
        }
    }
    """.trimIndent()
    
    val config = Json.decodeFromString<Config>(jsonText)
    println(config)
}

Kotlinとそのエコシステムが進化し続けるにつれて、YAMLサポートとライブラリの最新情報について公式ドキュメントやコミュニティリソースをチェックし続けてください。