Open4

アプリ向けの設定ファイルについて考える

voluntasvoluntas

前提

  • アプリケーションの設定ファイル
  • アプリケーションは Erlang か Go で開発
  • コマンドライン系のアプリケーションは引数メイン
voluntasvoluntas

Erlang/OTP

自分が主戦場である Erlang/OTP では 独自の記法 を採用しており自前でライブラリを開発している。

kvconf

ベースは INI ファイル形式。

  • セクションを削除
  • コメントを # に対応
  • , にてリスト形式に対応
  • \ による改行は非対応
  • 時間の単位が指定できる

以下のような形式。

# コメント
key = value

key は string のみで、value は文字列だったり、数値だったり証明書のパスだったりと自由に value の形式を追加できるようにしています。value を "" で囲う必要はない。

IPv6 や時間単位や、証明書のパスも指定できるようになっている。証明書が問題なく読み込めるかなども検証してくれる。

ipv6_address = 2001:0DB8::10
session_destroyed_timeout = 15 s
stats_exporter_tls_fullchain_file = /path/to/fullchain.pem

以下のようなバリデーターを設定で書くことができる。

[
    #kvc{key = a, type = #kvc_atom{candidates = [x,y,z]}, default = x},
    #kvc{key = b, type = #kvc_string{}, required = true},
    #kvc{key = c, type = #kvc_interval{min = {10, s}, max = {30, s}, out_time_unit = millisecond}, deafult = {20, s}},
    #kvc{key = d, type = #kvc_integer{min = 10, max = 100}},
    #kvc{key = e, type = #kvc_boolean{}, default = true}
]
voluntasvoluntas

JSON

  • コメントが書けない
  • そもそも JSON は設定ファイルに向いてないと思っている
  • jsonc や json5 といった拡張形式を採用はしたくない
    • JSON でパースできず、それ専用のパーサーが必要になるのは避けたい

YAML

INI で十分だった。

TOML

INI で十分だった。