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 リソースを定義できる。

さらに掘り下げるなら関連書籍が参考になる。

関連用語