YAML

YAML（ヤメル、ヤムル）とは、構造化データやオブジェクトを文字列にシリアライズ（直列化）するためのデータ形式の一種。

 特徴 
テキストのため可読である。その概念はXMLやプログラミング言語であるC、Python、Perlからきている。YAMLの原案はクラーク・エバンス、ブライアン・インガーソン、オーレン・ベンキクが共同で出した。

YAMLは再帰的に定義された頭字語でありその語源は「」である。初期には「」と言われていたが、マークアップよりもデータ重視を目的としていたために後付されてできた名前である。しかしながら XML（本当のマークアップ言語）がデータシリアライズ目的のために頻繁に使用されるため、 YAMLを軽量マークアップ言語と考えることもできる。類似の規格としてJSONがある。

 表記方法 

インデントを使い階層構造を表現する。ただし、インデントにはタブが使えずスペースのみが使える。スペース2個単位でインデントすることが多い。

 例 
# は行コメント。---は、一つのファイル内に複数のYAMLドキュメントを埋め込むときに用いるセパレータ。
 リスト 

--- # お好みの映画、ブロック形式
- Casablanca
- Spellbound
- Notorious
--- # 買い物リスト、インライン形式、またはフロー形式
[milk, bread, eggs]

 連想配列 

--- # ブロック
name: John Smith
age: 33
--- # インライン
{name: John Smith, age: 33}

 各行の改行の維持 
data: |
  There was a young fellow of Warwick
  Who had reason for feeling euphoric
      For he could, by election
      Have triune erection
  Ionic, Corinthian, and Doric

 最終行の改行のみ維持し他はスペース一字に置換 
data: >
  Wrapped text
  will be folded
  into a single
  paragraph

  Blank lines denote
  paragraph breaks

 ハッシュのリスト 
- {name: John Smith, age: 33}
- name: Mary Smith
  age: 27

 リストのハッシュ 
men: [John Smith, Bill Jones]
women:
  - Mary Smith
  - Susan Williams

 データ構造 
YAML木は3種類の基本ノード、sequence, mapping, scalar からなる"YAML represents any native data structure using three node kinds: sequence ...; mapping ...; and scalar" YAML specification v1.2.2.。各ノードは kind, content, tag によって特徴づけられる"Each YAML node requires ... kind and content ... tag" YAML specification v1.2.2.。

 実装 
YAMLは次の言語で利用可能である。

ActionScript
C/C++
C#/.NET
Cocoa
Dart
Golang
Haskell
Java
JavaScript
Lua
Nim
OCaml
Perl
PHP (PECLのモジュールやSymfonyのYAMLコンポーネントがある)
Python
Ruby (Ruby 1.8から標準ライブラリに含まれる。)
Rust
Tcl
Vim

 脚注 

 関連項目 
 データ記述言語
 マークアップ言語
 軽量マークアップ言語

 外部リンク 

 YAML検証ツール YAML Lint
 Best Online YAML Converter Convert YAML Strings into JSON, XML, CSV
 YAMLからテーブルへのコンバーター
 YAML 修復ツール。

Category:マークアップ言語
Category:データシリアライゼーションフォーマット
Category:オープンフォーマット