« 「やわらか戦車」 まだまだ退却中! & 「のだめ」ってなに? | メイン | いいネタ揃ってます。 「Mash up Award 2nd」開催 »

Java SE 6の機能を利用してスクリプト言語をJavaから利用する

  はてなブックマークに追加 このエントリを livedoor クリップへ追加

「Java SE 6」には、Javaプログラムからスクリプト言語を実行するための機能(JSR 223)があります。


一番面白そうなこの機能に、これまで触れていませんでしたので、今回は満を持してJavaからスクリプト言語を実行してみたいと思います。


実行するスクリプト言語として、「Ruby」を選んでみました。


(準備)

「Ruby」を実行するためには、次の2つのjarファイルを準備する必要があります。


jruby.jar
  今回ダウンロードしたファイル:「jruby-src-0.9.2.tar.gz」

  ファイルをダウンロードした後、antでコンパイルします。
  コンパイルすると、libディレクトリに「jruby.jar」が作成されます。


jruby-engine.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 factories = mgr.getEngineFactories();
    for( ScriptEngineFactory f : factories ) {
      List engNames = f.getNames();
      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




Ads BOARD








最近のエントリーとその関連エントリー

トラックバック

このエントリーのトラックバックURL:
http://kazuhiro.ty.land.to/blog/mt-tb.cgi/133

  Map