Skip to content

Instantly share code, notes, and snippets.

@frsyuki
Created July 31, 2012 06:31
Show Gist options
  • Select an option

  • Save frsyuki/3214251 to your computer and use it in GitHub Desktop.

Select an option

Save frsyuki/3214251 to your computer and use it in GitHub Desktop.
Fluentd v11 の設定ファイルにリテラルを導入する案
<match **>
# 互換性維持
key1 10
# キーの末尾に:が付いていれば、値はYAMLリテラル
key2: 20
# 次の行のインデントが (この行のインデント+2個) 以上なら、複数行と見なす
key3: [
30,
]
# #の後ろはコメント(互換性維持)
key4 hoge # コメント
# #を含めたい場合はリテラルを使ってこうする:
key5: "hoge # これはコメントではない"
</match>
# config はこうなる:
config = {
"key1" => "10",
"key2" => 20,
"key3" => [30],
"key4" => "hoge",
"key5" => "hoge # これはコメントではない",
}
@hotchpotch
Copy link

うーん、これなら言語内 DSL でいいのでは…。

@frsyuki
Copy link
Author

frsyuki commented Jul 31, 2012

例えば言語内DSLだとどんな風でしょう?

@hotchpotch
Copy link

こんな感じですね。
変数の指定、型(Hash も Array も String も Integer も Regexp等々)も書けますし(Ruby なので)、より設定の細かいバリデーションもできると思います。

  • Ruby が解らない人はリファレンスに沿って書けば書ける(最低のシンプルな構文)
  • Ruby が解る人は何でもできる

のが、Ruby での言語内DSLがよく使われている利点かなぁと思います。

僕は Ruby が書けるのでサンプルとしてはアレですが、結局は syntax が独自拡張され複雑になるよりかは、本体も Ruby ですし、設定ファイルも DSL で良いのかなぁと思います。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment