YAMLとは?シンプルで使いやすいデータ形式と構造の基本を解説!
thumb_yaml_01
YAMLとは?シンプルで使いやすいデータ形式と構造の基本を解説!
アンドエンジニア編集部
2022.12.10
この記事でわかること
YAMLとは、データシリアライゼーション言語というデータ形式の仕様の1種を指します
データが軽量で文法が覚えやすい特徴があり、多くのプログラミング言語で利用できます
設定ファイルやログファイルなどに数多く採用されており、データ交換にも活用できます

YAMLとは

img_yaml_01

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

Rubyとは何か?Rubyの特徴やできることについて解説
Perlとは?できることやメリット・デメリットについて解説!

JSONとは

JSONとは、軽量なテキスト形式を用いたデータ記述言語の1つです。JSONは「JavaScript Object Notation」の略で、JavaScriptやECMAScriptで定義されているオブジェクト表記法です。YAML同様に、テキスト形式で保存されるので初心者でも簡単に記述でき、JavaScriptだけでなく主要なプログラム言語から利用されています。

【参考】:Introducing JSON

JSONはYAMLのサブセットに相当しますので、各プログラミング言語のYAMLフレームワークからJSONのデータを取り込むこともできます。

JSONとは?概要からJSONファイルフォーマットまで解説!

YAMLとデータ分析

大量のデータ分析を行う場合では、CSVファイルの他にYAMLファイルを用いてデータ処理を行うことも多くなります。代表的なプログラミング言語のPythonはデータ分析に強みがあり、Pandasなどのライブラリを使って簡単にデータ処理を行うことができます。

YAMLファイルに大量のデータが蓄積されている場合には、Pythonに限らずfor文のような繰り返し処理でデータをロードし、データ分析に活用します。

YAMLの使い方

img_yaml_02

YAMLの使い方ですが、YAML自体は言語仕様が定義されたものですので、実際に利用するプログラミング言語やツールが必要です。また、テキストエディタがあればYAMLファイルを編集することもできます。

YAMLの開き方

YAMLの開き方は、プログラミング言語やツール、テキストエディタなどからYAMLファイルを開いて使用します。YAMLファイルは、”.yml”または”.yaml”の拡張子を持つテキスト形式のデータファイルです。YAMLをサポートするプログラミング言語のフレームワークやパーサーでそのまま利用できます。

YAMLファイルをサポートするテキストエディタがあれば、直接エディタで開きデータの確認や編集が可能です。Visual Studio Code(VSCode)のようなコードエディタがあれば、YAMLの構文に従って、データの参照・編集が可能です。

【参考】:Visual Studio Code

Visual Studio 2022の新機能がIDEで歴代最高な理由

YAMLの書き方

YAMLはキーバリュー型ですので”キー: 値”でデータを表します。ソフトウェアが提供する設定ファイルやログファイルでは、YAMLが利用されることがあります。この場合は、利用者は何も意識することなくYAMLファイルを利用しているはずです。

テキストエディタでYAMLファイルを開いたり、YAMLを処理するパーサーを勉強する場合は、実際の構文の理解が必要となります。Online YAML Parserなどのように、オンラインでYAMLの確認ができるサイトもいくつかあります。慣れるまではYAMLの仕様を確認しながら記述してみると良いでしょう。

【参考】:Online YAML Parser

YAMLの値に指定する型

img_yaml_03

ここでは、キーバリューの”キー: 値”で用いる値の型を解説していきます。主に使用するのは、文字列・数値・論理値などです。ここでは、その具体的な用法を見ていきましょう。

文字列型

文字列はシングルクォーテーション(')やダブルクォーテーション(")で括らずに利用できます。

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のデータ構造

img_yaml_04

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は慣れてしまえばシンプルで使いやすい

img_yaml_05

YAMLはJSONのスーパーセットとは言え、違う構文ではないだろうか、と思った人も多いでしょう。実際には、クォーテーションを使わずに単純に記述することができますので、人も理解しやすく動作も高速に処理することができます。そのため、設定ファイルやログファイルに数多く採用されています。

ソフトウェア開発でのYAMLは、各プログラミング言語用のフレームワークで簡単に利用できます。まずはお使いの言語用フレームワークの対応内容を確認することをおすすめします。

JSON入門!基本フォーマットからファイルの作り方まで解説
気になる人のXをフォローしよう!
アンドエンジニア公式LINEでは
新着記事やエンジニアに役立つ情報をお届け!
日々のキャッチアップをお手伝いします!
マイナビITエージェント

編集部オススメコンテンツ

Sponsored
【年収±診断】6つの質問に答えて、真の市場価値をチェック!
マイナビITエージェント
Sponsored

アンドエンジニアへの取材依頼、情報提供などはこちらから

お問い合わせ・情報提供
はじめて転職される方へ
SE・システムエンジニア(IT/通信/インターネット) 求人一覧

編集部おすすめコンテンツ

Sponsored
【年収±診断】6つの質問に答えて、真の市場価値をチェック!
マイナビITエージェント
Sponsored

アンドエンジニアへの取材依頼、情報提供などはこちらから

Powered by マイナビ AGENT