
ソフトウェア開発やインフラ管理の現場で、設定ファイルやデータ交換の標準として定着した「YAML」。人が直感的に読み書きできるシンプルな記法と、柔軟なデータ表現力を両立している点が多くのエンジニアに支持されています。
本記事では、YAMLの基本から活用例、メリットや注意点、JSONやXMLとの違いまで、初めての方にもわかりやすくまとめました。YAMLを正しく理解して、設定管理やシステム運用の効率化に役立ててみませんか。
目次
初めてプロジェクト担当者になった方向け
プロが教える「IT基礎知識・用語集」プレゼント
YAMLとは
現代のソフトウェア開発やインフラ運用の現場では、設定ファイルやデータ交換を支えるデータ形式として「YAML」が欠かせない存在となっています。YAMLは人間が読みやすく、書きやすいことを最優先に設計されたデータ記述フォーマットです。構造化データの代表格であり、JSONやXMLと並んで広く利用されています。ファイル拡張子は公式には「.yaml」が推奨されていますが、歴史的な事情から「.yml」も多く使われています。2025年9月時点で、最新版の仕様は1.2.2(2021年10月公開)です。また、2024年2月にはインターネット標準として公式MIMEタイプ「application/yaml」が登録され、YAMLは世界的な標準技術としての地位を確立しました。
参考:yaml.org「YAML Frequently Asked Questions」
●YAMLの特徴
YAMLがこれほど多くの開発現場で選ばれる理由は、開発者にとって直感的で扱いやすい独自の特徴にあります。
インデント(スペース)で階層を表現
インデントだけでデータの階層構造が一目でわかります。タブは禁止されており、必ずスペースで統一する必要があります。一般的には2スペースがよく使われますが、仕様上はスペース数の指定はありません。
コメント(#)が記述できる
行頭の「#」を使って、意図や注意点をファイル内に記録できます。これは設定の保守や共同作業でも重要な役割を果たします。
多様なデータ型に対応
文字列・数値・真偽値・リスト・マッピング(連想配列)など、さまざまなデータ構造をシンプルに記述できます。
JSONを完全に内包(スーパーセット仕様)
YAML 1.2以降、すべての有効なJSONはそのままYAMLとしても解釈できるため、ツール間のデータ変換や連携も柔軟です。
このような特徴により、YAMLは設定管理やシステム間のデータ受け渡しなど幅広い用途に最適化されています。
●YAMLの歴史
YAMLは2001年にClark Evans氏らによって、人間が直接扱えるデータ記述言語を目指して提案されました。2004年に最初の正式仕様(YAML 1.0)が発表され、冗長な記述が必要なXMLに対して、よりシンプルで可読性の高い代替案として注目されました。
2009年にはYAML 1.2がリリースされ、JSONとの互換性が大きく強化されました。その後も標準仕様が継続的にアップデートされ、2021年に1.2.2へ、そして2024年には公式MIMEタイプ「application/yaml」がIETFで登録されています。
参考:yaml.org「YAML Ain’t Markup Language (YAML™) revision 1.2.2 — 1.2 YAML History」
YAMLの基本構造
YAMLのデータ構造は「スカラー(値)」「シーケンス(リスト)」「マッピング(連想配列)」という3つの要素からなります。これらを自由に組み合わせることで、複雑なデータも直感的に表現できます。また、一つのファイル内に複数のYAMLドキュメントを含める場合は---で区切り、必要に応じて...で終了を示すこともできます。
●スカラー(単一の値)
スカラーは文字列・数値・真偽値・null(~やnullで表現)など「単一の値」を指します。YAMLでは、未クォートの値は自動的に型判定されますが、曖昧な場合や意図を明確にしたい場合はクォート(シングルまたはダブル)で囲むのが安全です。特にYAML 1.2以降、ブール値の自動変換はtrue/falseのみに限定されており、以前のバージョンで使われていたyes/noやon/offは文字列として扱うことが推奨されています。ただし、一部のツールや古いパーサでは異なる動作をする場合もあるため注意が必要です。
●シーケンス(リスト)
複数の値を順序付けて並べたいときは、ハイフンとスペース(- )を使ってリストを記述します。
fruits: - apple - banana - orange
●マッピング(キーと値の組み合わせ)
「key: value」の形式で、プログラムの辞書やオブジェクトのような連想配列を表現できます。
user:
name: Hanako
age: 28
address:
city: Tokyo
zip: 100-0001
このように、ネスト構造もインデントだけで表現できるのがYAMLの魅力です。
YAMLの書き方
YAMLの記述はインデントによる階層表現が基本です。インデントは必ずスペースで行い、タブ文字は禁止されています。2スペースや4スペースがよく使われていますが、ファイル内でインデント幅を統一することが最重要です。
●キーと値の例
もっともシンプルなマッピングの例です。
name: Taro age: 30
●リスト(シーケンス)の例
キーの下にリストを割り当てる場合は、各要素の前にハイフンとスペースを入れます。
hobbies: - reading - travel - music
●ネスト構造の例
マッピングとリストを組み合わせることで、より複雑な階層構造も簡単に記述できます。
profile:
name: Sakura
contact:
email: sakura.s@example.com
social:
twitter: "@sakura_dev"
skills:
- Python
- YAML
- Docker
YAMLのメリット
YAMLには、主に以下の3つのメリットがあります。
●読みやすい構造を表現できる
インデントによる階層表現により、設定内容を直感的に把握しやすくなっています。タグや括弧が少なく、シンプルな見た目で可読性が高い点も特長です。
●コメントを書ける
#記号を使えば、どの行にも自由にコメントを残せます。設定の意図や注意点を直接書き込めるため、チームでの運用や保守でも役立ちます。
●JSON互換で柔軟に使える
YAML 1.2はJSONのスーパーセットとして設計されているので、JSON形式のデータをそのままYAMLファイルとして使うことも可能です。また、YAMLパーサーを使えばJSON形式の読み込みも問題なく行えます。
●多様なツールで採用されている
Kubernetesのマニフェスト、AnsibleのPlaybook、Docker Composeの構成ファイル、GitHub Actionsのワークフロー、OpenAPI(Swagger)など、さまざまなITインフラやフレームワークで標準的な設定フォーマットとなっています。また、Spring BootやRuby on Railsといった主要なアプリケーションフレームワークでも広く利用されています。
●冗長な記号が少ない
JSONやXMLと比較して、括弧やタグなどの構文ノイズが最小限に抑えられています。これにより、ファイルがシンプルで分かりやすく、記述量も抑えられます。
YAMLの注意点
YAMLを使用する際には、その特性を理解し、いくつかの注意点があります。
●インデントエラーに弱い
階層をスペースの数で管理するため、インデントがずれるとパースエラーになりやすい点には注意が必要です。また、スペースとタブが混在しているとエラーの原因となります。エディタの設定やyamllintなどの静的解析ツールを活用して、記述ミスを未然に防ぐことが重要です。
●意図しない型変換が起こりやすい
YAMLは値を自動的に型判定します。たとえば「No」や「1.10」など、開発者の意図と異なる型で解釈されることがあります。YAML 1.2では、真偽値はtrue/falseのみがブール型として自動解釈され、それ以外(例:yes/no、on/off)は原則として文字列扱いになります。ただし、一部ツールでは1.1仕様の解釈が残っている場合もあるため、曖昧な値やバージョン番号などは必ずクォートで囲みましょう。
| 値の例 | 期待する型 | パーサの自動判定例 | 対策例 |
|---|---|---|---|
| No | 文字列 | false(偽)と誤判定 | ‘No’ と記述 |
| 1.10 | 文字列 | 1.1(数値)と誤判定 | ‘1.10’ と記述 |
●大規模ファイルでは可読性が落ちる
中規模までの設定ファイルでは可読性の高さが大きなメリットですが、数千行規模で階層が深くなると、逆に全体像を把握しづらくなる場合もあります。こうしたケースでは、機能ごとにファイルを分割したり、アンカー・エイリアスを使って重複を避けるなどの工夫が有効です。
YAMLと他の形式との違い
YAMLは現代の開発でよく使われる他のデータ形式といくつかの面で大きく異なります。
●YAMLとJSON
YAMLとJSONはどちらも構造化データの表現に使われますが、その設計思想や主な用途が異なります。
| 特徴 | YAML | JSON |
|---|---|---|
| 主な用途 | 設定ファイル、人間による編集 | API通信、データ交換 |
| コメント | 可(#で記述) | 不可 |
| データ型 | 日付やアンカーなどもサポート | 基本的な型のみ |
| 可読性 | 高い | 中程度 |
| パース性能 | 実装・データ依存で異なる | 一般的に高速 |
JSONは厳密な構文と機械処理のしやすさを重視して設計されており、YAMLは人間の可読性・編集のしやすさにフォーカスしています。なお、JSONはコメント不可ですが、YAMLは#で自由にコメントできます。YAMLパーサーはJSONの読込にも対応しています。
●YAMLとXML
XMLは文書の意味付けやスキーマ検証、システム間データ交換に強みを持つマークアップ言語です。一方、YAMLは設定ファイルや構成管理など、人が直接読み書きする用途に適しています。
| 特徴 | YAML | XML |
|---|---|---|
| 階層表現 | インデントベース | タグベース |
| コメント | #で記述 | <!-- 〜 -->で記述 |
| 冗長性 | 低い | 高い(タグが多い) |
| 主な用途 | 設定ファイル、構成管理 | システム間のデータ交換、文書 |
YAMLの利用シーン
YAMLは、その可読性と柔軟な表現力から、さまざまな分野・ツールで標準的なデータ形式として活用されています。
●設定ファイル
Docker Compose、Spring Boot、Ruby on Railsなど、主要なサービスやフレームワークで設定ファイルとしてYAMLが使われています。
# docker-compose.yml の例
services:
webapp:
build: .
ports:
- "8000:5000"
redis:
image: "redis:alpine"
●インフラ構成管理
Infrastructure as Code(IaC)の分野では、AnsibleのPlaybookやKubernetesのマニフェストファイルなどでYAMLが標準的に使われています。
# Kubernetes Deployment マニフェストの例
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
replicas: 3
template:
spec:
containers:
- name: nginx
image: nginx:1.16.1
●CI/CDのワークフロー
GitHub ActionsやGitLab CI、CircleCIなど、継続的インテグレーション/デリバリー(CI/CD)のワークフロー定義でもYAMLが使われています。
# GitHub Actionsのワークフロー定義例
name: CI
on: [push]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- run: echo "Hello, world!"
●API仕様書
OpenAPI(Swagger)などのAPI仕様管理ツールでも、エンドポイントやレスポンスなどをYAMLで記述することで、人にも機械にも分かりやすいAPIドキュメントを作成できます。
YAMLを理解して設定管理を効率化しよう
YAMLは、人が読みやすいシンプルな記法と、柔軟なデータ構造の両立を実現しています。そのため、現代の設定ファイルや構成管理、インフラ自動化において欠かせない存在となりました。JSONやXMLとの違いも正しく理解しつつ、インデントや型変換など特有の注意点を意識して活用することがトラブル防止のカギです。書式ミスの防止には、yamllintなどのツール活用が効果的です。日々の運用をより効率的かつ堅牢に進めるために、まずはYAMLの基礎とベストプラクティスを身につけることから始めてみてはいかがでしょうか。
初めてプロジェクト担当者になった方向け
プロが教える「IT基礎知識・用語集」プレゼント
■YAMLに関連した記事


