JSR 223 APIを使って、JavaScriptでRubyを実行

Rhino, JRuby, Jython, GroovyなどのJavaで実装されているスクリプト言語ならば、JSR 223 APIであるjavax.scriptのクラスを使えます。つまり、これまでこのブログで紹介してきたJRuby engineを使うサンプルは、JavaではなくてJavaScript(Rhino)でも書けるわけです。そこで、こんな scriptingtest.jsを書いて、JavaScriptRubyを実行してみました。

1 importClass(Packages.javax.script.Invocable);
2 importClass(Packages.javax.script.ScriptEngine);
3 importClass(Packages.javax.script.ScriptEngineManager);
4 importClass(Packages.javax.script.ScriptEngineFactory);
5 
6 manager = new ScriptEngineManager();
7 engine = manager.getEngineByName("jruby");
8 factory = engine.getFactory();
9 println(factory.getEngineName()); 
10 engine.eval("puts \"こんにちは世界\""); 
11 engine.eval("def say\n print 'じゃね\n' end");
12 engine.invokeFunction("say", null);

実行はJDK 1.6で追加されたjrunscriptを使って、こんなふうに。

jrunscript -cp [jruby.jarへのパス]:[jruby-engine.jarへのパス] scriptingtest.js

すると、9, 10, 12行目の出力が

jruby
こんにちは世界
じゃね

のように表示されます。
scripting APIを使うと、RubyからJavaScriptPythonを実行できたり、PythonからRubyやGroovyを実行できたりします。マルチ・スクリプティングですね。