LoginSignup
15
15

More than 5 years have passed since last update.

Node.jsでいろんな言語を実行するモジュール作った

Posted at

期末やら何やらで忙しくて全く紹介できなかったので、今更ながらやらせてもらいます。

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を送っていただけるとありがたいです。

15
15
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
15
15