流れ8の8語目 / 10

YAML

開発

Webサーバーのテンプレートを YAML で書いてプルリクエストを出したら、CIが落ちて

「ここ、インデントずれてるよ」
「YAML」って、何のことだろう…?

YAML(ヤムル)は、設定を書くための書き方の1つです。

「キー: 値」の形で書き、行の頭の字下げ(インデント)で「何の中に入っているか」を表します。字下げがずれると、意味が変わったり、読み込めなくなったりします。

このページで分かること読む 約3分・問題 3問
  • YAML(ヤムル)は、設定を書くための書き方(形式)の1つ
  • 「キー: 値」で書き、字下げ(インデント)で「何の中に入っているか」を表す
  • 字下げは半角スペースで書く
  • 「#」から後ろはコメント(メモ)

身近な例えで理解する

本の目次では、章の下に節が字下げして並びます。字下げの位置で、その節がどの章に入っているかが分かります。

  • 章の見出し親のキー
  • 字下げして並ぶ節子のキーや値
  • 字下げの位置インデント
  • 字下げがずれて、別の章の節に見えるインデントがずれて、別のものの中身として読まれる

目次なら人が見て「たぶんこうだろう」と分かりますが、コンピューターは字下げの位置どおりに読みます。

ちょっと確認

Q1先輩のひとこと

次の YAML を見た先輩:「インデントずれてるよ」何がおかしい? ``yaml server: name: web-01 ports: - 80 - 443 ``

例えを外して、実際のしくみ

ここからは実際のしくみ
キーと値

name: web-01 のように、「キー」「:」「半角スペース」「値」の順に書きます。並びのもの(リスト)は、行の頭に「- 」(ハイフンと半角スペース)をつけて書きます

字下げで中身を表す

下の例では、name と ports が server の中に入っていて、80 と 443 が ports の中身です。

# Webサーバー
server:
  name: web-01
  ports:
    - 80
    - 443

もし ports: の行を server: と同じ位置まで左に寄せると、ports は server の中ではなく、別のものとして読まれます

字下げは半角スペースで

YAMLの決まり(仕様)で、字下げにタブは使えません。全角スペースも字下げにはなりません。何文字ずつ下げるかは決まっていませんが、同じ階層はそろえます。チームでは2文字ずつにそろえることが多いです

コメントとJSONとの関係

「#」から行の終わりまではコメント(人向けのメモ)で、設定としては読まれません。YAMLは JSON(→55 JSON)を含むように作られていて、表せるものはよく似ています。CloudFormation のテンプレート(→77 IaC)、CIの設定、コンテナの設定などでよく使われます

このページのまとめ

YAML
設定を書くための書き方の1つ。字下げで中身を表す
キー: 値
「name: web-01」のような、名前と中身の組
インデント(字下げ)
行の頭の半角スペース。何の中に入っているかを表す
#
そこから行の終わりまでがコメント

先輩のひとことの意味

先輩「ここ、インデントずれてるよ」

「行の頭の字下げの位置がずれているので、その行が本来入るべきものの中ではなく、別のところに入っている(または読み込めない)と判断されているよ。字下げを半角スペースでそろえ直して」という意味です。

練習問題で確かめる

Q24択

YAMLの字下げの書き方として正しいものは?

Q34択

YAMLで、行の中に「#」を書くとどうなる?

参考資料

ご意見・「これで例えて!」を募集しています

ご意見・ご感想・質問・間違いのご指摘など、何でもお気軽にお寄せください。「この言葉も例えで説明してほしい」「こんな例えなら分かりやすい」という声をもとに、新しいページや例えを作ります。

  • 説明してほしいITの言葉
  • 例えてほしい場面(部活・アルバイト・家事など)
  • 分かりにくかったところ・間違いのご指摘

意見箱は準備中です。

解説・例え・練習問題はすべてオリジナルです。参考にしているのは公式ドキュメントのみです。ご意見・ご感想・間違いのご指摘など、何でもお寄せください。確認してすぐに直します。

LinuCはLPI-Japanの登録商標です。当サイトはLPI-Japanおよび他の企業・団体とは関係ありません。

運営:core