※本ページにはプロモーション(広告)が含まれています
インデントで階層を表現する人間に読みやすい設定ファイル形式。Kubernetes・Docker Compose・CI/CD設定など、DevOps分野の標準フォーマット。
詳しい解説
YAMLは「YAML Ain't Markup Language(YAMLはマークアップ言語ではない)」の再帰的頭字語で、人間が読み書きしやすい形式を目指して設計されたデータシリアライズ言語です。拡張子は `.yaml` または `.yml` で、JSONと同じデータ構造を表現できますが、記述はよりシンプルになります。
JSONの `{}` や `,` を使わず、インデントで階層を表現し、キーと値は `key: value` のコロン区切りで書きます。配列は `- item` のハイフン記法で列挙します。コメントが `#` で書ける、複数行文字列が自然に扱える、といったJSONにない利点があります。
代表的な用途はアプリケーションの設定ファイルで、Kubernetesのマニフェスト、Docker Compose、GitHub Actionsのワークフロー定義、Ansibleのplaybook、CI/CD設定(.gitlab-ci.yml、.travis.yml)、npmパッケージ以外の設定など、DevOps分野で圧倒的なシェアを持ちます。
一方で、インデントがシンタックスの一部であるため、スペースとタブを混在させるとパースエラーになる、コロンの後に半角スペースが必須、文字列に見える値が暗黙的に真偽値や数値に変換される(`yes`→true、`1.0`→数値)といった罠があります。特に『ノルウェーの問題』と呼ばれる、国コード `NO` が真偽値の `false` として解釈されてしまう事例は有名です。
安全性のためには、YAML 1.2準拠のパーサーで、`yaml.safe_load()`(Pythonなど)のように危険な型を除外したロード関数を使うのが推奨されます。
KubernetesでWebアプリをデプロイするマニフェストはYAMLで書きます。`apiVersion: apps/v1` から始まり、`kind: Deployment` でデプロイメントを指定、`spec.replicas: 3` で3個のPodを起動…というように、設定内容が文章のように読めるのが利点です。JSONで同じ内容を書くと中括弧とカンマだらけで可読性が落ちるため、人間が手で編集する設定ファイルはYAMLが定番になっています。
別の呼び方
ヤメル
YAML Ain't Markup Language
minto.tech スマホ(Android/iPhone)・PC(Mac/Windows)の便利情報をお届け! 月間アクセス160万PV!スマートフォン、タブレット、パソコン、地デジに関する素朴な疑問や、困ったこと、ノウハウ、コツなどが満載のお助け記事サイトはこちら!