YAMLとは
YAML(ヤムル)とは、「YAML Ain’t Markup Language」の頭文字をとった再帰的な略語で、人間が読みやすいデータシリアライゼーション言語です。もともとは「Yet Another Markup Language」として2001年5月11日に初版がリリースされ、その後改良を重ねて現在はYAML 1.2(2009年)が最新バージョンとなっています。
YAMLは、設定ファイルやデータ交換を目的として広く使われており、Docker Compose、Kubernetes、Ansible、GitHub Actionsなど、実務で欠かせないツールの設定言語として採用されています。JSONは機械向けのデータフォーマットですが、YAMLはその点で「人間が読みやすい・書きやすい」ことを第一の設計思想としており、インデント(字下げ)を活用した階層構造の表現が特徴です。
ここがポイントです。YAMLは複雑なネストされたデータを視覚的に理解しやすい形で記述でき、かつJSONの完全スーパーセット(YAML 1.2)でもあるため、有効なJSONはすべて有効なYAMLとして処理されます。つまり、YAMLは単なる設定言語ではなく、データ交換の汎用フォーマットとして重要な役割を担っているわけです。
YAMLの読み方
- 主な読み方
- ヤムル(yam-ul)
- 別の読み方
- ヤメル
- 発音のコツ
- 英語の「camel(キャメル)」と同じ音の流れで「yam」と「ul」を組み合わせた音。日本語では「ヤムル」と表記するのが一般的です。
- アクロニム
- YAML Ain’t Markup Language(再帰的略語)/ Originally: Yet Another Markup Language
YAMLの仕組み
YAMLはインデント(スペース)を用いた階層構造で、キーと値のペアを表現します。重要なのは、タブではなくスペースを使うということです。以下がYAMLの基本的な構文要素です。
YAMLの基本要素
- キー-値ペア:
key: value - ネストされたオブジェクト: インデントで階層を表現
- リスト:
- itemで要素を表記 - コメント:
# コメント - 複数行文字列:
|または>
シンプルな例を見てみましょう。注意し、これはYAMLの最も基本的な形式です。
name: 太郎
age: 30
city: 東京
hobbies:
- 読書
- 映画鑑賞
- 料理
上記の例では、「hobbies」というキーに複数の値(リスト)が紐づいており、インデントで「name」「age」「city」と同じ階層にあることを示しています。
使い方・実例
YAMLは実務で数多くの場面で活用されています。代表的な用途と具体的なコード例を紹介します。
Docker Composeの例
version: '3'
services:
web:
image: nginx:latest
ports:
- "80:80"
environment:
- TZ=Asia/Tokyo
db:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: password
このように、複数のサービスと設定をシンプルに記述できます。覚えておき、これはYAMLの視認性の高さが活躍する場面です。
Kubernetes マニフェストの例
apiVersion: v1
kind: Pod
metadata:
name: my-app
labels:
app: myapp
spec:
containers:
- name: app
image: my-app:1.0
ports:
- containerPort: 8080
実務では、このようなマニフェストファイルを日常的に作成・管理しています。
メリット・デメリット
メリット
- 可読性が高い:インデント中心の設計で人間が直感的に理解できる
- 記述が簡潔:JSON比で記号が少なく、入力ミスが減る
- 広く採用されている:Docker、Kubernetes、Ansibleなど業界標準
- コメントが書ける:JSONと異なり、設定に注釈を加えられる
- JSONとの互換性:YAML 1.2はJSONのスーパーセット
デメリット
- インデントの扱いが厳密:スペース数を間違えるとパースエラーになる
- タブが使えない:エディタの設定によっては注意が必要
- 複雑な構造は読みづらい場合がある:深いネストになると管理が煩雑
- パーサーの実装が複雑:言語によって動作が異なることがある
YAMLとJSONの違い
ポイントです。YAMLとJSONはどちらもデータシリアライゼーション形式ですが、用途と特徴が異なります。以下の表にまとめました。
| 項目 | YAML | JSON |
|---|---|---|
| 可読性 | 高い | 中程度 |
| コメント | 対応(#で記述) | 非対応 |
| 用途 | 設定ファイル・IaC | データ交換・API |
| 記号 | 少ない | 多い(括弧・引用符) |
| パース速度 | やや遅い | 高速 |
同じデータをYAMLとJSONで表現
YAML
app:
name: MyApp
version: 1.0
features:
- auth
- logging
JSON
{
"app": {
"name": "MyApp",
"version": 1.0,
"features": [
"auth",
"logging"
]
}
}
YAMLの方が記号が少なく、シンプルに見えることがお分かりいただけるでしょう。
よくある誤解
誤解1:タブでインデントを表現できる
これは大きな誤りです。YAMLはスペースのみでインデントを表現し、タブは許可されていません。多くのエラーの原因がこのタブ使用です。エディタの設定を確認し、「タブをスペースに変換」するオプションを有効にしましょう。
誤解2:YAMLはマークアップ言語である
「YAML Ain’t Markup Language」という名称の通り、YAMLはマークアップ言語ではなくデータシリアライゼーション言語です。HTMLやXMLと異なり、表現・表示を目的とするのではなく、データ構造を表現することが目的です。
誤解3:YAMLはJSONの置き換えである
YAMLはJSONの上位互換ですが、用途が異なります。実務では、設定ファイルにはYAML、API通信のデータ形式にはJSONと、場面に応じて使い分けるのが一般的です。
実務での活用シーン
1. CI/CDパイプライン
GitHub ActionsやGitLabのパイプライン設定でYAMLが使われています。開発フローを自動化する際、必ずYAMLを記述することになります。
2. インフラストラクチャ as Code(IaC)
Ansible、Terraform、CloudFormationなどの設定でYAMLが活用されており、インフラの構築を自動化・再現可能にするには欠かせません。
3. コンテナオーケストレーション
KubernetesのマニフェストはYAML形式で、マイクロサービスアーキテクチャの構築に不可欠です。
4. 設定ファイル
アプリケーションの設定、ログレベル、データベース接続情報など、多くのツールがYAMLベースの設定ファイルを採用しています。
FAQ
Q1. YAMLのバージョン違いで何か問題が生じますか?
A. YAML 1.1とYAML 1.2で微妙な仕様の違いがあります。特にブール値の扱いが異なるため、ツールのドキュメントでバージョン確認が必要です。
Q2. YAMLでセキュリティ上の注意点は?
A. YAMLパーサーによって危険な機能が有効になることがあります。外部ソースから取得したYAMLを実行する際は、セキュアなパーサーを使用してください。
Q3. どのエディタでYAML編集が効率的?
A. VS Code、Sublime Text、VimなどのエディタはYAML対応で、シンタックスハイライト機能で誤りを早期に発見できます。
Q4. YAMLの検証方法は?
A. yamllint、オンラインバリデータ、言語のYAMLパーサーライブラリなどで検証可能です。
Q5. YAML形式のトラブルシューティングのコツ
A. エラーメッセージをよく読み、行番号を確認してインデント・タブの混在をチェック。重要です、パーサーが指摘した位置が必ずしも真の原因ではないこともあります。
参考文献・出典
- YAML公式サイト(yaml.org) – 最新仕様とドキュメント
- YAML 1.2仕様書 – 詳細なバージョン1.2の仕様
- Docker公式ドキュメント – Docker ComposeのYAML設定
- Kubernetes公式ドキュメント – マニフェストのYAML形式
まとめ
YAMLは、人間が読みやすいデータシリアライゼーション言語として、現代的なITインフラにおいて不可欠な存在です。Docker、Kubernetes、Ansibleなどのツールの標準として採用されており、これらのスキルを身につけるにはYAMLの習得が避けられません。
YAMLの基本は「インデント」「キー-値ペア」「リスト」という3つの要素ですが、これらを正確に理解することで、複雑な設定ファイルも読み解くことができるようになります。特に、タブではなくスペースを使う、という一点を強く意識し、エディタの設定を適切にしておくことが、トラブル回避の第一歩です。
覚えておき、YAMLはシンプルながらも強力なツールです。今後のキャリアを考えると、YAMLの習得は必須スキルといえるでしょう。





















コメントを残す