Tbpgr Blog

Employee Experience Engineer tbpgr(てぃーびー) のブログ

トムさんが作った設定ファイル用ミニ言語TOMLって? #toml

f:id:tbpg:20150811223742j:plain

設定ファイル用のシンプルなミニ言語TOMLに関して
基本的な情報とサンプルをまとめました。

経緯

静的コンテンツを作成しようと思い、Hugoのガイドを読んでいたら設定ファイルにTOMLがあった。
はじめてきくフォーマットだったので情報を調べることにしました。

TOMLとは?

TOML=Tom's Obvious, Minimal Language.
設定ファイル用のシンプルなミニ言語です。
TOMLはHash Tableへの変換できるように設計されているため、様々な言語で
データ構造を簡単にパース可能です。
すでに様々な言語によるパーサーが存在するようですが、CrystalやElixirは無いようですね。(2015/08/11現在)
CrystalやElixirで何か作ってみたい、という方はちょうどよいお題かも?

さらに詳細な情報についてはTOMLのGitHubリポジトリを確認してください。
TOML - GitHub

サンプル

Rubyのパーサーを利用してHashをTOML,YAML,JSONに変換して比較してみます。

インストール

$ gem install toml-rb

動作確認用TOMLファイル

  • sample.toml
[boolean]
boolean1 = true
boolean2 = false
[numbers]
float = 1.1
int = 12
[strings]
string = "String"

プログラム

require 'toml'
require 'yaml'
require 'json'
require 'date'
require 'pp'

mix_hash = {
  strings: {
    string: "String",
    string: "String"
  },
  numbers: {
    int: 12,
    float: 1.1
  },
  boolean: {
    boolean1: true,
    boolean2: false
  }
}

toml = TOML.dump(mix_hash)
puts "==Hash=="
pp mix_hash
puts "==TOML=="
puts toml
puts "==JSON=="
puts mix_hash.to_json
puts "==YAML=="
puts mix_hash.to_yaml

puts "==TOML to Hash=="
pp TOML.parse(toml)
pp TOML.parse(toml, symbolize_keys: true)

puts "==TOML File to Hash=="
pp TOML.load_file('sample.toml')
pp TOML.load_file('sample.toml', symbolize_keys: true)

出力

$ ruby toml.rb
==Hash==
{:strings=>{:string=>"String"},
 :numbers=>{:int=>12, :float=>1.1},
 :boolean=>{:boolean1=>true, :boolean2=>false}}
==TOML==
[boolean]
boolean1 = true
boolean2 = false
[numbers]
float = 1.1
int = 12
[strings]
string = "String"
==JSON==
{"strings":{"string":"String"},"numbers":{"int":12,"float":1.1},"boolean":{"boolean1":true,"boolean2":false}}
==YAML==
---
:strings:
  :string: String
:numbers:
  :int: 12
  :float: 1.1
:boolean:
  :boolean1: true
  :boolean2: false
==TOML to Hash==
{"boolean"=>{"boolean1"=>true, "boolean2"=>false},
 "numbers"=>{"float"=>1.1, "int"=>12},
 "strings"=>{"string"=>"String"}}
{:boolean=>{:boolean1=>true, :boolean2=>false},
 :numbers=>{:float=>1.1, :int=>12},
 :strings=>{:string=>"String"}}
==TOML File to Hash==
{"boolean"=>{"boolean1"=>true, "boolean2"=>false},
 "numbers"=>{"float"=>1.1, "int"=>12},
 "strings"=>{"string"=>"String"}}
{:boolean=>{:boolean1=>true, :boolean2=>false},
 :numbers=>{:float=>1.1, :int=>12},
 :strings=>{:string=>"String"}}

関連情報

GitHub

github.com github.com

Qiita

qiita.com qiita.com

Qiitaのtoml関連投稿を検索

Slides

その他

TOMLノススメ - mojavy.com