INI,JSON,YAML,TOMLのチートシート

Kazuki Koide

November 19, 2018

設定ファイルの書式についてググることが多かったので自分用にチートシートを作成してみた。設定ファイルの規格で思いつくのは、INI、XML、JSON、YAML、TOMLの5種類。他にもあるだろうが私には接点がない。INIは物心ついたころには既にあった気がする。Windows 95のアプリケーションの設定ファイルがINIだった。それからphp.iniの印象が強い。今でも.gitconfigなどで触れる機会がある。XMLはJAVAのweb.xmlが最初の出会いだった。当時からなんでこんな扱いづらいフォーマットで書くのか理解できなかった。XMLが嫌でJAVAやApacheを使いたくないところがある。今でも古めのAPIはXMLだったりするし、SAMLなんかもXMLだ。JSONとの出会いは正直覚えていないが、何かしらのREST-APIだと思われる。Node.jsのpackage.jsonで良く触れる。YAMLはRubyを使ってこなかったのでこれまで接点が無かったが、最近Kubernetesを使い始めて良く触るようになった。TOMLはGolangを使った時に初めて触れた。Go言語界隈ではTOMLが良く使われている。HUGOの設定もTOMLだ。

以上唐突な自分語り。何が言いたいのかというと、TPOに合わせて色々な規格を読み書きしないといけなくてややこしいと言うことだ。

ついでなので各規格の登場年月を調べた。

規格 初版
INI -
XML 1998年
YAML 2001年5月
JSON 2006年7月
TOML 2013年2月

意外とYAMLが古い。INIはWikipediaによると規格化・標準化されていないらしい。今初めて知った。自然発生的に生まれたと言うことだろうか。不思議な書式だ。そういう意味ではTOMLはINIを規格化したものと言えるのだろうか。ちなみに各フォーマットをGoogleトレンドだとこんな感じ

チートシート

というわけでチートシート。(XMLは書かない)

INI

; コメント
key1=value1

[section]
key2=value2
key3=1.1

INIに配列やネストを記述する方法はない。

JSON

{
  "key1": "value1",
  "key2": {
    "key3": null,
    "key4": [ 1.1, 2.2 ]
  },
  "key5": [
    {
      "key6": 3,
      "key7": true
    },
    {
      "key6": 4,
      "key7": false
    }
  ]
}

JSONにコメントはない。

YAML

# コメント
key1: value1    # コメント
key2:
  key3: null
  key4:
    - 1.1
    - 2.2
key5:
  - key6: 3
    key7: true
  - key6: 4
    key7: false

TOML

# コメント
key1: "value1"  # コメント

[key2]
key3: null
key4: [1.1, 2.2]

[[key5]]
key6: 3
key7: true

[[key5]]
key6: 4
key7: false

key8: 2018-11-19
key9: 2018-11-19T15:30:00+09:00  #日本時間15:30