YAMLとは
YAMLとは、データシリアライゼーション言語と呼ばれるデータ形式の仕様の1種を指します。略称は、公式サイトによると「YAML Ain't a Markup Language」から取られたものです。日本語にすると「YAMLはマークアップ言語ではない」と訳され、再帰的な意味合いを持ちます。
【参考】:YAML
YAMLのコンセプト
YAMLは人間にとって読みやすいものであり、そのデータはプログラミング言語間での移植が容易であるべきとの考えに基づいて設計されています。そのためには、それぞれのプログラミング言語の持つデータ構造にマッチする必要があり、なおかつデータの移植性を考慮した汎用性も求められます。この設計方針に基づき、仕様のバージョンアップを行っています。
YAMLの特徴
YAMLはデータシリアライズ言語として、判読性が高く人にやさしいキーバリューのデータ形式を取ります。そのため、データが軽量で文法が覚えやすい特徴があります。
さらにデータ形式と構造に一貫性があり、プログラミング言語間でのデータ交換が容易であることが挙げられます。利用用途が多岐に渡り、設計ファイルのデータ形式として利用したり、ログファイルやインターネットのメッセージ交換に利用したりします。
具体的なプログラミング言語としては、C/C++・JavaScript・Perl・PHP・Python・Rubyなど、数多くの利用実績があります。
YAMLの言語仕様とバージョン
YAMLは2001年に初版が発行され、3年間の共同設計の成果として2004年にYAML 1.0が仕様化されました。最初はPerlでフレームワークが記述されており、2003年にはRubyに搭載されました。
YAMLはJSONをサブセット(下位部分)として位置付けており、YAML 1.1から1.2にかけてJSONのスーパーセット(上位部分、上位互換)とすべく、YAMLの仕様化が進められました。このYAML 1.2の普及が進んだことで、多くのプログラム言語で利用することが可能となりました。
最新バージョンは、2021年10月に発行されたYAML 1.2.2です。
【参考】:YAML™ Specification Index 【参考】:YAML Ain’t Markup Language (YAML™) version 1.2
JSONとは
JSONとは、軽量なテキスト形式を用いたデータ記述言語の1つです。JSONは「JavaScript Object Notation」の略で、JavaScriptやECMAScriptで定義されているオブジェクト表記法です。YAML同様に、テキスト形式で保存されるので初心者でも簡単に記述でき、JavaScriptだけでなく主要なプログラム言語から利用されています。
【参考】:Introducing JSON
JSONはYAMLのサブセットに相当しますので、各プログラミング言語のYAMLフレームワークからJSONのデータを取り込むこともできます。
YAMLとデータ分析
大量のデータ分析を行う場合では、CSVファイルの他にYAMLファイルを用いてデータ処理を行うことも多くなります。代表的なプログラミング言語のPythonはデータ分析に強みがあり、Pandasなどのライブラリを使って簡単にデータ処理を行うことができます。
YAMLファイルに大量のデータが蓄積されている場合には、Pythonに限らずfor文のような繰り返し処理でデータをロードし、データ分析に活用します。
YAMLの使い方
YAMLの使い方ですが、YAML自体は言語仕様が定義されたものですので、実際に利用するプログラミング言語やツールが必要です。また、テキストエディタがあればYAMLファイルを編集することもできます。
YAMLの開き方
YAMLの開き方は、プログラミング言語やツール、テキストエディタなどからYAMLファイルを開いて使用します。YAMLファイルは、”.yml”または”.yaml”の拡張子を持つテキスト形式のデータファイルです。YAMLをサポートするプログラミング言語のフレームワークやパーサーでそのまま利用できます。
YAMLファイルをサポートするテキストエディタがあれば、直接エディタで開きデータの確認や編集が可能です。Visual Studio Code(VSCode)のようなコードエディタがあれば、YAMLの構文に従って、データの参照・編集が可能です。
【参考】:Visual Studio Code
YAMLの書き方
YAMLはキーバリュー型ですので”キー: 値”でデータを表します。ソフトウェアが提供する設定ファイルやログファイルでは、YAMLが利用されることがあります。この場合は、利用者は何も意識することなくYAMLファイルを利用しているはずです。
テキストエディタでYAMLファイルを開いたり、YAMLを処理するパーサーを勉強する場合は、実際の構文の理解が必要となります。Online YAML Parserなどのように、オンラインでYAMLの確認ができるサイトもいくつかあります。慣れるまではYAMLの仕様を確認しながら記述してみると良いでしょう。
【参考】:Online YAML Parser
YAMLの値に指定する型
ここでは、キーバリューの”キー: 値”で用いる値の型を解説していきます。主に使用するのは、文字列・数値・論理値などです。ここでは、その具体的な用法を見ていきましょう。
文字列型
文字列はシングルクォーテーション(')やダブルクォーテーション(")で括らずに利用できます。
message: Hello World
文字列に特殊な意味を持つ”#”や”true”などの文字を入れる場合はクォーテーションで括り、構文の識別子と区別します。
description: '# is called sharp.'
同様に数字を文字として扱う場合も、区別するためにクォーテーションで括ります。
数値型
数値には、整数、浮動小数点があります。整数は、符号あり・なしを指定できます。10進数の他、8進数、16進数も記述できます。
your-score: 85
average: 70
offset: +15
浮動小数点は、数値に加えて無限大を意味する”.inf”、非数(NaN)を意味する”.nan”などが使用できます。
deviation value: 54.75
error data: .inf
missing value: .nan
論理値ほか
論理値は”true”と”false”で表します。その他にはタイムスタンプのデータや、NULLを表すことなどが可能です。
status: true
date: 2022-11-20
comment: null
YAMLのデータ構造
YAMLはスカラー、シーケンス、マッピングと呼ばれる基本データ構造から成ります。YAMLはこれらを、インデントで表現するのが基本的な考え方です。JSONとは異なり、#でコメントが利用できます。
ネストする場合は、インデントを用います。インデントはスペース(” “)で位置合わせするだけで利用でき、慣習としてはスペースを2個(” “)入れて記述する場合が多いです。
スカラーのデータ構造
スカラーは、文字列や数値、論理値が選択できます。コロン(”:”)、スペース(” “)でキーと値を区切ります。スカラーのサンプルは以下の通りです。文字列は通常括らずにそのまま記述できます。
grade: 2
status: true
id: 1023
name: Takashi
JSONでは以下の書式と同一です。
{
"grade": 2,
"status": true,
"id": 1023,
"name": "Takashi"
}
シーケンスのデータ構造
シーケンスは、 配列やリストを表します。ダッシュ(”-”)、スペース(” “)の後に、要素を記述します。シーケンスのサンプルは以下の通りです。
- Takashi
- Yoshiko
- Hiroshi
- Keiko
JSONでは以下の書式と同一です。
[
"Takashi",
"Yoshiko",
"Hiroshi",
"Keiko"
]
マッピングのデータ構造
マッピングは、キーバリューの組み合わせでハッシュや辞書を登録できます。マッピングのサンプルは以下の通りです。
male:
- Takashi
- Hiroshi
female:
- Yoshiko
- Keiko
JSONでは以下の書式と同一です。
{
"male": [
"Takashi",
"Hiroshi"
],
"female": [
"Yoshiko",
"Keiko"
]
}
ブロックスタイルとフロースタイル
これまでにお話ししたデータの書式はブロックスタイルという記述形式です。前述の書式の他にフロースタイルという書式があります。フロースタイルはカンマ区切り(”,”)で全体を波括弧(”{ }”)や角括弧(”[ ]”)で括ったものです。
スカラーの説明で紹介した4つのハッシュ(キーバリューのペア)は、フロースタイルで次のように1行で表すことができます。
{grade: 2, status: true, id: 1023, name: Takashi}
シーケンスの説明で紹介した4つの文字列においても、次のように1行で表すことができます。
[Takashi, Yoshiko, Hiroshi, Keiko]
インデントとネストの関係
YAMLでは、インデントの位置により、同一階層かネストなのか判断します。
次のデータは、インデントを入れ忘れた場合です。
- This
-
- is
- a
- pen.
JSONのデータ形式では次のようになります。
[
"This",
null,
"is",
"a",
"pen."
]
インデントを3番目と4番目のデータに入れてみます。
- This
-
- is
- a
- pen.
JSONのデータ形式では次のように表されます。
[
"This",
[
"is",
"a"
],
"pen."
]
ドキュメントの開始と終了
ドキュメントの開始や区切りは、ダッシュを3つ(”---”)で表します。終了は、ドットを3つ(”...”)です。複数のデータ形式を混在させる場合などに明示的に指定します。利用する場合は、YAMLのパーサーがこの機能をサポートしている必要があります。そのため、この機能を用いる機会はそんなに多くはないでしょう。
---
{grade: 2, status: true, id: 1023, name: Takashi}
---
[Takashi, Yoshiko, Hiroshi, Keiko]
…
YAMLは慣れてしまえばシンプルで使いやすい
YAMLはJSONのスーパーセットとは言え、違う構文ではないだろうか、と思った人も多いでしょう。実際には、クォーテーションを使わずに単純に記述することができますので、人も理解しやすく動作も高速に処理することができます。そのため、設定ファイルやログファイルに数多く採用されています。
ソフトウェア開発でのYAMLは、各プログラミング言語用のフレームワークで簡単に利用できます。まずはお使いの言語用フレームワークの対応内容を確認することをおすすめします。
編集部オススメコンテンツ
アンドエンジニアへの取材依頼、情報提供などはこちらから