With CRuby

LuRuJu-0.2.0より、CRuby上でもJUDEのモデル情報をロードできるようになった。ここでは、CRuby上でLuRuJuを利用する方法を紹介する。

前提条件

  • JRuby上でLuRuJuが動作する状態になっている。Install LuRuJu を参考にするとよい。
  • jrubyにパスが通っている。

Ruby,gemのインストール

各自の環境にあわせ、Rubyとgemをインストールする。詳細は割愛するが、筆者はRubyForge よりOne-Click Ruby Installerをダウンロードしてインストールした。

以下のコマンドで動作確認ができる。

>ruby --version
ruby 1.8.6 (2007-03-13 patchlevel 0) [i386-mswin32]

>gem --version
0.9.2

LuRuJuのインストール

CRubyのgemにLuRuJuをインストールする。インストールするLuRuJuのバージョンはJRuby上にインストールしたバージョンと合わせておく。(JRubyとCRubyが同一GEM_HOMEで、すでにインストール済みであればインストールの必要はない)

>gem install luruju

依存ライブラリActiveSupportがインストールされてなければ、インストールするかどうか きかれます。ここではYを押してActiveSupportもインストールします。(-yオプションをすれば確認を求められない)

以下のコマンド実行すると、インストールされたことが確認できます。

>gem list -l luruju

*** LOCAL GEMS ***

luruju (0.2.0)

>jruby -S gem list -l luruju

*** LOCAL GEMS ***

luruju (0.2.0)


2つの実現方式

JUDEが提供するAPIはJavaベースなので、CRuby上での動作を実現するためにLuRuJuライブラリ内部でJRubyを経由している。 LuRuJuでは、CRuby-JRuby間の通信方式として以下の2つを用意している。

  • dRuby(デフォルト)
  • コマンド

これらはConfigurationで切り分けることができる。 両者の簡単なメリットデメリットとしては、dRubyを使用すると、いったんdRubyサーバさえ起動すれば、JUDEファイルのロード時間はかなり短縮される。ただし常駐プロセスとして常にメモリは消費する。コマンドの場合はJUDEファイルをロードするとき以外はjrubyのメモリは使用しないが、ロードする度にjrubyコマンドが起動するのでロード時間が結構かかってしまう。

dRubyを経由したモデル情報のロード

dRubyを経由したCRubyでのロード方法を説明する。以後、dRubyサーバをLuRuJuサーバと呼ぶ。

LuRuJuサーバの起動・停止するために、Rakeタスクが提供されている。以下の記述内容を含むRakefileを用意する。

用意したRakefileがあるディレクトリ上で以下のコマンドを発行して、LuRuJuサーバを起動する。LuRuJuサーバは必ずJRubyで起動する。

>jruby -S rake luruju:server:start
(in C:/tmp)
start LuRuJu Server URL=druby://127.0.0.1:3937

以上でCRubyを使用する準備は完了となる。

サンプルコードで動作確認してみる。 以下のRubyファイル(sample.rb)を作成する。またJUDEファイル(sample.jude)を準備する。

CRubyを実行すると、クラス名の一覧が表示される。

>ruby sample.rb
"Customer" 
"Order" 
"OrderedItem" 
"Item" 
"GeneralCustomer" 
"Delivery" 
"DeliveryCenter" 
"CorporateCustomer" 

LuRuJuサーバ経由でモデル情報が読み込まれており、LuRuJuサーバの標準出力に以下の内容が表示される。

start loadding sample.jude
end loading

LuRuJuサーバを停止するには、以下のRakeタスクを実行する。停止するときはJRubyでもCRubyでもかまわない。

>rake luruju:server:stop

コマンドを経由したモデル情報のロード

コマンドを経由したCRubyでのロード方法を説明する。

モデル情報をロードする前にConfigurationでコマンドを利用する設定を行えばよい。(設定についてはConfiguration も参照のこと)

先ほどのサンプルコードをもとに動作確認してみる。 Rubyファイル(sample.rb)の内容にConfigurationを追加する。

CRubyを実行すると、クラス名の一覧が表示される。

>ruby sample.rb
"Customer" 
"Order" 
"OrderedItem" 
"Item" 
"GeneralCustomer" 
"Delivery" 
"DeliveryCenter" 
"CorporateCustomer"