Open4
アプリ向けの設定ファイルについて考える
ピン留めされたアイテム
まとめ
- INI で困らない
- key = value 方式はシンプルで良い
前提
- アプリケーションの設定ファイル
- アプリケーションは Erlang か Go で開発
- コマンドライン系のアプリケーションは引数メイン
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}
]
JSON
- コメントが書けない
- そもそも JSON は設定ファイルに向いてないと思っている
- jsonc や json5 といった拡張形式を採用はしたくない
- JSON でパースできず、それ専用のパーサーが必要になるのは避けたい
YAML
INI で十分だった。
TOML
INI で十分だった。