YAMLとは
YAMLは、「YAML Ain't Markup Language」の頭字語であり、人間が読みやすいデータシリアル化形式です。様々なプログラミング言語間での相互運用性を目指して設計されており、開発者にとって多目的なツールとなっています。
コンピューティングの世界では、データシリアル化は、複雑なデータ構造を簡単に保存や送信可能な形式に変換し、後で再構築する方法です。YAMLは、これを簡単かつ効率的に実現するための手段を提供します。その構造と文法は人間によって容易に理解できるように設計されており、YAMLファイルの読み取りと解釈が直感的に行えます。
その名前に反して、YAMLは実際にはマークアップ言語の一種であり、XMLやJSONと同様のものです。ユニークな名前である「YAML Ain't Markup Language」は、実際には再帰的な頭字語であり、ユーザーフレンドリーな設計への遊び心のある表現です。
YAMLの文法
基本的なルール
YAMLの文法は人間による読み取りの容易さを目指して設計されています。以下はいくつかの基本的なルールです。
- YAMLファイルは
.yaml
または.yml
で終わる必要がある - YAMLは大文字と小文字を区別する
- YAMLではタブの使用は許可されず、代わりにスペースがインデントに使用される
- スペースのインデントは構造を示すために使用される
- リストの要素は先頭にハイフン(
-
)を付けて示される
データ型
YAMLは、整数、浮動小数点数、文字列、ヌル、ブール値、日付と時刻など、多くのプログラミング言語で共通のデータ型をサポートしています。
スカラーデータ型
スカラータイプは、もっとも単純なデータ型です。以下が含まれます。
整数
: 数字のシーケンス(例:7
)浮動小数点数
: 小数点を持つ数値(例:7.1
)文字列
: 文字のシーケンス。YAMLでは、シングルクォートまたはダブルクォートを使用して文字列を示す(例:"Hello, World!"
)ブール値
:true
とfalse
の2つの可能な値を持つ型ヌル
:値を持たない型で、null
または~
で表される
コレクションデータ型
YAMLにはコレクションタイプもあります。これには次のものが含まれます。
- リスト
シーケンスとも呼ばれるリストは、アイテムのコレクションです。YAMLでは、先頭にハイフンを付けて示されます。
pets:
- cat
- dog
- fish
- マップ
辞書とも呼ばれるマップは、キーと値のペアのコレクションです。
pets:
cat: Whiskers
dog: Rover
fish: Bubbles
YAMLの一般的なユースケース
YAMLのシンプルさ、多様性、人間に読みやすい特性により、様々なアプリケーションで採用されています。
設定ファイル
おそらくYAMLのもっとも一般的な用途は設定ファイルです。アプリケーションやサーバー、ツールでは、パラメータや初期設定を行うための設定ファイルがしばしば必要です。読みやすさとシンプルさから、YAMLはこれらのファイルのための理想的な形式です。開発者やシステム管理者は必要に応じて設定を素早く理解し、修正することができます。
例えば、Dockerは、複数のコンテナを定義するためにDocker ComposeファイルでYAMLを使用し、Kubernetesはアプリケーションの展開とスケーリングを制御するためにYAMLを使用して設定ファイルを作成します。
データのシリアル化
データのシリアル化は、データを容易に保存や送信できる形式に変換し、後で再構築するプロセスです。複雑なデータ構造を処理し、可読性を保つ能力から、YAMLはシリアル化のための人気のある選択肢です。
これにより、異なるデータ構造を持つ言語間でのデータ交換にYAMLが優れた選択肢となります。例えば、Pythonプログラムは複雑なデータ構造をYAMLファイルにシリアル化し、その後JavaScriptプログラムが読み取り、理解することができます。
Infrastructure as Code(IaC)
IaC(Infrastructure as Code)は、物理的なハードウェア構成やインタラクティブな設定ツールではなく、機械可読な定義ファイルを使用してコンピューティングインフラストラクチャーを管理およびプロビジョニングするプロセスです。
複雑なデータ構造を容易に表現できるYAMLは、IaCのシナリオで頻繁に使用されます。AnsibleやKubernetesなどのツールでは、YAMLファイルを使用してインフラストラクチャーの状態を定義および管理し、YAMLの可読性とシンプルさを活用してこれらの定義を明確かつ理解しやすくしています。