DockerやGitHub Actionsの設定ファイルを開いたとき、.ymlという拡張子のファイルを見かけます。これがYAMLです。JSONに似た役割を持ちながら、人間が書きやすい文法で設計されたデータ形式です。
この記事ではYAMLの基本的な書き方と、よく比較されるJSONとの違いをわかりやすく解説します。
YAMLとは?
YAML(ヤムル)は YAML Ain't Markup Language の略で、設定ファイルやデータの記述に使われるフォーマットです。
JSONと同じく、文字列・数値・リスト・オブジェクトを表現できます。違いはJSONが{ }や[ ]でデータを囲むのに対し、YAMLはインデント(字下げ)と改行で構造を表します。そのため、記号が少なく視覚的に読みやすいのが特徴です。
YAMLの基本的な書き方
JSONとYAMLの比較
同じデータをJSON形式とYAML形式で書くと次のようになります。
// JSON
{
"name": "田中太郎",
"age": 28,
"skills": ["JavaScript", "Python"],
"active": true
}
# YAML name: 田中太郎 age: 28 skills: - JavaScript - Python active: true
YAMLのほうが記号が少なく、一目で構造が把握しやすいのがわかります。
データ型の書き方
- 文字列:クォートなしでもOK。スペースや特殊文字がある場合は
"で囲む - 数値:そのまま書く。
age: 28 - 真偽値:
true/false(小文字) - null:
nullまたは空欄 - リスト(配列):行頭に
-(ハイフン+スペース) - マップ(オブジェクト):
key: valueの形式
ネスト(入れ子)の書き方
user:
name: 田中太郎
address:
city: 東京
zip: 100-0001
tags:
- admin
- editor
インデントはスペース2つが一般的です。タブは使えないので注意してください。
コメントの書き方
YAMLでは#でコメントを書けます。JSONにはコメント機能がないため、設定ファイルにメモを残したいときはYAMLが便利です。
# データベース設定 database: host: localhost port: 5432 # デフォルトポート name: myapp
複数行のテキスト
# | を使うと改行を保持 description: | 1行目 2行目 # > を使うと改行をスペースに変換 summary: > 長い文章を 折り返して書ける
YAMLが使われている代表的なツール
- Docker Compose:
docker-compose.ymlでコンテナ構成を定義 - GitHub Actions:
.github/workflows/*.ymlでCIパイプラインを記述 - Kubernetes:リソースの定義ファイルにYAMLを使用
- Ansible:インフラ構成の自動化にYAMLを使用
よくある質問(FAQ)
- YAMLとJSONはどちらを使えばいいですか?
- 人間が手で編集する設定ファイルにはYAMLが向いています(コメントが書け、記号が少ない)。プログラム間でデータをやり取りするAPIレスポンスやデータ保存にはJSONが一般的です。
- タブとスペースの違いで壊れてしまいます
- YAMLはタブを使えません。インデントには必ずスペースを使います。エディタで「タブをスペースに変換」する設定を有効にしておくと防げます。インデントの深さは統一していれば2でも4でも構いません。
- YAMLファイルをJSONに変換できますか?
- 変換できます。YAML→JSON・JSON→YAMLの相互変換はツールで簡単に行えます。APIでJSONしか受け付けないサービスに、YAMLで書いた設定をそのまま貼り付けたいときに役立ちます。
yesやonがtrueになってしまいます- YAML 1.1の仕様では
yes/no/on/offが自動的にtrue/falseに変換されます。これを避けるには"yes"のようにクォートで囲んでください。YAML 1.2ではこの挙動は廃止されています。
まとめ
- YAMLはインデントで構造を表すデータ形式で、設定ファイルによく使われる
- JSONより記号が少なく、コメントも書けるため人間が読み書きしやすい
- インデントはスペースのみ(タブ不可)、2スペースが一般的
- Docker・GitHub Actions・Kubernetesなどで広く採用されている
YAMLとJSONを相互変換したいときは、以下のツールをご利用ください。
- YAML→JSON変換:YAMLを貼り付けてJSONを即出力
- JSON→YAML変換:JSONをYAML形式に変換
- JSONフォーマッター:変換後のJSONを整形・検証