YAML
YAML Ain’t Markup Language
階層はタブで表現するかも
階層構造になっているためBNFで表現するには少々苦しいのかやや拡張した形を使っているかもしれない
書式は基本的なところは入門で説明できるが細かいところは仕様を読めな感じであまり親切ではないかもしれないが書きやすい
---
layout: spec
title: YAML Ain't Markup Language (YAML™) リビジョン 1.2.2
---
YAML Ain’t Markup Language (YAML™) バージョン 1.2
リビジョン 1.2.2 (2021年10月1日)
著作権は現在 YAML 言語開発チーム が所有しています
著作権 2001-2009 Oren Ben-Kiki、Clark Evans、Ingy döt Net
この文書は、改変しない限り自由に複製できます。
この文書のステータス
これは YAML 仕様 v1.2.2 です。YAML 1.2 データ言語を定義します。YAML 仕様 v1.2 からの規範的な変更はありません。このリビジョンの主な目的は、エラーを修正し、明確性を高めることです。
このリビジョンでは、YAML 言語の開発プロセスをよりオープンで透明性が高く、人々が貢献しやすいものにすることを目指しています。入力形式は DocBook から Markdown に変更され、画像は独自の描画ソフトウェアではなくプレーンテキストの LaTeX ファイルから作成されています。仕様のすべてのソースコンテンツは公開ホストされています2。 以前のYAML仕様は12年前に公開されました。この間、YAMLの人気は著しく高まりました。ユーザーのニーズと期待に応えるため、言語の改良と成長に向けた取り組みが続けられています。今回の仕様改訂ではYAML自体に変更はありませんが、言語の進化と最新性を維持するためのプロセスの始まりとなります。
YAML仕様は、一見シンプルに見えるにもかかわらず、複雑すぎると思われがちです。YAMLはソフトウェアの設定によく使用されますが、これまでも、そしてこれからも、完全なデータシリアル化言語であり続けます。今後のYAMLの計画は、言語とエコシステムをより強力で信頼性の高いものにすると同時に、実装者の開発プロセスを簡素化することに重点を置いています。
今回の仕様改訂は情報の変更のみに限定されていますが、YAMLフレームワークの実装者とYAML言語のユーザーをガイドするための付属ドキュメントが用意されています。このドキュメントは、この仕様の改訂版が公開されるたびに、継続的に進化・拡張される可能性があります。
参照:
概要
YAML™(「camel」と韻を踏む)は、人間に優しく、言語横断的なUnicodeベースのデータシリアル化言語であり、動的プログラミング言語の一般的なネイティブデータ型に基づいて設計されています。設定ファイルからインターネットメッセージング、オブジェクトの永続化、データの監査や可視化まで、幅広いプログラミングニーズに活用できます。本仕様は、Unicode文字標準4と併せて、YAMLバージョン1.2を理解し、YAML情報を処理するプログラムを作成するために必要なすべての情報を提供します。
第1章 YAML入門
YAML(「YAML Ain’t Markup Language」の再帰的頭字語)は、人間に優しく、日常的なタスクにおいて最新のプログラミング言語と連携して動作するように設計されたデータシリアル化言語です。この仕様は、YAML言語とそれを支える概念の入門書です。また、YAMLを処理するアプリケーションの開発に必要な情報を網羅した仕様でもあります。
オープンで相互運用性が高く、容易に理解できるツールは、コンピューティングを飛躍的に進歩させました。YAMLは当初から、データを扱う人にとって便利で使いやすいように設計されました。YAMLはUnicodeの印刷可能文字を使用しており、その一部は構造情報を提供し、残りはデータそのものを含んでいます。YAMLは、構造化文字の数を最小限に抑え、データが自然で意味のある方法で表現できるようにすることで、独自の簡潔さを実現しています。例えば、インデントは構造を表すために、コロンはキーと値のペアを区切り、ダッシュは箇条書きを作成するために使用できます。
データ構造には様々な種類がありますが、それらはすべて、マッピング(ハッシュ/辞書)、シーケンス(配列/リスト)、スカラー(文字列/数値)という3つの基本プリミティブで適切に表現できます。YAMLはこれらのプリミティブを活用し、シンプルな型付けシステムとエイリアス機構を追加することで、あらゆるネイティブデータ構造をシリアル化するための完全な言語を構成します。ほとんどのプログラミング言語はデータのシリアル化にYAMLを使用できますが、YAMLは3つの基本プリミティブを基盤として構築された言語との連携に優れています。これには、JavaScript、Perl、PHP、Python、Rubyといった一般的な動的言語が含まれます。
プログラミング言語は数百種類ありますが、データの保存と転送に使用できる言語はごくわずかです。YAMLの可能性は事実上無限ですが、設定ファイル、ログファイル、プロセス間メッセージング、言語間データ共有、オブジェクトの永続化、複雑なデータ構造のデバッグといった一般的なユースケースに適した設計となっています。データが見やすく理解しやすいと、プログラミングはよりシンプルな作業になります。
1.1. 目標
YAML の設計目標は、優先度の高い順に以下のとおりです。
1. YAML は人間が容易に読めるものでなければなりません。
2. YAML データはプログラミング言語間で移植可能である必要があります。
3. YAML は動的言語のネイティブデータ構造と一致している必要があります。
4. YAML は、汎用ツールをサポートするために一貫したモデルを備えている必要があります。
5. YAML はワンパス処理をサポートする必要があります。
6. YAML は表現力に優れ、拡張可能である必要があります。
7. YAML は実装と使用が容易である必要があります。
1.2. YAMLの歴史
YAML 1.0仕様は、Clark Evans、Oren Ben-Kiki、Ingy döt Netによって、yaml-coreメーリングリスト5を通じた3年間の共同設計作業を経て、2004年初頭に公開されました。このプロジェクトは、ClarkとOrenによるSML-DEV6メーリングリスト(XMLの簡素化)での作業と、IngyによるPerl用プレーンテキストシリアライゼーションモジュール7に端を発しています。この言語は、それ以前の多くの技術やフォーマットから多くの影響を受けています。 最初のYAMLフレームワークは2001年にPerlで記述され、Rubyは2003年にコア言語ディストリビューションの一部としてYAMLフレームワークを初めて提供しました。 YAML 1.1仕様は2005年に公開されました。この頃、開発者たちはJSONの存在に気づきました。全くの偶然ですが、JSONは(構文的にもセマンティクス的にも)YAMLのほぼ完全なサブセットでした。 2006年、Kyrylo Simonov氏はPyYAMLとLibYAMLを開発しました。様々なプログラミング言語のYAMLフレームワークの多くはLibYAML上に構築されており、多くの開発者が実装の確かなリファレンスとしてPyYAMLを参考にしています。 YAML 1.2仕様は2009年に公開されました。その主な焦点は、YAMLをJSONの厳密なスーパーセットにすることでした。また、問題のある暗黙的な型付けの推奨事項の多くも削除されました。
1.2仕様のリリース以降、YAMLの採用は拡大を続け、多くの大規模プロジェクトが主要なインターフェース言語として使用しています。2020年には、新しいYAML言語設計チームが定期的に会合を開き、YAML言語と仕様の改善について議論し、ユーザーとユースケースのニーズと期待にさらに応えられるよう努めています。
2021年10月に公開されたこのYAML 1.2.2仕様は、YAMLの刷新された開発の道のりの第一歩です。 YAMLはかつてないほど人気が高まっていますが、その潜在能力を最大限に発揮するには、解決すべき課題が山積しています。YAML設計チームは、YAMLを可能な限り優れたものにすることに注力しています。
1.3. 用語
本文書におけるキーワード「MUST(しなければならない)」「MUST NOT(してはならない)」「REQUIRED(必須)」「SHALL(するべき)」「SHALL NOT(しないべき)」「SHOULD(すべき)」「SHOULD NOT(すべきではない)」「RECOMMENDED(推奨)」「MAY(してもよい)」「OPTIONAL(選択できる)」は、RFC 211912 に規定されているとおりに解釈されます。
本文書の残りの部分は、以下のとおり構成されています。第2章では、YAMLの主な機能について簡単に説明します。第3章では、YAML情報モデルと、このモデルとYAMLテキスト形式間の変換プロセスについて説明します。本文書の大部分、第4章、第5章、第6章、第7章、第8章、および第9章では、このテキスト形式を正式に定義します。最後に、第10章では、基本的なYAMLスキーマの推奨を示します。
第2章 言語の概要
このセクションでは、YAMLの表現力について簡単に説明します。初めて読む読者がすべての例を理解する必要はありません。むしろ、これらの例は、仕様の残りの部分を理解するための動機付けとして利用されます。
2.1. コレクション
YAMLのブロックコレクションは、スコープとしてインデントを使用し、各エントリを1行で開始します。ブロックシーケンスは、各エントリをダッシュとスペース(「-」)で示します。マッピングは、コロンとスペース(「:」)を使用して、各キー/値ペアを区切ります。コメントは、シャープ(「ハッシュ」、「シャープ」、「ポンド」、または「番号記号」-「#」とも呼ばれます)で始まります。
code:例2.1 スカラーのシーケンス(野球選手)
- Mark McGwire
- Sammy Sosa
- Ken Griffey
code:例2.2 スカラーからスカラーへのマッピング(プレイヤー統計)
hr: 65 # Home runs
avg: 0.278 # Batting average
rbi: 147 # Runs Batted In
code:例2.3 スカラーからシーケンスへのマッピング(各リーグの球団)
american:
- Boston Red Sox
- Detroit Tigers
- New York Yankees
national:
- New York Mets
- Chicago Cubs
- Atlanta Braves