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 との比較
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 との比較
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 リソースを定義できる。
さらに掘り下げるなら関連書籍が参考になる。
この記事は役に立ちましたか?
関連用語
JSON
JavaScript 由来の軽量なデータ交換フォーマットで、Web API のデファクトスタンダード
Kubernetes
コンテナのデプロイ、スケーリング、管理を自動化するオープンソースのオーケストレーションプラットフォーム
インデント
コードの階層構造を視覚的に表現するための字下げ
Terraform State
Terraform がインフラの現在の状態を管理するファイルとリモートバックエンド
データベースインデックス
検索クエリの高速化のためにデータベースが維持する補助的なデータ構造
API ドキュメント
API の仕様、エンドポイント、リクエスト/レスポンス形式を記述し、開発者の統合を支援するドキュメント