期末やら何やらで忙しくて全く紹介できなかったので、今更ながらやらせてもらいます。
node-llevalというモジュールを作りました。
どんなモジュール?
LLEvalという小飼弾氏が公開している様々な言語を実行できるAPIのラッパーです。
Node.js上で、RubyとかPythonとか、あとはHaskellなんかが実行できてしまいます。
インストール
普通に、
$ npm install lleval
でいいと思います。
使い方
var
lleval = require('lleval'),
hdoc = new new Function('return ' + require('hdoc').h);
lleval.evaluate('rb20',
hdoc(function() {/*
# http://jp.rubyist.net/magazine/?0041-200Special-lazy
fizzbuzz = Enumerator.new { |yielder|
1.upto(Float::INFINITY) do |n|
case
when n % 15 == 0 then yielder << "FizzBuzz"
when n % 5 == 0 then yielder << "Buzz"
when n % 3 == 0 then yielder << "Fizz"
else yielder << n.to_s
end
end
}
fizzbuzz.first(30).each do |str|
puts str
end
*/}), function(err, data) {
if(err) {
console.log('request error');
return;
}
console.log(data.stdout);
});
ヒアドキュメントとしてコードに直接書かれたRubyのコードを実行します。雰囲気でつかんでください。あとnew new Function
はウケ狙いです。笑ってください。
ちなみに簡単なコマンドラインツールも用意したので、
$ `npm bin`/node-lleval --help
なんていう風にすればヘルプが見れます。
何で作ったの?
半分ぐらいはnpmに公開してみたかったからで、もう半分は@eval_ofというTwitterのbotを作っていたから。
この@eval_ofは、Twitter上ソースコードをリプライで送ると実行して結果を返してくれるbotなのですが、そのコードの実行にこのライブラリを使いました。
最後に
あまり実用性の高いライブラリではないような気がしますが、何か面白い使い方がありましたら教えてください。
また、何か問題点やら改善点を見つけたらPull Requestを送っていただけるとありがたいです。