YAML 学習ノート

Jekyll や GitHub Actions など、構成ファイルを YAML 形式で記述する機会が増えてきている。人間が書きやすい書式ということだが、私が最初これを編集したときにコレクション値の記述法に混乱して当惑した記憶がある。そこでノートを取ろうとしたのだが、確認すると世の中にすでに良い記事があり、それらをすぐに参照できるようにしておくのが最善と判断した。

教材

教材が示す YAML コード片を後述の YAML Viewer に与えながら構文の癖を理解すると良いようだ。YAML のバージョンがそこそこ重要だ。

YAML Tutorial

Tutorials Point によるチュートリアル。一部、Viewer を通らないコードがあるが、少しの修正で整形式になる場合がある。こういう修正が学習になる。

YAML Tutorial: Everything You Need to Get Started in Minutes | Cloudbees Blog

Python で YAML を扱う方法を述べている。コードが少々壊れているので読者が直す。これも学習だ。

#!/usr/bin/env python

from yaml import load
try:
    from yaml import CLoader as Loader
except ImportError:
    from yaml import Loader

if __name__ == '__main__':
    with open('foo.yaml', 'r') as stream:
        dictionary = load(stream, Loader)
        for key, value in dictionary.items():
            print(f"{key}: {value}")

上位互換スクリプトである二つ目の load_all のほうも同様に修正すれば動作する。

YAML Tutorial: A Complete Language Guide with Examples

叙述がスマートな感じがして安心して読める。スキーマの概念をよく説明できている。

Mastering YAML: A Comprehensive Guide To YAML files

YAML が簡潔に要約されている。コード例の !! を含むものを Viewer に通るように修正する方法がわからない。

Mastering YAML Files: A Step-by-Step Guide

どちらかと言えば文章主体である骨太の記事。

ツール

オンラインツール

YAMLlint - The YAML Validator

入力欄に YAML コードを貼り付けて Go ボタンを押すと、内容が valid か否かを示すサービスだ。単純にして明瞭だ。

Best YAML Viewer Online

左ペインに YAML を入力すると右ペインにツリーを出力するオンラインサービス。きわめて有用。

json2yaml.com

左ペインに JSON を入力すると右ペインに等価 YAML を出力するオンラインサービス。

Online YAML Parser

左ペインまたは指定 URL にある YAML コードを入力とし、右ペインにそれと等価な次のいずれかのコードを出力するオンラインサービスだ:

  • JSON

  • Python

  • 正典 YAML

YAMLine.com - The YAML Semantic Comparator

2つのYAML間の差分を生成するオンラインサービス。

差し当たり上記のものをブックマークしておけば十分だろう。

エディター拡張

learn-yaml - Visual Studio Marketplace

VS Code 拡張で YAML を検索すると人気第二位のものだ。編集中に構文・スキーマ検査を行うのが便利だ。

コマンドラインインターフェイス

mikefarah/yq: yq is a portable command-line YAML, JSON, XML, CSV, TOML and properties processor

README の記述から jq の上位互換を目指すものであることが期待できる。インストールには Homebrew が使用可能。

$ yq '.' foo.yaml
foo: bar
pleh: help
stuff:
  foo: bar
  bar: foo
$ yq '.stuff' foo.yaml
foo: bar
bar: foo
$ yq '.stuff.bar' foo.yaml
foo
$ yq '.[] | select(.foo == "bar")' foo.yaml
foo: bar
bar: foo
$ yq '.' documents.yaml
bar: foo
foo: bar
---
one: two
three: four
$ yq '.one' documents.yaml
null
---
two
pyyaml.org

Python で YAML を取り扱うためのパッケージは標準には今のところないので、こういうものを pip install しておくといい。

仕様

The Official YAML Web Site

上述の教科書で正とされている YAML コードが各種ツールで不正とみなされるときに、ここから仕様書を探して確認するのに使う。