tomlを使ってみよう
みなさんお元気ですか。
私は元気です。
今携わっているプロジェクト
個人的に、yamlなどを扱うことは結構あるのですが、
tomlについてはほぼ分からなかったので色々調べてみました。
tomlとは
tomlとは、
Tom's Obvious, Minimal Language.
('トムの明瞭で最小の言語')
トムさんが作ったとてもわかりやすい言語、ということですね。
yamlやjsonなどを使う利点としては、シンプルで簡潔に記述できる点が大きいかと思います。
yamlはインデントなどの表現がありますが、tomlはどうでしょうか?
tomlの言語仕様
違いがわかりやすいkey valueペアの形でyamlと比較します。
このような出力を希望する場合、
1 |
{Fruites=> {"A" => "apple", "B" => "banana", "C" => "coconut"}} |
yaml:
1 2 3 4 |
Fruites: A: aaa B: bbb C: ccc |
toml:
1 2 3 4 |
[Fruites] A = "apple" B = "banana" C = "coconut" |
これはtomlのテーブルを用いた書き方です。
また、配列に関しても、
yamlはインデントを揃えることによって表現しますが、
tomlの場合、多くの言語と同じように、
1 |
array = ["apple", "banana", "coconut"] |
のように表現できるので可読性が高いですね!
今回私は個人的に、1つの配列に、複数の同じキーで構成されたオブジェクトを作りたかったので、
tomlのテーブルの配列を使うことにしました。
例えばこのようなものです。
1 |
{"array" => [{"kind" => "fruit", "name" => "apple"}, {"kind" => "fruit", "name" => "banana"}, {"kind" => "fruit", "name" => "coconut"}]} |
tomlのテーブルは
1 2 3 |
[table] kind = "fruit" name = "apple" |
出力:
1 |
{"table" => {"kind" => "fruit", "name" => "apple"}} |
のように表記し、
テーブルの配列はこのように表記します。
1 2 3 |
[[table]] kind = "fruit" name = "apple" |
出力:
1 |
"kind" => [{"kind" => "fruit", "name" => "apple"}] |
テーブル配列を使うことで、同テーブル名ないの配列要素にできます。
1 2 3 4 5 6 7 |
[[array]] kind = "fruit" name = "apple" [[array]] kind = "fruit" name = "banana" |
出力:
1 |
{"array" => [{"kind" => "fruit", "name" =>"apple"}, {"kind" => "fruit", "name" => "banana"}]} |
また、tomlテーブル、テーブルの配列ではこのような記述で入れ子にすることもできます。
1 2 3 4 5 6 7 |
[[array]] kind = "fruit" name = "banana" [[array.two]] kind = "vegetable" name = "radish" |
出力:
1 |
{"array" => [{"kind" => "fruit", "name" => "banana"}, two => [{"kind" => "vegetable", "name" => "radish"}]]} |
tomlでは '.' で繋ぐことで、そのテーブルの要素であることを示します。のでとてもイメージがつきやすいのではないでしょうか?
最後に
調べてみると、tomlは色々なプロジェクトで使われており、
例えば、静的サイトジェネレーターであるHugoでも、
設定ファイルの形式にtomlを採用しています。
パーサーも多く作られているので、色々な言語で試してみたいと思います!