受講料が最大70%OFF 受講料が最大70%OFF

YAMLとは?

YAML (YAML Ain’t Markup Language) とは、構造化されたデータを表現するためのフォーマットのことです。

次のような用途で使うのに向いているフォーマットとなっています。

  • 各種設定ファイル
  • データ保存用 (シリアライゼーション)
  • データ交換用フォーマット
  • ログファイル

使用目的は「XML」と似ているのですが、XMLに比べてYAMLは読みやすい、書きやすい、わかりやすいといった利点があります。

■記述例
--- # プログラミング言語、ブロック形式
- Java
- Python
- Ruby
--- # 買い物リスト、インライン形式、またはフロー形式
[Java, Python, Ruby]

「#」は行コメントで「—」は、1つのファイル内に複数のYAMLドキュメントを埋め込むときに用いるセパレータとなっています。

連想配列で記述する場合は、下記の通りです。

--- # ブロック
name: Potepan Style
age: 30
--- # インライン
{name: Potepan Style, age: 30}

YAMLはあくまで「仕様」であるため、YAMLを処理するライブラリの「実装」が必要です。

なお、XMLに関しては下記の記事で詳しく解説しています。

【関連記事】

▶︎JavaでXMLを読み込みする方法を解説!概要や出力方法も合わせて紹介

YAMLのファイル構造の構成要素

YAMLのファイル構造でよく使用する構成要素として、ハッシュ・リスト・ブロックリテラルの3つを紹介します。

【ハッシュ】

インデントした子で、キーと値をコロン(:)で区切って表記すると、ハッシュを作成できます。

JFrame:
defaultCloseOperation: JFrame.EXIT_ON_CLOSE
title: Sample Frame
width: 800
height: 400

中かっこ({})を使ってJSON風の表記によるハッシュも作成可能です。

キーと値の各ペアはカンマで区切ります。

JFrame: {defaultCloseOperation: JFrame.EXIT_ON_CLOSE, title: Sample, Frame, width: 800, height: 400}

【リスト】

リストは、YAMLの基礎となる機能です。

リストを作成するには、リストの各要素の先頭に(-)を付け、スペースのインデントと組み合わせて記述しましょう。

- Java
- Python
- Ruby

角かっこ([])を使った、JSON風の表記によるリストも作成可能です。

[Java, Python, Ruby]

【ブロックリテラル】

ブロックリテラルは、YAMLファイルの中に大量のテキストを簡単に記述可能です。

縦棒(|)のディレクティブを使った場合、テキスト内の改行は保持されます。

XMLやその中でCDATAを使ったときの、見にくい表記とは一線を画しているのが特徴です。

text: |
This is a really long text
that spans multiple lines (but preserves new lines).
It does not need to be escaped with special brackets,
CDATA tags, or anything like that

YAMLプロセッサは、最初の行の先頭文字から後をテキストとみなし、テキスト内の改行をすべて保持します(その前のインデントのスペースは無視します)。

一方、大なり記号(>)のディレクティブを使った場合、改行はすべて無視され、1行の長いテキストとみなされます。

text: >
This is a really long text
that spans multiple lines (but preserves new lines).
It does not need to be escaped with special brackets,
CDATA tags, or anything like that

この2つの他に、縦棒とプラス記号(|+)のディレクティブ(先行するスペースは削除し、改行と後続のスペースは保持)や、(>-)のディレクティブ(すべてのスペースを削除)などがあります。

YAMLのライブラリについて

JavaのYAMLライブラリには、主に次の4種類があります

この中でも、下記のような理由でよく利用されるのが「SnakeYAML」です。

JavaでYAMLの読み込み

SnakeYAMLで外部ファイル読み込むサンプルコードは下記の通りです。

■記述例(person.yaml)
!!sample.Person
name: Yuichi
age: 26
father: !!sample.Person
name: Hiroshi
age: 54
mother: !!sample.Person
name: Yumi
age: 53
■記述例(Person.java)
package sample;

public class Person {
    protected String name;
    protected int age;
    protected Person father;
    protected Person mother;

    public void setName(String name) {
        this.name = name;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public void setFather(Person father) {
        this.father = father;
    }

    public void setMother(Person mother) {
        this.mother = mother;
    }
}
■記述例(SetupPerson.java)
package sample;
import org.yaml.snakeyaml.Yaml;

public class SetupPerson {
    public Person normalSetup() {
        Person person = new Person();
        person.setName("Yuichi");
        person.setAge(26);
        Person father = new Person();
        person.setName("Hiroshi");
        person.setAge(54);
        Person mother = new Person();
        person.setName("Yumi");
        person.setAge(53);
        person.setFather(father);
        person.setMother(mother);
        return person;
    }

    public Person yalmSetup() {
        return (Person) new Yaml().load(getClass().getResourceAsStream("person_fixtures.yaml"));
    }
}

エンジニアになりたい人に選ばれるプログラミングスクール「ポテパンキャンプ 」

ポテパンキャンプは卒業生の多くがWebエンジニアとして活躍している実践型プログラミングスクールです。 1000名以上が受講しており、その多くが上場企業、ベンチャー企業のWebエンジニアとして活躍しています。

基礎的な学習だけで満足せず、実際にプログラミングを覚えて実践で使えるレベルまで学習したいという方に人気です。 プログラミングを学習し実践で使うには様々な要素が必要です。

それがマルっと詰まっているポテパンキャンプでプログラミングを学習してみませんか?

卒業生の多くがWebエンジニアとして活躍

卒業生の多くがWeb企業で活躍しております。
実践的なカリキュラムをこなしているからこそ現場でも戦力となっております。
活躍する卒業生のインタビューもございますので是非御覧ください。

経験豊富なエンジニア陣が直接指導

実践的なカリキュラムと経験豊富なエンジニアが直接指導にあたります。
有名企業のエンジニアも多数在籍し品質高いWebアプリケーションを作れるようサポートします。

満足度高くコスパの高いプログラミングスクール「ポテパンキャンプ」

運営する株式会社ポテパンは10,000人以上のエンジニアのキャリアサポートを行ってきております。
そのノウハウを活かして実践的なカリキュラムを随時アップデートしております。

代表の宮崎もプログラミングを覚えサイトを作りポテパンを創業しました。
本気でプログラミングを身につけたいという方にコスパ良く受講していただきたいと思っておりますので、気になる方はぜひスクール詳細をのぞいてくださいませ。