メインコンテンツへ
Section 02第1部 準備

YAML を読む

この講座では YAML(ヤムル)を使います。朝食と買い物リストを題材に、キーと値、入れ子、リストの読み方を覚えてみましょう。

  • 同じ情報を文章・表・YAML の 3 通りで書き分けたものを見比べ、それぞれの特徴を理解する。
  • キーと値の組を読み取れる。
  • インデントが表す入れ子と、ハイフンが表すリストを読み取れる。

OSCAL のファイルには、XML、JSON、YAML という 3 つの書き方があります。どれもコンピュータが読み取りやすいように決められた形式で、同じ内容をどの形式でも書き表せることが特徴です(相互に変換が可能です)。NIST も公式のファイルを 3 形式すべてで公開しています。この講座では、3 つのうち記号がいちばん少なく、(かろうじて)人間にとっても読みやすい YAML(ヤムル)を使います。

同じ朝食を文章、表、YAML で書き比べる

今朝の朝食を誰かに伝えることを考えましょう。同じ中身を 3 通りで書いてみます。

まずは文章。

今朝はトーストを食べて、コーヒーを飲んだ。

次に表。

項目内容
主食トースト
飲み物コーヒー

最後に YAML。

朝食:
  主食: トースト
  飲み物: コーヒー

文章が、人にとってはいちばん自然ですが、コンピュータには不向きです。文章から「主食は何か」を機械的に取り出すには、文そのものを解釈しなければなりません。文章の中から「トースト」という4文字を取り出すことは、機械には難しいです。

表になると、「主食」という項目名と「トースト」という内容がはっきり分かれて、だいぶ機械向きになります。YAML は、その表をコンピュータが直接読める文字の並びにしたもの、と考えて差し支えありません。

YAML の見た目はそっけないですが、読み方さえ覚えれば難しいものではありません。表と YAML が同じ情報を持っていること、見比べて確かめられたでしょうか。ここからは読み方を 3 つに分けて確認します。

キーと値:コロンで区切る 1 行

YAML の基本の 1 行は、この形です。

主食: トースト

コロン(:)の左が項目名、右が内容です。YAML の解説では項目名を「キー」、内容を「値(あたい)」と呼ぶことが多いので、この講座でもその呼び方を使います。コロンの直後には半角スペースを 1 つ置きます。この半角スペースは飾りではなく書き方の決まりの一部で、省略するとコンピュータに正しく解釈されません。詳しくは次のセクションで扱います。

インデントが表す入れ子

朝食の YAML をもう一度見てみましょう。

朝食:
  主食: トースト
  飲み物: コーヒー

「主食」と「飲み物」の行は、行の頭に半角スペース 2 つ分の字下げがあります。この字下げを「インデント」と呼びます。インデントされた行は、直前にある字下げされていない行の値であることを意味します。つまりこの 3 行は、「朝食という項目の中に、主食と飲み物という 2 つの項目がある」と読みます。例えるなら、本の目次で、「章」の下に「節」が字下げで並ぶのと同じ要領です。

インデントを深くしていけば、入れ子は何段にも重ねられます。この講座で使う YAML は、1 段の字下げにつき半角スペース 2 つで統一します。

ハイフンが表すリスト

同じ種類のものが複数並ぶときは、行頭にハイフン(-)を付けて並べます。

果物:
  - りんご
  - みかん
  - バナナ

「果物という項目の値は、りんご、みかん、バナナの 3 つ」という意味です。ハイフンの直後にも半角スペースを 1 つ置きます。この形を、この講座では「リスト」と呼びます。

キーと値の組、入れ子、リスト。YAML の読み方はこの 3 つで全部です。この先で読む OSCAL のファイルがどれだけ大きくても、中身はこの 3 つの組み合わせでできています。

読み取り演習:買い物リストの YAML

次の YAML を読んで、下の質問に答えてください。

買い物リスト:
  日用品:
    - 洗剤
    - ティッシュペーパー
  食品:
    - 牛乳
    - 
    - 食パン
クイズ

「卵」は、どの項目の中に入っていますか。

クイズ

「日用品」のリストには、何個の項目が入っていますか。

クイズ

YAML における行頭の字下げ(インデント)の役割は、次のどれですか。

次へ

YAML が読めるようになったので、次のセクションでは自分の手で YAML を書いてみましょう。誤った YAML を直すところから始めて、白紙から小さな YAML を組み立てることに挑戦してみましょう。

このセクションは OSCAL 1.2.2 系の仕様に基づいて執筆しています。