TL;DR — 30 秒でわかる YAML
- YAML はインデント(字下げ)で階層を表すデータ形式です。文字列・数値・真偽値・null・配列・マッピングという、JSON と同じデータモデルを扱えます。
- 波括弧やカンマがないぶん人が読み書きしやすく、設定ファイルの記述に広く使われます。
- Kubernetes・GitHub Actions・Docker Compose・Ansible はいずれも YAML 前提です。
- JSON にはないコメント・複数行文字列・アンカー(再利用)が書けます。
- YAML を JSON に変換したいときは FormatArc の YAML to JSON 変換ツール に貼り付ければ、ブラウザ内で完結し、エラー時は行番号付きで問題箇所が表示されます。
YAMLとは
YAML(YAML Ain't Markup Language)は、設定ファイルやデータの記述に使われるテキストフォーマットです。もともとは「Yet Another Markup Language」の略でしたが、マークアップ言語ではなくデータ指向であることを強調するために、再帰的な名前に改められました。
最大の特徴は、インデント(字下げ)で構造を表現する点です。波括弧や角括弧を使わないため、見た目がすっきりしていて、人間が読み書きしやすいように設計されています。
同じデータを YAML と JSON で書き比べると、違いがひと目でわかります。
name: Alice
age: 30
isStudent: false
{
"name": "Alice",
"age": 30,
"isStudent": false
}
YAML は波括弧・キーのクォート・カンマを省き、代わりにインデントで構造を示します。手で編集する設定ファイルでは、この見やすさが効いてきます。
YAMLの基本構文
キーと値
コロンとスペースで区切ってキーと値を記述します。クォートは基本的に不要です。
name: 田中太郎
age: 30
city: 東京
クォートが必要になるのは、別の型として解釈されてしまう値(version: "1.0"、country: "NO"、zip: "07030")や、-・:・[・{・# のような特殊文字で始まる値です。それ以外はクォートなしで書けます。
ネスト(階層構造)
インデントを使って階層を表現します。インデントにはスペースを使い、タブは使えません。スペース2つが一般的です。
user:
name: 田中太郎
address:
prefecture: 東京都
city: 渋谷区
配列
ハイフンとスペース(- )で各要素を列挙します。
fruits:
- りんご
- バナナ
- みかん
コメント
# 以降がコメントとして扱われます。これは JSON にはない機能で、設定ファイルに説明を残せる大きな利点です。
# データベース接続設定
database:
host: localhost # 本番環境では変更する
port: 5432
複数行の文字列
パイプ(|)を使うと改行を保持したまま複数行の文字列を書けます。> を使うと改行が半角スペースに変換されます。
description: |
これは1行目です。
これは2行目です。
改行がそのまま保持されます。
YAMLがよく使われる場面
Kubernetes
Pod やDeployment などのリソース定義は YAML で記述するのが標準的です。コメントを残せるため、設定の意図を説明しながら管理できます。
apiVersion: apps/v1
kind: Deployment
metadata:
name: web-app
spec:
replicas: 3
selector:
matchLabels:
app: web
GitHub Actions
ワークフローの定義ファイル(.github/workflows/)は YAML 形式です。ジョブの依存関係やステップの記述が直感的に読めるのは、YAML のインデント構文のおかげです。
name: CI
on:
push:
branches: [main]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- run: npm test
Docker Compose
複数のコンテナをまとめて管理する docker-compose.yml も YAML 形式です。サービス間の依存関係やポートマッピングを宣言的に書けます。
services:
web:
image: nginx:latest
ports:
- "8080:80"
db:
image: postgres:16
environment:
POSTGRES_PASSWORD: secret
その他
Ansible のプレイブック、Spring Boot の application.yml、OpenAPI(Swagger)の定義ファイルなど、YAML は設定記述の場面で幅広く採用されています。
YAMLの注意点
便利な反面、いくつかの落とし穴もあります。
インデントのズレが構文エラーに直結するため、エディタのインデント設定(スペース幅、タブ/スペースの切り替え)には気をつける必要があります。
また、yes/no、on/off が真偽値として解釈されるなど、暗黙の型変換が起きることがあります。ノルウェーの国コード NO が false に変換されてしまう有名な例は、YAML の仕様が抱える問題として知られています。文字列として扱いたい場合はクォートで囲みましょう。
country: "NO" # クォートがないと false になる
アンカー・マルチドキュメント・チョンピングなど構文ごとの書き方を体系的に確認したい場合は YAML 書き方ガイド を参照してください。
JSON との詳しい比較は YAMLとJSONの違い で解説しています。
YAMLとJSONの変換
YAML と JSON は表現力がほぼ同じで、相互変換が可能です。YAML で書いた設定を JSON として API に渡したい場合や、JSON のデータを人が読みやすい YAML に変換したい場合があります。
YAML to JSON を使えば、ブラウザ上で手軽に YAML から JSON への変換ができます。変換ルールの詳しい解説は YAMLをJSONに変換する方法 を参照してください。
逆方向の変換には JSON to YAML 変換ツール が使えます。JSON の API レスポンスや設定をブラウザ内で読みやすい YAML に変換でき、Kubernetes マニフェストや Docker Compose の作成に便利です。変換ルールの詳細は JSON を YAML に変換する方法 で解説しています。
よくある質問
YAML は何の略ですか?
「YAML Ain't Markup Language」の略です。もともとは「Yet Another Markup Language(また別のマークアップ言語)」でしたが、マークアップ言語ではなくデータ記述のための形式であることを示すために、再帰的な名前に改められました。
YAML はプログラミング言語ですか?
いいえ。YAML はデータのシリアライゼーション(直列化)フォーマットで、設定ファイルやデータの受け渡しに使います。条件分岐やループといった制御構文はありません。
.yml と .yaml に違いはありますか?
ありません。どちらの拡張子も YAML パーサーはまったく同じように扱います。公式仕様では .yaml を推奨していますが、1 文字短い .yml も広く使われています。
なぜ Kubernetes や GitHub Actions は YAML を使うのですか?
人が読み書きしやすく、コメントで「なぜこの値なのか」を残せるためです。波括弧やカンマがないぶん、手で編集する設定ファイルに向いています。
YAML と JSON はどう違いますか?
データモデルは同じですが、YAML はコメント・複数行文字列・アンカー(再利用)が書け、構造をインデントで表します。JSON はより厳格でパースが速く、API のやり取りに向いています。並べた比較は YAMLとJSONの違い で解説しています。
country: NO と書いたのに false になってしまうのはなぜですか?
YAML 1.1 系のパーサ(PyYAML など、いまも広く使われています)は、クォートなしの NO を真偽値 false として解釈します。これは「Norway problem」と呼ばれる有名な落とし穴です。country: "NO" のようにクォートすれば文字列のまま残ります。詳しくは YAML 書き方ガイド で解説しています。
まとめ
- YAML はインデントで構造を表現する人間に読みやすいデータ形式
- コメントが書けるため、設定ファイルに説明を残せる
- Kubernetes、GitHub Actions、Docker Compose など DevOps 領域で広く使われている
- インデントのズレや暗黙の型変換には注意が必要
- JSON との相互変換は YAML to JSON で簡単にできる
関連記事
- YAML 書き方ガイド — インデントからアンカーまで全構文を例つきで解説
- YAML と JSON の違い — どちらを選ぶかの判断基準
- YAML を JSON に変換する方法 — 変換手順の詳細
- JSON の書き方ガイド — YAML と比較されることが多い JSON の構文
- JSON にコメントは書ける? — YAML にあって JSON にないコメント機能の代替案
- JSON を YAML に変換する方法 — Kubernetes / Docker 設定づくりの逆方向変換

