YAML ファイルとは?
YAML ファイルは、Unicode ベースのデータシリアル化言語である言語 YAML (YAML Ain’t Markup Language) で構成されています。構成ファイル、インターネット メッセージング、オブジェクトの永続化などに使用されます。YAML は、そのファイルに .yaml 拡張子を使用します。その構文は、特定のプログラミング言語に依存しません。基本的に、YAML は人間との対話用に設計されており、最新のプログラミング言語とうまく連携します。任意のネイティブ データ構造のシリアル化のサポートにより、YAML ファイルの可読性が向上しましたが、解析とファイル生成のプロセスが少し複雑になりました。
簡単な歴史
YAML は 2001 年に初めて提案され、Clark Evans、Ingy döt Net、および Oren Ben-Kiki によって開発されました。 YAML は最初、マークアップ言語としての目的を示すために「もう 1 つのマークアップ言語」を意味すると言われました。その後、その目的がデータ指向であることを示すために、「YAML Aint Markup Language」として転用されました。
YAML ファイル形式
YAML ファイルは、次のデータ型で構成されます
- スカラー: スカラーは、文字列、整数、ブール値などの値です。
- シーケンス: シーケンスは、各項目がハイフン (-) で始まるリストです。リストはネストすることもできます。
- マッピング: マッピングにより、キーと値を一覧表示できます。
構文
- 空白: 空白のインデントは、ネストと全体的な構造を示すために使用されます。
名前:ジョン・スミス
コンタクト:
ホーム: 1012355532
オフィス: 5002586256
住所:
通り: |
123 竜巻横丁
スイート 16
都市: イーストセンタービル
状態: KS
- コメント: コメントは「#」記号で始まります。
# これは YAML コメントです
- リスト: ハイフン (-) は、各メンバーが別の行にあるリスト メンバーを示すために使用されます。リスト メンバーは角括弧 ([…]) で囲み、メンバーをコンマ (,) で区切ることもできます。
- A
- B
- C
[A、B、C]
- 連想配列: 連想配列は中括弧 ({…}) で囲まれます。キーと値はコロン (:) で区切られ、各ペアはコンマ (,) で区切られます。
{name: John Smith, age: 20}
- 文字列: 文字列は、二重引用符 (") または単一引用符 (’) の有無にかかわらず記述できます。
サンプル文字列
「サンプルストリング」
「サンプル文字列」
- スカラー ブロック コンテンツ: スカラー コンテンツは、次を使用してブロック表記で記述できます。
- |: All live breaks are significant.
- >: Each line break is folded to space. It removes the leading whitespace for each line.
データ: |
YAML
(YAML はマークアップ言語ではありません)
データシリアライゼーション言語です
データ: ?
YAML (YAML はマークアップ言語ではない)
データシリアライゼーション言語です
- 複数のドキュメント: 複数のドキュメントは、1 つのストリーム内で 3 つのハイフン (—) で区切られます。ハイフンはドキュメントの開始を示します。ハイフンは、ディレクティブとドキュメント コンテンツを区切るためにも使用されます。ドキュメントの終わりは、3 つのドット (…) で示されます。
---
資料1
---
資料2
...
- 型: 値の型を指定するには、二重の感嘆符 (!!) を使用します。
a: !!float 123
b: !!str 123
- タグ: タグをノートに割り当てるには、アンパサンド (&) を使用し、そのノードを参照するには、アスタリスク (*) を使用します。
名前:ジョン・スミス
請求先: &id01
通り: |
123 竜巻横丁
スイート 16
都市: イーストセンタービル
状態: KS
発送先: *id01
- ディレクティブ: YAML ドキュメントの前に、ストリーム内のディレクティブを配置できます。ディレクティブは、パーセント記号 (%) で始まり、その後に名前が続き、その後にスペースで区切られたパラメーターが続きます。
%YAML 1.2
---
ドキュメントの内容
YAML ファイルの例
以下の docker yaml ファイルの例 をご覧ください。
topology:
database_node_name: docker_controller
docker_controller_node_name: docker_controller
self_service_portal_node_name: docker_controller
kvm_compute_node_names: kvm_compute1
docker_compute_node_names: docker_compute1
YAML と JSON
基本的に、JSON と YAML はどちらも、人間が判読できるデータ交換形式を提供するために開発されています。 YAML は、JSON 形式のスーパーセットとして実現されます。これは、YAML パーサーを使用して JSON を解析できることを意味します。この理論の実際の実装は少しトリッキーですが。したがって、YAML と JSON の基本的な違いを以下に示します。
YAML | JSON |
---|---|
シリアル化されたデータを解析する複雑で時間のかかるプロセス | JSON シリアル化されたデータをよりシンプルな設計で迅速かつ簡単に解析 |
コミュニティのサポートが少ない | 大規模なコミュニティ サポートと人気 |
コメントをサポート | コメントをサポートしていません |
他のデータオブジェクトの参照を使用する機能 | オブジェクト参照で複雑な構造をシリアライズすることはできません |
階層は、ダブル・スペース文字を使用して示されます。タブ文字は使用できません | オブジェクトと配列は中括弧と大括弧で示されます。 |
文字列の引用符はオプションですが、一重引用符と二重引用符をサポートしています。 | 文字列は二重引用符で囲む必要があります。 |
ルート ノードは、有効なデータ型のいずれかにすることができます | ルート ノードは、配列またはオブジェクトのいずれかでなければなりません。 |