Java SE 6の機能を利用してスクリプト言語をJavaから利用する
「Java SE 6」には、Javaプログラムからスクリプト言語を実行するための機能(JSR 223)があります。
一番面白そうなこの機能に、これまで触れていませんでしたので、今回は満を持してJavaからスクリプト言語を実行してみたいと思います。
実行するスクリプト言語として、「Ruby」を選んでみました。
(準備)
「Ruby」を実行するためには、次の2つのjarファイルを準備する必要があります。
○jruby.jar
今回ダウンロードしたファイル:「jruby-src-0.9.2.tar.gz」
ファイルをダウンロードした後、antでコンパイルします。
コンパイルすると、libディレクトリに「jruby.jar」が作成されます。
今回ダウンロードしたファイル:「jsr223-engines.tar.gz」
ダウンロードしたファイルを展開すると、jruby/build/ディレクトリに
「jruby-engine.jar」が用意されています。
「jruby.jar」と「jruby-engine.jar」にパスを通します。
以上で、準備は終了です。
(コーディング)
JavaからRubyを実行するコードを示します。
package test;
import java.util.List;
import javax.script.ScriptEngineFactory;
import javax.script.ScriptEngineManager;
import javax.script.ScriptEngine;
import javax.script.ScriptException;
public class Script {
public static void main( String[] args ) {
ScriptEngineManager mgr = new ScriptEngineManager();
// 利用できるScriptEngineのリストを表示します。
// (注)デフォルトでは"jruby"は利用できません。
List
for( ScriptEngineFactory f : factories ) {
List
for(String name: engNames) {
System.out.printf("\tEngine Alias: %s\n", name);
}
}
// rubyを実行するためのScriptEngineを取得します。
ScriptEngine engine = mgr.getEngineByName("jruby");
if ( engine == null ) {
System.out.println("engine is null");
System.exit(1);
}
try {
// rubyのコードを実行します。
engine.eval("puts 'Hello, world!'");
} catch (ScriptException se) {
se.printStackTrace();
}
}
}
実行結果は、以下のようになります。
Engine Alias: js
Engine Alias: rhino
Engine Alias: JavaScript
Engine Alias: javascript
Engine Alias: ECMAScript
Engine Alias: ecmascript
Engine Alias: jruby
Engine Alias: ruby
Hello, world!
以上です。おつかれさまでした。
利用したいスクリプトの種類がたくさんあると、準備が大変そうです。
一方で、実行の方法は、いたってシンプルであることがわかりました。
(参考)
「Java SE 6 API Documents」
「Java Scripting and JRuby Examples」
「Scripting for the Java Platform」