UCL(Universal Config Language)ファイルについて 備考録とエトセトラ
UCL(Universal Config Language)は、BSDの次世代設定ファイルとして提案されている設定ファイル(らしい)です。
以前、使いやすい設定ファイルはないものかと検索した際に見つけ、興味深いと思ったので、機能をメモしておきます。
なお、私はBSDにほとんど触れたことがない為、BSDに採用されたかについては知りません。
概要
- Nginxスタイルの設定ファイルに触発されている
- JSONと完全な互換性を持った、より柔軟なフォーマットである
- 以下の形式で設定を出力可能である
- NginxスタイルのConfigurationファイル
- JSONファイル
- YAMLファイル
- k, kb, min, d といったサフィックスをサポートしている
JSONとの比較
- UCLはJSONの入力・出力両方をサポートしている
- UCLは、JSONよりも柔軟である
- クォーテーション(”“で囲む)は必須ではない
- すべての要素に対してカンマを追加できる
- 中括弧({})は必須ではない
- =の代わりに、:を使用することができる
- 配列は自動的に生成される
おもな機能
以下は、libuclのREADME.md から、ざっくり抜粋。
JSONをベースとしつつ、Nginx ConfigやYAML等の設定ファイルのいいとこどりをしたような感じっぽいです。
詳しくは、参考リンクの該当ページを見てください。
コメントアウト
スクリプト言語ライクな1行コメント、およびC言語ライクな複数行コメントをサポートしています。
複数行コメントは、ネスト可能です。
# 1-line comment
/*
Multiline comment
/*
Supports nest
*/
*/
マクロ
テンプレ等を記述したマクロを使うことができます。
マクロは、1行もしくは複数行での記述が可能です。
# 1行でのマクロ宣言
.macro_name "sometext"
# 複数行でのマクロ宣言
.macro_name {
some long text
...
};
また、.includeマクロを使用することができ、外部のUCLファイルを読み込むことができます。
変数
${VARIABLE}や$VARIABLEといった記述で変数を使用することができます。
複数行の文字列入力
シェルスクリプトライクな、複数行文字列をサポートしています。
key = <<EOD
some text
splitted to
lines
EOD
シングルクォートで囲んだ文字列の扱い
\と‘を除き、エスケープを無視します。
’\n’は、そのまま\nという文字列に展開されます。
シリアライズ
UCLオブジェクトは、以下のフォーマットでシリアライズできます。
- JSON
- Compacted JSON (改行やスペースを含まないJSONファイル)
- NginxライクなConfigration
- YAML
あとがき
新しく作るツール用の設定ファイルフォーマットを何にするか悩んでいましたが、様々なフォーマットに変換可能というのは、後々役に立ちそう。
uclcmdで少しuclをいじりつつ、libuclを使ってなにか作れたらいいなぁと思います。
参考リンク
- UCL All of the Things (MeetBSD California 2014 Lightning Talk)
- 次世代設定ファイルフォーマット UCL (Universal Configuration… | CUBE SUGAR STORAGE
- vstakhov/libucl: Universal configuration library parser
blog comments powered by Disqus