YAMLという言葉を目にする機会は増えたものの、その名前の由来やJSONとの具体的な違いが分からず、学習の第一歩でつまずいていませんか。
この記事では、YAMLの正体であるデータシリアライズ言語としての役割から、インデントで階層を表現する基本ルールまでを解説します。
読み終える頃には、DockerやGitHubActionsなどで使われる設定ファイルの読み書きや修正を自信を持って行えるようになります。
この記事でわかること
・ データ記述に特化したYAMLの役割と「マークアップ言語ではない」理由
・ インデントを基本とする、可読性の高い構文ルール
・ コメント機能の有無などで比較するJSONとの決定的な違い
・ DockerやKubernetesなど、設定ファイルとしての具体的な活用シーン
YAMLとは設定ファイルでよく使われるデータ記述言語
YAMLは、主にソフトウェアの設定ファイルやデータ交換に使用される、人間が読み書きしやすいことを重視したデータシリアライズ言語です。
データシリアライズとは、プログラムで扱うデータ構造を、保存や通信に適したテキスト形式などに変換することを指します。
YAMLはインデントを用いてデータの階層構造を表現するため、括弧や引用符が少なく、見た目がすっきりしているのが大きな特徴です。
このシンプルさは、その名前に込められた設計思想に由来します。
「YAML Ain't Markup Language」という名前に込められた設計思想
「YAML Ain't Markup Language」は、「YAMLはマークアップ言語ではない」という意味を持つ再帰的な頭字語です。
これは、HTMLやXMLのように文書の構造や見た目を定義するマークアップ言語とは異なり、YAMLは純粋にデータを表現することに特化しているという設計思想を強調しています。
もともとは「Yet Another Markup Language(もうひとつのマークアップ言語)」の略でしたが、後にデータ用途を明確にするため現在の名称に変更された経緯があります。
このデータ中心の思想は、YAMLのシンプルな構文ルールにも表れています。
これだけは押さえたい!YAMLの基本構文ルール
YAMLの構文は、いくつかの基本的なルールを覚えるだけで、誰でも直感的に理解できます。
ここでは、特に重要な4つのルールをコード例とともに紹介します。
インデント(字下げ)で階層構造を表現する
YAMLでは、半角スペースによるインデント(字下げ)を用いてデータの階層構造を表現します。
同じ階層のデータはインデントの深さを揃えることで示します。
注意点として、タブ文字の使用は認められておらず、必ず半角スペースを使う必要があります。
スペースの数は任意ですが、プロジェクトやチーム内で2つまたは4つに統一するのが一般的です。
キーと値で構成される「マップ(ハッシュ/辞書)」
マップは、キーと値をコロン(:)で対にしてデータを表現する方法で、他のプログラミング言語におけるハッシュや辞書に相当します。
「キー:値」の形式で記述し、コロンの後には必ず半角スペースを入れます。
このキーと値のペアをインデントでネストさせる(入れ子にする)ことで、より複雑なデータ構造も直感的に作成可能です。
複数の要素を並べる「シーケンス(リスト/配列)」
シーケンスは、複数のデータを順序付けて並べたもので、リストや配列にあたります。
各要素の先頭にハイフン(-)と半角スペースを付けて記述します。
シーケンス内のすべての要素は、同じ階層であることを示すために、ハイフンのインデントを揃える必要があります。
マップの値としてシーケンスを定義することも頻繁に行われます。
コメントアウトでメモを残す方法
コメントは、プログラムの動作に影響を与えずに、ファイル内に説明やメモを残すための機能です。
シャープ記号(#)を先頭に付けると、その行のシャープ以降の文字列がコメントとして扱われます。
設定値の意図を書き留めたり、一時的に特定の行を無効化して動作を確認したりする際に便利です。
これらの基本的な書き方を踏まえると、他のデータ形式との違いがより明確になります。
YAMLとJSONの違いを3つのポイントで比較
YAMLはJSONのスーパーセット(上位互換)であり、すべての有効なJSONファイルは有効なYAMLファイルとしても解釈できます。
しかし、両者には書きやすさや機能面でいくつかの重要な違いが存在します。
ここでは代表的な3つの違いを解説します。
比較ポイント1:可読性と記述のシンプルさ
YAMLの最大のメリットは、人間にとっての読みやすさです。
JSONが括弧やカンマを多用してデータの構造を明示するのに対し、YAMLはインデントで構造を示すため、記述が非常にシンプルになります。
また、多くの場合で文字列を囲む引用符も省略できるため、特に設定ファイルのように一覧性の高さが求められる場面で優位性を発揮します。
比較ポイント2:コメントを記述できるか
YAMLではコメントを記述できますが、JSONの標準仕様ではコメント機能がサポートされていません。
YAMLでは`#`を使うことで、行の任意の位置からコメントとしてメモを残せます。
これにより、設定値の意図や注意点をファイル内に直接書き込めるため、共同作業や将来のメンテナンス性が向上します。
JSONで同様のことを行うには、データ構造内にコメント用のキーを追加するといった工夫が必要です。
比較ポイント3:データ型の柔軟性
YAMLはJSONよりも多彩なデータ型を扱うことが可能です。
JSONが文字列、数値、真偽値、配列、オブジェクトといった基本的なデータ型に限定されるのに対し、YAMLはこれらに加えて日付やタイムスタンプ、改行を含む複数行の文字列などを直感的に表現できます。
さらに、アンカー(&)とエイリアス(*)を使えば、同じデータブロックをファイル内で再利用でき、記述の重複を避けられます。
では、より古くから存在するXMLとはどのような違いがあるのでしょうか。
YAMLはXMLと比べてどう違う?
YAMLとXMLはどちらも階層構造を持つデータを表現できますが、構文の冗長性と可読性において大きな違いがあります。
XMLは、開始タグと終了タグでデータを囲むため、データ量に対して記述が冗長になりがちです。
一方、YAMLはインデントベースのシンプルな構文でデータそのものに集中しやすく、人間が手で書く際の手間が格段に少なくなります。
このため、特に人が直接編集する機会の多い設定ファイルのような用途では、XMLよりもYAMLが好まれる傾向にあります。
この人間中心の設計思想から、YAMLは現代の開発現場で幅広く利用されています。
なぜエンジニアはYAMLを使うのか?具体的な活用事例を紹介
YAMLのシンプルさと可読性の高さは、特に設定の記述が中心となる近年の開発ツールで重宝されています。
ここでは、YAMLが実際にどのように使われているか、具体的な事例を4つ紹介します。
Docker Composeでのコンテナ設定
DockerComposeは、複数のDockerコンテナを定義し、一括で実行・管理するためのツールです。
docker-compose.ymlというYAMLファイルに、使用するコンテナのイメージ、ポート設定、永続化するボリューム、ネットワークなどを記述します。
YAMLの階層構造が、アプリケーションを構成する各サービスの関係性を直感的に表現するのに役立ちます。
Kubernetesでのマニフェストファイル
Kubernetesはコンテナ化されたアプリケーションのデプロイや管理を自動化するプラットフォームで、その設定はYAML形式のマニフェストファイルで定義します。
PodやService、Deploymentといったリソースのあるべき状態を宣言的に記述するため、複雑なアプリケーション構成も構造的に管理しやすいYAMLが標準的に採用されています。
GitHub Actionsでのワークフロー定義
GitHubActionsは、GitHubのリポジトリ内でビルド、テスト、デプロイなどのCI/CDパイプラインを自動化する機能です。
ワークフローの定義は.github/workflows/ディレクトリ内のYAMLファイルで行います。
コードのプッシュやプルリクエストといったイベントをトリガーに、どのようなジョブをどのような順序で実行するかを記述します。
AnsibleでのPlaybook記述
Ansibleは、ITインフラの構成管理を自動化するためのツールです。
Playbookと呼ばれるYAMLファイルに、サーバーに対してどのような処理(パッケージのインストール、設定ファイルの配置、サービスの再起動など)を行うかをタスクのリストとして記述します。
処理の流れが上から下に読めるため、YAMLのシーケンス構文と非常に相性が良いです。
ところで、YAMLの名前の由来である再帰的頭字語は、他の技術分野でも見られます。
【豆知識】YAML以外にもある再帰的頭字語の世界
再帰的頭字語とは、頭字語(アクロニム)の正式名称に、その頭字語自身が含まれているものを指します。
YAML以外にも、技術の世界には有名な例がいくつか存在します。
例えば、フリーソフトウェアプロジェクトの「GNU」は「GNU's Not Unix!(GNUはUnixではない)」の略です。
また、プログラミング言語の「PHP」は、もともとの名称から「PHP: Hypertext Preprocessor」へと変更されました。
これらは、開発者の遊び心やプロジェクトの思想を表現する手段として使われています。
最後に、YAMLに関してよく寄せられる質問とその回答をまとめました。
YAMLと「YAML Ain't Markup Language」に関するよくある質問
ここでは、YAMLの学習を始めたばかりの方が抱きやすい疑問について、簡潔に回答します。
Q. なぜYAMLは「マークアップ言語ではない」と名乗っているのですか?
HTMLなどが文書構造を示すマークアップ言語であるのに対し、YAMLは純粋なデータ表現に特化していることを強調するためです。
文書の装飾ではなく、設定値やオブジェクトといったデータを扱うための言語であるという設計思想を示しています。
Q. JSONとYAMLはどちらを使えば良いですか?
人間が直接編集する設定ファイルには可読性の高いYAMLが、プログラム間の厳密なデータ交換にはシンプルなJSONが適しています。
YAMLはコメントが書ける利点もありますが、JSONの方が対応ライブラリは豊富です。
用途に応じて選択します。
Q. YAMLを学ぶことでどのようなメリットがありますか?
DockerやKubernetes、CI/CDツールなど、現代のクラウドネイティブな開発で必須の設定ファイルを読み書きできるようになります。
インフラのコード化(IaC)やDevOpsの文脈で広く使われているため、多くの現場で役立つ実践的なスキルが身につきます。
まとめ
本記事では、YAMLが「YAML Ain't Markup Language」と名乗る理由、インデントを基本とする構文ルール、そしてJSONやXMLとの違いについて解説しました。
また、DockerやKubernetesなどの具体的な活用事例を通じて、その実用性も示しました。
YAMLは、人間にとっての分かりやすさを追求したデータシリアライズ言語であり、現代の開発環境において重要な役割を担っています。