JSR 223 APIを使って、JavaScriptでRubyを実行
Rhino, JRuby, Jython, GroovyなどのJavaで実装されているスクリプト言語ならば、JSR 223 APIであるjavax.scriptのクラスを使えます。つまり、これまでこのブログで紹介してきたJRuby engineを使うサンプルは、JavaではなくてJavaScript(Rhino)でも書けるわけです。そこで、こんな scriptingtest.jsを書いて、JavaScriptでRubyを実行してみました。
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からJavaScriptやPythonを実行できたり、PythonからRubyやGroovyを実行できたりします。マルチ・スクリプティングですね。