【TOML】TOML 〜 基本編 〜

◾️はじめに

https://dk521123.hatenablog.com/entry/2023/04/25/103533

の続き。

TOMLの記事は、上の記事でまとめようと思ったが
加筆していくと結構膨大になって、
文法もかなり分かっていないことに気がついたので
TOMLの文法部分を整理してみた。

 特に、TOML のテーブル・インラインテーブルについて
自分の中で混乱していたので、整理できてよかった、、、

目次

【0】公式ドキュメント
 1)ツール「TOML to JSON」
【1】仕様
 1)大文字と小文字は区別される
 2)インデントは無視
 3)ファイル名の拡張子「.toml」
【2】コメント
【3】キーと値の組
【4】配列
【5】テーブル
 1)テーブル
 2)インラインテーブル
 3)ドット付きキー 「.」
 4)テーブルの配列

【0】公式ドキュメント

* 分からなくなったら、立ち返る、、、

https://toml.io/en/v1.0.0
和訳
https://toml.io/ja/v1.0.0

1)ツール「TOML to JSON

* 文法チェックに、、、

https://www.convertsimple.com/convert-toml-to-json/

【1】仕様

1)大文字と小文字は区別される

# なので、ブール値は 常に小文字
# (個人的には、PythonのようにTrueってしちゃいそう、、、)
bool1 = true
bool2 = false

2)インデントは無視

[servers]
  # 以下のインデントは見やすいさだけでなくても同じ
  [servers.alpha]
  ip = "10.0.0.1"
  dc = "eqdc10"

JSONで書き直すと
https://www.convertsimple.com/convert-toml-to-json/

{
  "servers": {
    "alpha": {
      "ip": "10.0.0.1",
      "dc": "eqdc10"
    }
  }
}

3)ファイル名の拡張子「.toml」

* TOML ファイルには拡張子 .toml を使用する必要がある
 => 意識したことはなかったが、YAMLなら「.yaml」「.yml」があるが
 公式ドキュメントによると、TOMLは一択で「.toml」みたい

【2】コメント

* 「#」するだけ
 => ここは、YAMLと同じなので問題なし、、、

# This is a comment

【3】キーと値の組

* 「key = "value"」で「=」区切る
 => たまに「:」にしてJSONみたいにしてしまう、、、

key = "value"

【4】配列

# 異なるデータ型の値を混在させることができる
contributors = [
  "Foo Bar <foo@example.com>",
  # 最後の行末の `,` は有効(ここはJSONとは違う)
  { name = "Baz Qux", email = "bazqux@example.com",  }
]

【5】テーブル

* キーバリュー型(辞書型)を表現する
* 別名:ハッシュテーブル、辞書
* なお、「2)インラインテーブル」「3)ドット付きキー 「.」」は
 「1)テーブル」の別表現

1)テーブル

[table]
key = "value"

JSONで書き直すと
https://www.convertsimple.com/convert-toml-to-json/

{
  "table": {
    "key": "value"
  }
}

2)インラインテーブル

# テーブルを表現するためのよりコンパクトな構文
table = { key1 = "value1", key2 = "value2" }

JSONで書き直すと
https://www.convertsimple.com/convert-toml-to-json/

{
  "table": {
    "key": "value"
  }
}

使用上の注意
https://toml.io/ja/v1.0.0

より抜粋
~~~~~
インライン テーブルは 1 行で表示されるように設計されています。 
インライン テーブル内の最後のキーと値のペアの後には、
終了カンマ (末尾のカンマとも呼ばれる) を使用することはできません。
~~~~~

3)ドット付きキー 「.」

# ドット付きキーは、テーブルを作成および定義
table.key = "value"

# 以下も可能
[table2.key2]
ip = "10.0.0.2"
dc = "eqdc10"

JSONで書き直すと
https://www.convertsimple.com/convert-toml-to-json/

{
  "table": {
    "key": "value"
  },
  "table2": {
    "key2": {
      "ip": "10.0.0.2",
      "dc": "eqdc10"
    }
  }
}

4)テーブルの配列

# * 辞書型のリストは「[[ .. ]]」で表現する
[[table]]
name = "Hammer"
age = 23

JSONで書き直すと
https://www.convertsimple.com/convert-toml-to-json/

{
  "table": [
    {
      "name": "Hammer",
      "age": 23
    }
  ]
}

関連記事

TOML 〜 入門編 〜
https://dk521123.hatenablog.com/entry/2023/04/25/103533
Python ~ TOML ~
https://dk521123.hatenablog.com/entry/2024/01/27/000110
Scala ~ TOML ~
https://dk521123.hatenablog.com/entry/2023/10/08/232146