設定ファイルの為の最強のフォーマット考えて実装した。
設定ファイルの形式で JSON とか YAML とか TOML とかあるじゃないですか?
ただ、自分的にどれも「ここが使いづらい」っていう部分があって、決定打に欠けると思ってました。
YAML とか TOML は壊れやすいというか、感覚的に理解できない部分があって、いつも「あー、これだと思ってる階層にならないのか」って感じていて、
JSON は「標準だとコメントもないし、末尾の余計なカンマさえ許してくれない」という辺りに大きな不満があったりしたのです。
YAML とか TOML はそもそも思想が自分に合ってない、
JSON は汎用の情報交換フォーマットだから、気軽に仕様変更できない仕組み、と。
「俺はな、汎用の情報交換フォーマットじゃなくて、設定ファイルのフォーマットが欲しいんだ!!」
作りました。設定ファイル用フォーマット Setay (セッテイ) 爆誕です!!
記述サンプル
# コメント (ハッシュ + 空白)
{
name = "John S.";
age = 47;
is-student = false;
hobbies = [ "アニメ", "ゲーム", "Rock'n' roll" ];
address =
{
city = "渋谷区";
country = "Japan";
};
}
こんな風に書けます。更に、「設定ファイル用って振り切ったんだから」というわけで変数展開つけました。
{
# シンプルな環境変数参照
redis-host = ${REDIS_HOST};
# フォールバック値付き (変数が未定義の場合に使用)
db-port = ${MYSQL_PORT ?: 13306};
# 文字列補間 (ダブルクォート文字列内で変数を展開)
greeting = "Hello, ${USER_NAME ?: 'World'}!!";
# フォールバックチェーン — 順番に変数を試し、最後にリテラル
password = ${PASS_PRIMARY ?: PASS_SECONDARY ?: "default-secret"};
# 文字列補間形式を使えば、変数の展開結果を文字列にできます。
password = "${PASS_PRIMARY ?: PASS_SECONDARY ?: "default-secret"}";
}
Go 言語用のライブラリ公開中
まだ Go 言語用しかないのですが、「パーサージェネレーターで生成したパーサーを使った、ちゃんとした読み込み処理」をするライブラリ公開中です。
みんなで使って、いつか外国の人達に "Setay file! (セッテイファイル!)" て言わせるという裏の目標達成の後押しをお願いします!!