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 系の仕様に基づいて執筆しています。