YAML とは?

YAML (YAML Ain’t Markup Language) とは、わかりやすいデータ シリアライズ (serialize) 言語です。設定ファイルの記述に使用されることが多く、あらゆるプログラミング言語に対応しています。

YAML では、プログラマーにとっての使いやすさが重視されています。 別のデータ シリアライズ言語である JSON の完全な上位版であり、 完全という言葉のとおり、JSON でできることだけでなくそれ以上のことも可能です。 大きな違いとして、YAML では改行とインデントが明確な意味を持ちますが、角カッコと波カッコを使用する JSON はそうではありません。

YAML はその形式ゆえに設定の記述に適しているため、CircleCI の設定ファイルに採用されています。

YAMLとは? YAML解説イラスト

YAML の書き方

YAML ファイルの基本構造は、キーと値を組み合わせるマップです。 マップは、プログラミング言語やお作法によって、ディクショナリやハッシュ、オブジェクトとも呼ばれます。

大ざっぱに言えば、キーと値が YAML のすべてです。

キー: 値

YAML サンプル: スカラー型

数字、ブール変数、文字列 (引用符は任意) のあらゆるスカラー型を値として使用できます。 たとえば、config.yml の 1 行目は、通常、次のように記述します。

version: 2

キーの文字列は、アンダースコア (_)、ハイフン、スペースで区切ることができます。 CircleCI ではアンダースコアを採用しています

キーの値が複数行にわたる場合、”|” 記号を使用して “リテラル ブロック” 形式で記述することもできます。 リテラル ブロックは、シェル コマンドを定義する場合に特に有用です。

command: |
    if [ "${CIRCLE_BRANCH}" == "master" ];
      then ansible-playbook site.yml -i production;
    fi

複数行の文字列では、行頭のインデントは除去されます。

YAML サンプル: コレクション型

インデントを使うだけで、コレクションを作成できます。

environment:
    TEST_REPORTS: /tmp/test-reports

項目 (イメージなど) のリスト (YAML では “シーケンス” と呼びます) は、ハイフン (-) を使って記述できます。

docker:
    - image: ubuntu:14.04
    - image: mongo:2.6.8
      command: [mongod, --smallfiles]
    - image: postgres:9.4.1

シーケンスの 2 番目の項目に、imagecommand という 2 つのキーがあることに注目してください。 command キーの記述方法は、JSON 形式のリストの記述方法と同じです。 なぜなら、YAML は (前述のとおり) JSON の上位版だからです。

最後に、YAML ではタブ文字は使用できません。そのため、タブを使用してインデントする場合には、テキスト エディターでスペースに変換する必要があります。 circleci/config.yml で YAML 構文のミスをしてしまい、CircleCI のビルドが打ち切られてしまうことがあるかもしれません。そうなった際でも、オンライン バリデーション ツールでミスを簡単に特定、修正できるので、ご安心ください。

YAML おすすめ記事一覧

このガイドでは、CircleCI の設定ファイルをスラスラ書くうえで必要なポイントをすべて説明しました。 ただし、YAML には他の機能もあります。詳しくは YAML の公式サイトや、とっつきやすい (その分漏れもある) Learn X in Y minutes の記事をご覧ください。

本記事の次には、以下の記事がおすすめです。