今回は,予告通り「スクリプト言語からJavaを使う方法」を紹介していきましょう。Java仮想マシン上で動作するスクリプト言語を利用すると,Java向けに用意されているクラスライブラリをスクリプト言語で利用できます。これにより,Javaにはあるがスクリプト言語にはない便利なライブラリを利用したり,Javaアプリケーションのプロトタイプをスクリプト言語で簡単に作成することが可能になります。

 今回もスクリプト言語としてJRubyを使います。前回を参考にしてセットアップしておいてください。

 では早速,Rubyのコードの中でJavaのクラスを利用してみましょう。まずはおなじみの「Hello World」です。Javaのprintlnメソッドを使って文字列を表示します。


リスト3●Hello.rb

require 'java'
include_class 'java.lang.System'

System.out.println("Hello World!")

 たったこれだけです。JRubyが用意している「java」というライブラリをロードし,使いたいクラスを「include_class」で読み込み,そのクラスのメソッドを呼び出します。

 もう一つ例を挙げましょう。Rubyは標準でGUIライブラリを持っていないため,ウィンドウを表示するにはTkやGtkといったGUIライブラリを利用する必要があります。そこで,Javaの標準GUIライブラリであるSwingを使って,Rubyからウィンドウを表示してみましょう。


リスト4●SwingTest.rb

require 'java'

module MyModule
  include_package 'javax.swing'

  frame = JFrame.new("Hello World!")
  label = JLabel.new("Hello World!")

  frame.getContentPane().add(label)
  frame.setDefaultCloseOperation(JFrame::EXIT_ON_CLOSE)
  frame.setSize(200,100)
  frame.setVisible(true)
end

 リスト4の「include_package」はRubyのモジュールやクラスにJavaのパッケージを読み込むメソッドです。ここでは,Swingの二つのクラス(JFrameとJLabel)しか使っていないので,

include_class 'javax.swing.JFrame'
include_class 'javax.swing.JLabel'
としても同じことです。あとは,JavaでSwingを利用するのと同じようにして,RubyからSwingのウィンドウを表示させることができます。

 ただ,JRubyでSwingを使うには,一つ問題があります。実行がとても遅いのです。上の画面では,JRubyでSwingTest.rbを実行する際に,「-b」というオプションを付けています。これは,実行にかかった時間を表示するJRuby特有のオプションです。CPUがAthlon XP 2000+,メモリーが512MBのパソコンを使ったところ,ウィンドウが表示されるのに45秒ほどかかりました。

 JRubyの開発チームはこの問題を重要視しており,2005年末にリリース予定の次期バージョンである0.8.3では改善される見込みです。例えば,JRubyに付属するswing2.rbというサンプルの実行は,現行バージョンの0.8.2ではPentium III 1GHz搭載ノートで2分かかるのが,0.8.3では5秒に短縮されるそうです。