スクリプト言語内でJavaクラスを呼び出す方法は、各言語によって異なります。ここではこれまで使ってきたJRubyの方法を紹介します。 JRubyをインストールすると、コマンドプロンプトからJRubyのプログラムを実行できるようになります。ここからはコマンドプロンプトを使って開発を進めていきましょう。

 まず、標準のJavaクラスを呼び出します。最も基本的な「java.lang.System」というクラスを呼び出してみましょう(リスト10)。このプログラムをlist10.rbというファイルに保存してコマンドプロンプトから実行してみましょう。 JRubyのプログラムを実行するには、「jruby プログラム名」と入力します。たった3行のプログラムですが、無事に実行できましたか。

リスト10●JRubyからJavaクラスを読み込むプログラム
リスト10●JRubyからJavaクラスを読み込むプログラム
[画像のクリックで拡大表示]

 プログラムを見れば一目瞭然ですが、簡単に説明しておきます。 1行目はまずJavaライブラリの読み込みの部分です。 JRubyでJavaライブラリを利用することを宣言しています。このように記述をすると、以降のプログラムでJavaのライブラリが利用できるようになります*2

 2行目がJavaのクラスをインポートしている部分です。Javaと書き方は同じですが、 JRubyではimportメソッドになります*3。このimportメソッドで、 Javaの基本的なAPIであるjava.lang.Systemクラスをパッケージ名なしで呼び出せるようにしています。 importしない場合は、「java.lang.System.out.println( )」のように、 FQDNでメソッドを記述して同様に動作されられます。

 3行目がメソッドの呼び出しの部分です。 JavaのSystem.out.printlnメソッドを実行して、文字列の出力をし、JRubyスクリプトからJavaのライブラリを使って文字列を出力しています。

*2 require 'java'の宣言をしなければ、JRubyは単なるRubyクローンとして動作します。
*3 importメソッドは、include_classメソッドの別名です。

クラス名の衝突に注意

図6●クラス名の衝突に注意
図6●クラス名の衝突に注意
[画像のクリックで拡大表示]

 Javaのクラスを利用する場合、注意しなくてはいけないことがあります。それは、 Javaのクラス名とJRubyのクラス名が同じ場合です。 JRubyに存在するクラスと同じ名前のJavaクラスをimportすると、 JavaクラスによりJRubyのクラスが隠ぺいされてしまうことがあります。

 例えば、 JRubyにはFileという名前の組み込みクラスがあります。同じくJavaにも、java.io.Fileというクラスがあります。 JavaのFileクラスをインポートしてしまうと、従来のJRubyのFileクラスが上書きされて、本来のJRubyのFileクラスにアクセスできなくなってしまいます(図6)。