インフラ・開発環境の設定ファイルでよく登場する「YAML」。
「YAMLって何?」「どう読むの?」「どんなときに使うの?」と疑問に感じる方も多いでしょう。
本記事では、YAMLの意味・読み方・基本的な書き方・JSONとの違い・実際の用途まで、初心者にもわかりやすく解説していきます。
YAMLを初めて学ぶ方でも理解できるよう丁寧に説明しますので、ぜひ最後までご覧ください。
YAMLとは?意味と読み方をわかりやすく解説
それではまず、YAMLの意味と基本について解説していきます。
YAML(ヤムル)とは、人間が読みやすいデータシリアライズフォーマットです。
YAMLは「YAML Ain’t Markup Language(YAMLはマークアップ言語ではない)」という再帰的な略語です。
かつては「Yet Another Markup Language(もうひとつのマークアップ言語)」と呼ばれていましたが、後に現在の名前に変更されました。
読み方は「ヤムル」が一般的ですが、「ワイエーエムエル」と読む場合もあります。
【YAMLの基本的な書き方例】
# ユーザー情報の設定
user:
name: 田中太郎
age: 30
email: tanaka@example.com
hobbies:
– 読書
– プログラミング
インデント(字下げ)で階層構造を表現し、クォートや括弧を使わずに書けるため人間にとって非常に読みやすいという特徴があります。
YAMLのファイル拡張子
YAMLファイルの拡張子は「.yaml」または「.yml」の2種類があります。
どちらも同じYAML形式であり、機能的な違いはありません。
ツール・フレームワークによって推奨される拡張子が異なることがあるため、使用するツールの規約に従うとよいでしょう。
たとえば、Docker Composeは「docker-compose.yml」、GitHub Actionsは「.github/workflows/*.yml」を標準とします。
新規にファイルを作成する場合は「.yaml」が YAML公式の推奨とされています。
YAMLの基本的なデータ型
YAMLでは次のデータ型を表現できます。
| データ型 | YAML記法の例 |
|---|---|
| 文字列 | name: tanaka または name: “tanaka” |
| 整数 | age: 30 |
| 浮動小数点 | score: 3.14 |
| 真偽値 | active: true / active: false |
| Null | memo: null または memo: ~ |
| 日付 | date: 2024-01-01 |
| リスト | – item1 / – item2 |
| マッピング | key: value |
JSONと異なり、YAMLでは日付型がネイティブでサポートされている点も特徴のひとつです。
インデントのルール
YAMLではインデントが構造を決定するため、正確なインデントが非常に重要です。
インデントにはスペース(空白文字)のみ使用し、タブ(Tab)は使用してはいけません。
インデントのスペース数は2または4が一般的ですが、一貫していれば何スペースでも構いません。
インデントのズレはYAMLの最も多いバグ原因のひとつであるため、エディタのYAML対応プラグインを使って確認することが推奨されます。
YAMLの主な用途と活用場面
続いては、YAMLが実際にどのような場面で使われているかを確認していきます。
設定ファイルとしてのYAML
YAMLは設定ファイルとして非常に広く使われています。
Docker ComposeのサービスやネットワークはYAMLで定義されます。
KubernetesのPod・Deployment・ServiceなどのリソースもすべてYAMLで記述します。
GitHub ActionsのCI/CDワークフロー・Ansibleのプレイブック・Prometheusの監視設定など、インフラ・DevOpsの世界でYAMLはデファクトスタンダードと言えるでしょう。
静的サイトジェネレーターでのYAML(front matter)
JekyllやHugoなどの静的サイトジェネレーターでは、マークダウンファイルの先頭に「front matter(フロントマター)」としてYAMLを記述します。
【front matterの例】
—
title: “YAMLとは?”
date: 2024-01-15
tags: [yaml, tutorial]
—
(以降にマークダウン本文が続く)
front matterはページのメタデータ(タイトル・日付・タグ)を定義するために使われ、静的サイト構築でYAMLが広く活用される場面のひとつです。
プログラミングでのYAML利用
Pythonでは PyYAML・ruamel.yaml ライブラリ、Rubyでは標準ライブラリの psych、Javaでは SnakeYAML などがよく使われます。
設定情報のロード・テストデータの管理・CLIツールの設定など、プログラム内でYAMLを扱う機会は多いでしょう。
YAMLを使う際の注意点
続いては、YAMLを使う際に特に注意すべきポイントを確認していきます。
特殊な文字のエスケープ
YAMLでは「:」「{」「}」「[」「]」「#」「&」「*」など特殊な意味を持つ文字を含む場合、文字列をクォートで囲む必要があります。
【クォートが必要な例】
message: “Hello: World” # コロンを含む場合
url: “https://example.com” # コロンを含む場合
value: “true” # 文字列の true と真偽値を区別する場合
アンカーとエイリアスの活用
YAMLにはアンカー(&)とエイリアス(*)を使って同じ内容を再利用できる機能があります。
共通設定を1か所にまとめることで DRY(Don’t Repeat Yourself)の原則に沿った設定ファイルを書けます。
複数環境の設定ファイルでアンカーを活用すると重複を減らせます。
YAML爆弾(Billion Laughs Attack)への注意
YAMLのアンカー機能を悪用した「Billion Laughs Attack(YAML爆弾)」というセキュリティ攻撃が知られています。
ネストされたアンカーの展開で膨大なメモリを消費させる攻撃です。
外部から受け取ったYAMLを処理する際は、yaml.safe_load()(Pythonの場合)のような安全な読み込み関数を使うことが重要です。
まとめ
本記事では、YAMLの意味・読み方・基本的な書き方・データ型・ファイル拡張子・用途・注意点まで詳しく解説しました。
YAMLは人間が読みやすいデータシリアライズフォーマットであり、Docker・Kubernetes・GitHub Actions・静的サイトジェネレーターなど多くのツールで標準的に使われています。
インデントのルール・特殊文字の扱い・アンカーの活用を理解することで、YAMLを使いこなせるようになります。
ぜひ本記事を参考に、実際に設定ファイルを書いてYAMLの感覚を掴んでみてください。