ホーム › ファイルI/O › F-05: YAML の読み書き
F-05: YAML の読み書き(SnakeYAML)
YAML はアプリケーションの設定ファイルとして広く使われるフォーマットです。 Java 標準ライブラリには YAML パーサーが含まれていないため、 実務では SnakeYAML を使うのが一般的です。 Java 8 タブでは Pure Java による簡易パーサー(フラット形式のみ)も紹介します。
YAML の基本構文
スカラー(キーと値)
name: 山田太郎 age: 30
ネスト(マッピング)
server: host: localhost port: 8080
リスト(シーケンス)
fruits: - りんご - バナナ
Maven 依存定義(SnakeYAML)
<dependency>
<groupId>org.yaml</groupId>
<artifactId>snakeyaml</artifactId>
<version>2.2</version>
</dependency>サンプルコード
よくあるミス・注意点
⚠️ インデントはスペースのみ(タブ文字は使えない)
YAML の仕様ではインデントにタブ文字を使えません。 エディタの設定によっては Tab キーがタブ文字を入力するため注意が必要です。 必ずスペース(通常2文字)でインデントしてください。 タブが混入すると SnakeYAML が ScannerException をスローします。
📌 デシリアライズの型キャストに注意
yaml.load() は Object(または Map<String, Object>)を返します。 数値フィールドは Integer や Long として返るため、String にキャストしようとすると ClassCastException が発生します。
📌 実務では設定ファイルの読み込みに使うことが多い
Spring Boot などのフレームワークでは application.yml の読み込みに SnakeYAML が内部で使われています。 フレームワークを使わない Pure Java アプリで設定ファイルを YAML にしたい場合に直接使用します。
テストする観点
- シリアライズしてデシリアライズすると元のデータと一致するか(ラウンドトリップテスト)
- ネストした YAML のキーにアクセスできるか
- リスト要素が正しい順序で読み込まれるか
- コメント行(# で始まる行)が無視されるか
- インデントにタブが混入した YAML で例外が発生するか
- 数値フィールドが
Integer型として読み込まれるか