2015年12月8日

TOMLを使ってみよう

TOML は Tom's Obvious, Minimal Language の略で、データ記述言語の一つです。
XML、YAML、JSON といった言語からの置き換えを狙って提唱された言語のようで、未だ正式版(v1.0.0)は発行されていませんが、今後普及していくのではないかと予想されます。ちなみに提唱者である Tom氏は GitHub の創設者です。
(以下の記事内容は執筆時点の最新版である v0.4.0 に基づきます。)


TOML の公式ページはこちらです(当然、GitHub です)。
TOML の長所は以下のようになります。

  • 仕様はかなりシンプル
  • テキストベースでヒューマンリーダブル
  • 設定ファイルに特化した記法をサポート
  • コメントを書ける、UTCがプリミティブ型、複数行の文字列を書ける、配列で末尾の , が許される、など細かい配慮が行き届いている


以下は公式ページにあるサンプルデータの抜粋です。[] を利用する INIファイルに似た書式をサポートしている点が、最大の特徴と思われます。
# This is a TOML document.

title = "TOML Example"

[owner]
name = "Tom Preston-Werner"
dob = 1979-05-27T07:32:00-08:00 # First class dates

[database]
server = "192.168.1.1"
ports = [ 8001, 8001, 8002 ]
connection_max = 5000
enabled = true

[servers]

  # Indentation (tabs and/or spaces) is allowed but not required
  [servers.alpha]
  ip = "10.0.0.1"
  dc = "eqdc10"

  [servers.beta]
  ip = "10.0.0.2"
  dc = "eqdc10"

[clients]
data = [ ["gamma", "delta"], [1, 2] ]

# Line breaks are OK when inside arrays
hosts = [
  "alpha",
  "omega"
]

TOML のライブラリは未だ Python の標準ライブラリには含まれていません。
TOML の公式ページがからリンクされているこちらのライブラリを使って、TOML データの読み込みを行ってみます。
>>> import toml

>>> toml.load(open('sample.toml'))
{
    'servers': {
        'alpha': {'dc': 'eqdc10', 'ip': '10.0.0.1'},
        'beta': {'dc': 'eqdc10', 'ip': '10.0.0.2'}
    },
    'database': {
        'enabled': True,
        'connection_max': 5000,
        'ports': [8001, 8001, 8002],
        'server': '192.168.1.1'
    },
    'title': 'TOML Example',
    'clients': {
        'data': [['gamma', 'delta'], [1, 2]],
        'hosts': ['alpha', 'omega']
    },
    'owner': {
        'dob': datetime.datetime(1979, 5, 27, 7, 32),
        'name': 'Tom Preston-Werner'
    }
}
極簡単に TOML のデータを読み込むことができました。


ここまで、TOML の長所とサンプルについて見てきました。シンプルかつ強力なデータ記述言語であると言えます。

しかし、現時点で TOML を本格的に使うにあたって、以下の2つの問題点があります。

  • Python を含め、多くの言語が標準では未対応
  • 配列の要素は同じ型でなければならない
1点目は今後改定・普及することで解消するのではないかと思われます。
一方、2点目は Python のデータを記述する際に大きな制限となってしまいます。v1.0.0 までにこの点が解消しなければ、「設定ファイルとして利用する」以外の使い道を見つけにくくなってしまうのではないかと危惧されます。

0 件のコメント:

コメントを投稿