TOPシステム開発> 自作クラスの呼び出し
JRuby
JRubyを知る!

第3回:RubyからJavaクラスを呼び出してみよう!

著者:アスタリクス  大西 正太   2007/9/14
前のページ  1  2  3  次のページ
自作クラスの呼び出し

   続いて、「第2回:JRubyでHello, Worldを実行する」で紹介したjirbを用いて、リスト2のように自作クラスの呼び出しを実行します。
リスト2:JRubyからの自作Javaクラス呼び出し
irb(main):001:0> require 'java'
=> true
irb(main):002:0> import 'sample.SamplePerson'
=> ["sample.SamplePerson"]
irb(main):003:0> p = SamplePerson.new
=> #<Java::Sample::SamplePerson:0x12412e7 @java_object=sample.SamplePerson@10efd7c>
irb(main):004:0> p.name = 'yamada'
=> "yamada"
irb(main):005:0> p.name
=> "yamada"
irb(main):006:0> p.age = 20
=> 20
irb(main):007:0> p.age
=> 20
irb(main):008:0> p.items = {:bag => 2, :phone => 1, :shoe => 2}
=> {:shoe=>2, :bag=>2, :phone=>1}
irb(main):009:0> p.items.map {|key, value| key}
=> [:shoe, :bag, :phone]
irb(main):010:0> p.shout_your_name_and_age
My name is yamada!!!
I am 20years old!!!
=> nil


リスト2についての解説

   それではリスト2を基に、その動作を見ていきましょう。


Javaクラスのロード

   2行目で先ほど作成したJavaクラスを読み込みます。JRubyは環境変数CLASSPATHで指定されたパス配下から該当するクラスを取得しています。


Javaクラスのnew

   3行目でJavaのクラスをnewしています。Javaのクラスでも問題なくrubyスタイルでnewの記述をすることができます。


アクセッサの自動変換

   4、5行目に注意して下さい。これはnameというプロパティの値を直接読み書きしているわけではありません(private宣言されているのでアクセスできません)。これは、nameというメソッドの呼び出しをしています。

   つまり、JRubyは「getName」「setName」というJavaの慣習に従ったアクセッサメソッドを、「name」「name=」というRubyの慣習に従ったアクセッサメソッドに変換してくれているのです。


JavaクラスとRubyクラスの自動変換

   4〜8行目の実行時にはStringやint、ハッシュの型変換が相互に行われています。特に8行目のようにRubyの記法でハッシュや配列が記述できることは、簡潔なソースコード記述へつながります。


便利なメソッドの利用

   9行目ではJavaのMapクラスでは定義されていないeachメソッドを呼び出しています。mapはeachなどとともにRubyの「ブロック(一般的にはクロージャと呼ばれる)」を利用した強力なメソッドです。


キャメルケース⇔アンダースコア変換

   10行目ではshout_your_name_and_ageというメソッドが呼ばれていますが、これはJava側で定義した「shoutYourNameAndAge」というメソッドを呼び出しています。アクセッサの場合と同様に、Javaの慣習に従いキャメルケースで書かれたメソッドを、Rubyの慣習に従ってアンダースコアで呼び出せるように変換してくれています。

   いかがでしょうか。JRubyは、RubyからシームレスにJavaのライブラリを利用するために、慣習なども含めて非常に気の利いた変換作業を行っていることがおわかりいただけたでしょうか。


Javaのオープンソースライブラリを利用

   続いてJavaのオープンソースライブラリとして有名なログ出力ライブラリ「Log4J」をJRubyから呼び出してみます。


Log4Jの導入

   Log4Jを下記のURLを辿ってダウンロードします。

Log4Jのダウンロードサイト
http://logging.apache.org/site/binindex.cgi

   ダウンロードしたファイルを解凍するとLog4Jのjarファイルが生成されますので、これを「JRUBY_HOME\lib」に配置します。先ほど説明した通り、この場所に配置することでクラスパスを指定しなくてもJRubyから認識されます。


設定ファイルの作成

   Log4Jの利用には設定ファイルが必要です。そのため、任意の位置にリスト3のように設定ファイルを作成してください。今回は「c:\work\jruby_sample\log4j.properties」というファイルに記述しました。

リスト3:log4j.properties
log4j.rootLogger=DEBUG, A1
log4j.appender.A1 = org.apache.log4j.ConsoleAppender
log4j.appender.A1.Target = System.err
log4j.appender.A1.layout = org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=[%-5p] - %m%n
log4j.appender.A1.threshold = DEBUG

   この設定で出力フォーマットなどの情報を設定しています(設定ファイルの詳細は割愛します)。

前のページ  1  2  3  次のページ


株式会社アスタリクス 大西 正太
著者プロフィール
株式会社アスタリクス  大西 正太
JavaEEフレームワークの設計構築や開発プロセス策定などの業務を経て、現在は新規ビジネス創生に携わる。Ruby on Rails上に構築したオープンソースのCMS「Rubricks」(http://rubricks.org/)のコミッタ。


INDEX
第3回:RubyからJavaクラスを呼び出してみよう!
  Rubyを利用するスタイルを知る
自作クラスの呼び出し
  Log4Jの利用