【やむる】

YAML とは?

💡 「インデントで整理」する設定ファイルの定番
📌 このページのポイント
YAML — 人間に読みやすいデータ形式 server: host: localhost port: 3000 database: name: myapp features: - auth - logging { "server": { "host": "localhost", "port": 3000 }, "features": [ "auth", "logging" ] } YAML(インデントで構造化) JSON(括弧で構造化) 設定ファイル(Docker, K8s, GitHub Actions等)でよく使われる
YAMLのイメージ
ひよこ ひよこ

YAMLってどこで使うの?

ペンギン先生 ペンギン先生

docker-compose.yml、.github/workflows/ci.yml、kubernetes のマニフェスト、Ansible のPlaybookなど、設定ファイルで大活躍だよ。JSONに比べてコメントが書ける(# で始まる行)し、クォートも省略できるから人間が書きやすいんだ

ひよこ ひよこ

YAMLで失敗しやすいポイントは?

ペンギン先生 ペンギン先生

①インデントにタブを使うとエラー(スペースのみ)、②インデントのずれが意味を変える、③「yes」「no」「on」「off」が勝手にブール値になる(文字列にしたいなら引用符で囲む)。特に③は有名な罠で、ノルウェーの国コード「NO」がfalseに変換される問題は「Norway problem」と呼ばれているよ

ひよこ ひよこ

YAMLの書き方の基本は?

ペンギン先生 ペンギン先生

キーと値はコロン+スペースで区切る(key: value)。リストはハイフンで始める(- item)。ネストはインデント(通常2スペース)。複数行の文字列は「|」(改行を保持)か「>」(改行を折りたたみ)で記述。この4つを覚えれば基本的なYAMLは読み書きできるよ

ひよこ ひよこ

YAMLよりいい形式はないの?

ペンギン先生 ペンギン先生

TOMLは明示的な型指定ができて曖昧さが少ない。Rustのcargo.tomlやPythonのpyproject.tomlで採用されているよ。CUEやJsonnetはYAMLの生成に使われる「テンプレート言語」で、Kubernetesの複雑なYAMLを生成するのに使われているね。ただ、YAMLの普及度は圧倒的だから当面は必須知識だよ

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「YAML」って出てきたら「インデントベースの読みやすい設定ファイル形式」と思えればだいたいOK!
📖 おまけ:英語の意味
「YAML Ain't Markup Language」 = YAMLはマークアップ言語ではない
💬 元は「Yet Another Markup Language」だったけど「マークアップ言語じゃないよ」と改名したよ
← 用語集にもどる