Bye Bye Moore

PoCソルジャーな零細事業主が作業メモを残すブログ

YAMLデータにRubyスクリプト書いて実行させる

Ruby:
- 1 + 3
- Time.now.strftime("%a %b %d %X %z %Y")
- Dir.pwd

というYAMLデータ(aaa.yml)を用意して

$ ruby -r pp -r yaml -e 'YAML.load(ARGF.read())["Ruby"].each {|i| pp eval i}' aaa.yml

てなRubyワンライナーを実行すると

4
"Tue Jan 28 21:33:04 +0900 2014"
"/Users/shuzo/src"

という結果が出て来ます。

evalメソッドは引数に与えられた文字列をRubyスクリプトとして解釈、実行します。

使いどころ

上の例程度だと旨味がありませんね。
実際の運用場面では

  1. ゲームシステムを反映したDSLを定義
  2. デザイナさんにユニットやカードの動きをDSLで記述してもらう
  3. それをevalで実行

てな用途が考えられます。

吉里吉里っぽいデジタル紙芝居も、カードゲームの特殊効果もDSLで書いてもらえば意思疎通が楽です。

......え、Ruby覚えさせろって?
デザインが出来る人はそっちに集中してもらった方が皆が幸せになれるんじゃよ......

参考もと

Rubyレシピブック 第3版 303の技

Rubyレシピブック 第3版 303の技