YAMLのススメ
Intro
広く使われてるJSONは、コメントが許可されていなかったり、複雑な構造を持つときに読みにくくなったりする。(すでにこれらに対応した拡張形式はあるものの)いつ頃デファクトスタンダードとして対応されるんだろうと思っていたけど、これはYAMLに乗り換える流れだと気付いてしまった。
TL; DR
- JSONとYAMLの違いを理解する。
- YAMLを使って設定ファイルを書く際のメリットを知る。
- YAMLの書き方を学ぶ。
- PythonでYAMLを読み書きする方法を知る。
JSON
そもそもIntroに登場したJSONとは、という説明から入ろう。
JSONはJavaScript Object Notationの略で、データのやり取りに使われる軽量なデータ形式である。JSONは、プログラミング言語に依存しない形式でデータを表現するため、データのやり取りに適している。
いわゆる辞書や連想配列とほとんど同じ形式だ。キーと値のペアを持ち、キーは文字列で、値は文字列、数値、真偽値、配列、辞書などのいずれかの型を持つことができる。
1 |
|
さらに、ほとんどすべての言語でJSONを扱うためのライブラリが提供されているため、外部とのデータのやり取りに非常に適している。たとえばWeb REST APIのレスポンスや設定ファイルの読み書きに使われることが多い。
1 |
|
1 |
|
この通り、JSONはデータのシリアライズや設定ファイルの記述に適している。しかし、JSONにはいくつかの制約がある。
- コメントが許可されていない。
- 複雑な構造を持つときに読みにくくなる。
- 文字列を記述するために、
"
で囲む必要がある。
人間が読み書きする際に、これらの制約が不便に感じることがある。そのため、YAMLが登場した。
YAML
Yamlは、YAML Ain’t Markup Languageの略で、人間にとって読みやすいデータ形式である。YAMLは、データのシリアライズや設定ファイルの記述に適している。人間にとって読みやすいデータ形式を目指しており、JSONよりも柔軟で直感的な記述が可能である。
たとえば先のjsonは、YAMLで以下のように表現できる。
必要に応じてコメントや空白行を挟むこともできる。
1 |
|
なお、YAMLファイルは拡張子.yaml
または.yml
で保存される。
YAMLの書き方
YAMLは、JSONと同じく左側にkey、右側にvalueを記述する形式である。ただし、YAMLではインデントを使って階層構造を表現する。つまり、valueに辞書や配列を持つ場合、その要素はインデントされる。なお、インデントはスペース2つかスペース4つが一般的だ。
詳細はYAML 入門: サンプルから学べる初心者向けガイド - circle ciブログを参照。
YAMLの読み書き
JSONはすでにあまりに広く使われているため、ライブラリについては標準に含まれている、あるいは読み込む必要すらないこともあった。しかし、YAMLはそうではない。PythonではPyYAMLというライブラリを使う。
installはpip install pyyaml
で行う。
実際の読み書きは以下のように行う。
1 |
|
まとめ
YAMLは、JSONよりも人間にとって読みやすいデータ形式である。JSONはデータのシリアライズや設定ファイルの記述に適しているが、コメントが許可されていない、複雑な構造を持つときに読みにくくなる、文字列を記述するために"
で囲む必要があるなどの制約がある。そのため、YAMLはJSONよりも柔軟で直感的な記述が可能であり、人間が読み書きする際に便利である。