【ハウツー】

話題のJRubyを動かしてみよう TIPS編 - 書いてみよう自分のコード

1 JRubyにおけるJavaインテグレーション

    後藤大地  [2006/09/12]

    話題のJRubyを動かしてみよう 導入編 - JRubyのコツをつかむ においてJRubyを導入する方法を紹介した。ここではその次のステップを紹介したい。

    JRubyを使ってプログラミングをはじめるにあたっていくつかコツがある。本稿ではその"コツ"を紹介したい。基本的にはプロジェクトサイトに用意されている文章と、成果物に同梱されているドキュメント、サンプルコードを読めばよいため、本稿と併せてそれらのドキュメントにも目を通してほしい。

    JRubyは基本的にふたつのレベルでJavaとのインテグレーションをサポートしている。ひとつは低レベルサポート、もうひとつは高レベルサポートである。たとえばプロジェクトサイトに用意されているドキュメントから抜粋すると、低レベルサポートではリスト1.1のようにJavaのメソッドを利用する。これはJavaのリフレクションAPIに近いものだ。JRubyにおけるJavaサポートの本質といえるだろう。

    リスト1.1 Javaインテグレーションの低レベルサポート - JavaにおけるリフレクションAPIに近い

    java_method.invoke(java_object, arg1, arg2)

    RubyではJavaオブジェクトはすべてJavaObjectのインスタンスとして扱われることになる。Javaクラスの情報を表すものとしてはJavaClass、JavaMethod、JavaFieldが用意されている。リフレクションAPIとよく似ている。

    この方法は原理こそ理解しやすいものの、使いやすいものではない。これを使いやすくするためのサポートが、もう一方の高レベルサポートとなる。要するに、java_method.invokeを使って処理をするような便利なラッパメソッドを集めたものが用意されているわけである。JRubyではこれをJavaProxyと呼んでいる。同じく、プロジェクトサイトに用意されているドキュメントから抜粋すると、リスト1.2のように記述できるということだ。

    リスト1.2 Javaインテグレーションの高レベルサポート - java.util.RandomをRubyで使っている例。違和感なく統合されていることがわかる

    require 'java'

    include_class 'java.util.Random'

    r = Random.new

    puts r.nextInt

    リスト1.2はjava.util.RandomをRubyで使っている例だが、違和感なく統合されていることがわかる。オブジェクトの変換などはJavaProxyを通じて自動的に実施されている。たとえばリスト1.2の場合、r.nextIntで返ってくるのはintだが、Fixnumへ自動的に変換されている。もちろんすべてが変換されるわけではない。コレクションなどは変換されずにコレクションのままである。まずはこういったあたりからJRubyの学習をはじめていくといいだろう。

    新着記事

    特設サイトの情報

      求人情報

      人気記事

      一覧

      イチオシ記事

      新着記事

      特別企画

      転職ノウハウ

      あなたの仕事適性診断

      4つの診断で、自分の適性を見つめなおそう!

      Heroes File ~挑戦者たち~

      働くこと・挑戦し続けることへの思いを綴ったインタビュー

      はじめての転職診断

      あなたにピッタリのアドバイスを読むことができます。

      転職Q&A

      転職に必要な情報が収集できます

      スカウト転職する

      企業からアプローチのメッセージが届きます。

      マイナビニュースマガジン