設定ファイルの記述言語を lua にする話
http://d.hatena.ne.jp/eel3/20150718/1437221172
というのを読んで。
python 等々の言語だとその言語自身で設定ファイルを書くというのがよく行われるけど、 そうやってしまうと別の言語からその設定を読むというのができなくなる。
複数言語から読まれることを想定するとなると、 YAML とか INI ファイルとかになるけど、 変数定義・展開くらいは欲しいなぁとか思うわけで。
で、もう S 式とかでいいんじゃないか?どの言語でも lisp interpreter の実装ありそうだし、 なんて考えたりしてたのだけど、 lua というのは確かに良いかもなぁ。
ということで、こんな設定ファイルがあるとして、
config.lua
:
ADDRESS = '192.168.0.1' PORT = PORT + 8000
python から読んでみる:
import lupa lua = lupa.LuaRuntime() # デフォルト設定として定義しておく lua.globals().ADDRESS = '127.0.0.1' lua.globals().PORT = 80 lua.execute(open('config.lua').read()) print('ADDRESS =', lua.globals().ADDRESS) print('PORT =', lua.globals().PORT)
別の言語からもということで、 go から読んでみる:
package main
import "fmt"
import "github.com/stevedonovan/luar"
func main() {
L := luar.Init()
defer L.Close()
// デフォルト設定として定義しておく
luar.Register(L, "", luar.Map{
"ADDRESS": "127.0.0.1",
"PORT": 80,
})
if err := L.DoFile("config.lua"); err != nil {
panic(err)
}
g := luar.Global(L)
fmt.Println("ADDRESS =", g.Get("ADDRESS"))
fmt.Println("PORT =", g.Get("PORT"))
}