YAML
人間が読みやすいデータシリアライゼーション形式で、設定ファイルや CI/CD の定義に広く使われる
データ形式運用
YAML とは
YAML (YAML Ain't Markup Language) は、インデントベースの人間が読みやすいデータシリアライゼーション形式である。Kubernetes マニフェスト、GitHub Actions、Docker Compose、CloudFormation など、設定ファイルのデファクトスタンダードだ。
基本構文
# 文字列
name: Alice
message: "Hello, World"
# 数値・真偽値
age: 30
active: true
score: 3.14
# 配列
tags:
- typescript
- aws
- kubernetes
# オブジェクト (マップ)
address:
city: Tokyo
zip: "100-0001"
# 複数行文字列
description: |
これは複数行の
文字列です。
改行が保持されます。
# 折りたたみ文字列
summary: >
これは長い文章ですが
1 行に折りたたまれます。
JSON との比較
| 観点 | YAML | JSON |
|---|---|---|
| 可読性 | 高い (インデントベース) | 中程度 (括弧ベース) |
| コメント | # で可能 |
不可 |
| データ型 | 暗黙的 (曖昧) | 明示的 |
| 用途 | 設定ファイル | API、データ交換 |
| パース速度 | 遅い | 速い |
YAML の落とし穴
暗黙の型変換
# ❌ 意図しない型変換
version: 1.0 # float (文字列ではない!)
country: NO # boolean false (Norway ではない!)
zip: 01onal # 8進数として解釈される場合がある
# ✅ クォートで文字列を明示
version: "1.0"
country: "NO"
zip: "01234"
インデントエラー
# ❌ タブ文字は使えない (スペースのみ)
items:
- item1 # タブ → パースエラー
# ✅ スペース 2 つ
items:
- item1
使われる場面
| ツール | ファイル |
|---|---|
| Kubernetes | deployment.yaml, service.yaml |
| GitHub Actions | .github/workflows/*.yml |
| Docker Compose | docker-compose.yml |
| CloudFormation | template.yaml |
| ESLint | .eslintrc.yml |
TOML との比較
| 観点 | YAML | TOML |
|---|---|---|
| ネスト | インデント | [section] |
| 型の厳密さ | 曖昧 | 厳密 |
| 用途 | CI/CD、K8s | Rust (Cargo.toml)、Python (pyproject.toml) |
マルチドキュメント
# 1 つのファイルに複数のドキュメント
apiVersion: v1
kind: ConfigMap
metadata:
name: config
---
apiVersion: v1
kind: Service
metadata:
name: my-service
--- で区切ることで、1 ファイルに複数の Kubernetes リソースを定義できる。
さらに掘り下げるなら関連書籍が参考になる。