YAML は何に使用されますか?

もう 1 つのテキスト データ形式は YAML ( Yet Another Markup Language、後にYAML Ain't Markup Language ) です。これは、ネットワーク経由で送信するためにオブジェクトをシリアル化するために使用されます (XML や JSON がこの方法で使用されるのと同じです)。人間が判読できるため、Docker、Kubernetes、Ansible などの構成ファイルを作成するためにも使用されます。YAML をファイル (構成ファイルなど) に保存する必要がある場合は、2 つのうちの 1 つを使用します。拡張子: .yaml または .yml。

言語の構文

XML では、山かっこ ( <> ) はタグを指定するために使用されます。JSON では、中括弧 ( {} ) を使用します。YAML では改行とインデントが使用されます。

データはキーと値のペアとして保存されます。キーは文字列で、値はさまざまなデータ型 (文字列、数値、true/false、配列など) になります。キーは引用符なしで記述されます。

情報が YAML にどのように保存されるかを見てみましょう。

タイプ ジャワ YAML
整数

int number = 5
数: 5
分数

double number = 4.3
数: 4.3
ブール変数

boolean valid = false
有効: false
有効: いいえ
有効: オフ

* 有効なブール値: true/false、yes/no、on/off。


String city = "New York"
都市: ニューヨーク
都市: 「ニューヨーク」
都市: 「ニューヨーク」

* 3 つのオプションはすべて同等です。

特殊文字を含む文字列

String line = "aaa\nbbb"
行: "aaa\nbbb"
コード内のコメント

// comment
# コメント
物体

public class Person {
  String name = "Dennis";
  int age = 32;
}

* オブジェクトの構造を確認できるように、オブジェクトのクラスが指定されています。

人物:
  名前: "デニス"
  年齢: 32

※属性前のインデントに注意してください。すべての属性で同じである必要があります。

単純な値のリスト

var ages = 
    List.of(1, 3, 5, 9, 78, -5);
年齢: [1、3、5、9、78、-5]
年齢:
  - 1
  - 3
  - 5
  - 9
  - 78
  - -5

* どちらのオプションも同等です。
** リストの各要素はハイフンでマークされています。

オブジェクトのリスト

class Person {
    String name;
    int age;

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
}
…
List<Person> people = List.of(
        new Person("Ian", 21),     
        new Person("Marina", 25),     
        new Person("Owen", 73)      );
人物:
  - 名前:「イアン」
    年齢:21歳
  - 名前:「マリーナ」
    年齢:25歳
  - 名前:「オーウェン」
    年齢:73歳

Java と同様に、リストの要素はリストにすることができます。つまり、オブジェクトを相互にネストすることができます。リストの次の要素を示すハイフンは、親キーに対して水平方向にオフセットすることも、親キーのすぐ下に配置することもできます。重要なことは、すべての要素が同じ形式であるということです。これは、混乱やあいまいなネスト階層を避けるのに役立ちます。

年齢:
  - 1
  - 3
  - 5
  - 9
  - 78
  - -5
年齢:
- 1
- 3
- 5
- 9
- 78
- -5

テキスト値を操作する場合、さらに 2 つのニュアンスがあります。

  1. 複数行のテキスト。次のようにテキストを保存できます。

    multilineText: "1 行目\n2 行目\n....n 行目"

    しかし、それを読もうとすると非常に不快になるでしょう。|があります。(パイプ) 記号。テキストを別の方法で記述するために使用できます。

    複数行テキスト: |
     1 行目
     2 行目
     ....
     n 行目

    2 番目のオプションの方が便利であることに同意するでしょう?

  2. 長い行。テキストを 1 行に保ちながら、IDE の表示ワークスペースに収まるようにしたい場合は、> (大なり) 記号を使用できます。

    singlelineText: >
     begin
     ...
     同じ行を続けます
     ...
     end

    すべてのテキストは 1 行として扱われます。

複数の YAML データ構造を 1 つのファイルに書き込む必要がある場合は、それらを--- (3 つのハイフン)で区切る必要があります。実際には、これが必要になることはほとんどありませんが、この可能性があることを認識しておくことが最善です。

YAMLドキュメントの例

いくつかの Java データ構造 (クラス) と対応するオブジェクトを作成し、そのオブジェクトを YAML として表現してみます。


class Family {
   private Date weddingDate;
   private Person wife;
   private Person husband;
   private List<Person> children;

   // Getters and setters are omitted
}

class Person {
   private final String name;
   private final boolean isWoman;
   private int age;

   public Person(String name, int age, boolean isWoman) {
       this.name = name;
       this.age = age;
       this.isWoman = isWoman;
   }

// Getters and setters are omitted

}

public static void main(String[] args) {
   Person wife = new Person("Ann", 37, true);
   Person husband = new Person("Alex", 40, false);
   var children = List.of(
           new Person("Iris", 12, true),
           new Person("Olivia", 5, true)
   );
   Date weddingDate = new Date(/* some long */);

   Family family = new Family();
   family.setWeddingDate(weddingDate);
   family.setWife(wife);
   family.setHusband(husband);
   family.setChildren(children);
}

YAML での有効な表現:

---
結婚式 日付: 2000-12-03
妻:
 名前: アン
 年齢: 37 歳
 女性: はい
夫:
 名前: アレックス
 年齢: 40 歳女性: 子供
 なし:  - 名前: アイリス    年齢: 12 歳    女性: 本当  - 名前: オリビア    年齢: 5    女:本当 ---