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を使ってなにか作れたらいいなぁと思います。


参考リンク



blog comments powered by Disqus

Published

27 May 2018

Tags