JRubyとは
JRuby の環境構築
JRuby On Railsの環境構築
JRoRアプリの作成
コアライブラリの利用
Javaライブラリの利用
JRoRアプリのTomcatへのデプロイ
Javaで書かれたRubyの実行環境です。
JVM上で動くRubyのため両言語間のシームレスな連携を実現している点が特徴である。具体的にはRubyからJavaのオブジェクトにアクセスが可能となります。
逆にJavaからRubyにアクセスするためのAPIには、「JSR223」「BSF」などがあります。
母体となる言語は「Ruby」であり、まつもとゆきひろ氏により、1993/2/24に誕生しました。「気軽に使えて、柔軟に書ける、オブジェクト指向言語」です。
現在の最新ヴァージョンは、1.1.4 であり、Ruby 1.8.6に完全互換しています。
◆Jruby公式サイト:http://jruby.codehaus.org/
【参考文献】:『JRuby 徹底入門』
◆サポートサイト:http:///www.sotechsha.co.jp/sp/645/
◆JRubyに必要な環境
JDKのインストール
インストールされていない方は、こちらよりJDKをダウンロードしインストーラに従いインストールしてください。ここではjdk1.6.0_06を使うものとして話を進めます。
ちなみに環境変数は、
JAVA_HOME=C:\Program Files\Java\jdk1.6.0_06
とします。
Path=%JAVA_HOME%\bin;%Path%;
(※もしOracleなどをインストールする場合は、Oracleのパスよりも前に%JAVA_HOME%\bin;を通してください。)
◆JRubyのインストール
・Windowsの場合は、zipを選択
ここから最新(jruby-bin-1.1.4.zip)をダウンロードし、zip解凍して環境変数を設定します。
ここでは例として以下の環境に展開しました。
C:\jruby\jruby-1.1.4
環境変数の設定
JRubyは実は後述するRadRailsによる開発の場合、プラグインについてきます。なのでRadRailsで開発する場合には必ずしも必要がないでしょう。その場合は、実際の開発環境に合わせて設定してください。このモジュールを使うとした場合は以下のようにするといいでしょう。
JRUBY_HOME=C:\jruby\jruby-1.1.4
Path=%Path%;%JRUBY_HOME%\bin;
◆あると便利なIDE環境
EclipseのRadRails
全部そろった「pleiades-all-in-one-ultimate_20081006.zip」がお勧めです。(=>ダウンロードはこちらから。Eclipse 3.4.1 Ganymedeのultimateがお勧めです。ちなみに3.3.1のほうにはultimateでも今回使いたいRadRailsのプラグインが入ってませんでした。。。)
これを仕込めば自動的にJRubyのVMがプラグインとして付随してきます。
ここでは、eclipseの環境を以下とし、
C:\eclipse\341
eclipseでのワークスペースを以下とします。
C:\workspace\341
ここでRadRailsのプラグインが使用するRubyを選択できますが、付属のJRubyを使う場合、それは以下にあります。
C:\eclipse\341\dropins\Aptana_RadRails\eclipse\plugins\org.jruby_1.1.0.5965_RC2p2
これを使用する場合、環境変数の設定は以下のようになるはずです。
JRUBY_HOME=C:\eclipse\341\dropins\Aptana_RadRails\eclipse\plugins\org.jruby_1.1.0.5965_RC2p2
◆Webサーバ
開発工期においてはスタンドアロンで開発機にあればいいだろう、リリースを踏まえた場合、他機に構築して使えるようにしておきたい。
開発時点では、自機にApacheかMongrelサーバをたてて使用する。後ほどRailsアプリをTomcatに配置して動かしてみようと思う。スタンドアロンでの動作確認が済み次第、リリースマシンを準備する。リリース時期にはWebサーバ+アプリサーバ機としてCentOSを用意する。
開発時期:開発機(192.168.1.52):Apache1.3,Tomcat5.5,Mongrel
リリース時期:リリース機(192.168.1.40):Apache2.2.4,Tomcat5.5,Mongrel
開発機の準備には、個別にサーバを導入してもいいですが、そもそもRailsをやるかたは、InstantRailsがインストールされているのではないでしょうか。その場合は、Apacheなど特にヴァージョンにこだわりがなければそれを間借りしましょう。Mongrelの場合はちゃんと使用するRubyの環境に合わせてgem でインストールする必要があります。
C:\jruby\jruby-1.1.4\lib\ruby\gems\1.8\gems
もしくは、
C:\eclipse\341\dropins\Aptana_RadRails\eclipse\plugins\org.jruby_1.1.0.5965_RC2p2\lib\ruby\gems\1.8\gems
の内部を調べ、mongrelが入っていることを念のため確認しておきましょう。
Tomcatを準備していない方は、こちらよりダウンロードしてインストールしてください。
上記で紹介したeclipseにはTomcatのプラグインが入っているのでプロパティの設定でパスを合わせてください。もし後述のOracleXEをインストールする場合は、8080ポートを奪われないように、ここで立ち上げておいてください。
◆DBサーバ
対応しているRDBMSは多い。ここでは Oracleを使ってみようと思う。デフォルトとはRails 1.2.3ではMySQLであり、Rails 2.0.2 ではSQLite3である。Oracleでの導入例の情報は少ないが、できるだけこの環境で構築してみたいと思う。またあわせて、MySQLの環境も構築できることを確認しておきたい。RailsはマルチDBの構築を目指しているが、それが実際のところ可能なのかをここで調査していきたい。
開発時期:開発機(192.168.1.52):Orcale10g XE
リリース時期:リリース機(192.168.1.36):Orcale10g R02
まだDBを準備していない方は、開発機に使用する予定のOracleXEはこちらよりダウンロードしてインストールしてください。この時注意すべきは、後ほど使用する予定のTomcatとのポートのぶつかりあいです。これを避ける手軽な方法は、Tomcat5.5のほうを先にインストールしておき、起動して8080ポートをリスニング状態にしたうえで、OracleXEのインストーラを実行すれば、デフォルトは8081が指定されるでよう。
環境変数は
ORACLE_SID=XE
ユーザは開発用とテスト用と、あと念のためリリース用のスキーマを準備しましょう。Railsの場合DB作成までやってくれるToolがついていますが、Oracleの場合は3つのDBを作るよりも、3つのスキーマを作成するほうが現実的だと判断します。
dev01/oracle
tes01/oracle
pro01/oracle
を作成します。
作業はインストールに成功していれば以下のURLでWebからできるでしょう。
また、リリース機へのOracleの用意は別途行ってください。
リナックス機へのOracle製品のインストールはそれなりに複雑ですので、手順を踏まえないと失敗します。ここではインストールの詳細は触れませんが、後ほど『CentOS5へのOracle10gのインストールマニュアル』の記事を書く予定でいます。
DBサーバリリース機の情報
IPアドレス(例):192.168.1.36
ORACLE_SID=orcl
dev01/oracle
tes01/oracle
pro01/oracle
操作は以下のWebToolが便利です。
http://192.168.1.36:5560/isqlplus/
ユーザ作成などの管理Toolは以下から作業するのがいいでしょう。
ユーザの作成
sys/xxxxx SYSDBA
管理=>ユーザの作成=>作成
スタンドアロンにしてもそうでないにしても、DBサーバを準備したら、次に OracleのClientを準備します。
ダウンロードはこちらから Instant Client
アカウントの登録をすればダウンロード可能になる。
登録後、サイト登録を行い、ダウンロードページにてサインイン。
BASICとSDKだけでもいいらしいが、念のため全部ダウンロードする。
instantclient-basic-win32-10.2.0.3-20061115.zip
instantclient-jdbc-win32-10.2.0.3-20061115.zip
instantclient-odbc-win32-10.2.0.3-20061115.zip
instantclient-sdk-win32-10.2.0.3-20061115.zip
instantclient-sqlplus-win32-10.2.0.3-20061115.zip
これを以下に解凍する。
C:\MY\TOOL\EXT\instantclient_10_2
中にあるDDLファイル一覧
heteroxa10.dll
oci.dll
ocijdbc10.dll
ociw32.dll
orannzsbb10.dll
oraocci10.dll
oraociei10.dll
Orasqlplusic10.dll
sqora32.dll
sqoras32.dll
sqresja.dll
sqresus.dll
これを、%JRUBY_HOME%\bin以下に配置する。
C:\eclipse\341\dropins\Aptana_RadRails\eclipse\plugins\org.jruby_1.1.0.5965_RC2p2\bin
次にRubyのバインディングのためのOracleのOCIドライバを準備します。
ダウンロードはRubyForgeから ruby-oci8-1.0.3-mswin32.rb
C:\eclipse\341\dropins\Aptana_RadRails\eclipse\plugins\org.jruby_1.1.0.5965_RC2p2\bin
に配置します。
ダウンロードしたrbファイルを指定して任意のディレクトリでrubyコマンドの実行します。
C:\eclipse\341\dropins\Aptana_RadRails\eclipse\plugins\org.jruby_1.1.0.5965_RC2p
2\bin>jruby ruby-oci8-1.0.3-mswin32.rb
This package is for i386-mswin32
install anyway?
Enter Yes/No: yes
Copy OCI8.rb to C:/eclipse/341/dropins/Aptana_RadRails/eclipse/plugins/org.jruby
_1.1.0.5965_RC2p2/lib/ruby/site_ruby/1.8/DBD/OCI8
Copy oci8.rb to C:/eclipse/341/dropins/Aptana_RadRails/eclipse/plugins/org.jruby
_1.1.0.5965_RC2p2/lib/ruby/site_ruby/1.8
Copy oci8lib.so to C:/eclipse/341/dropins/Aptana_RadRails/eclipse/plugins/org.jr
uby_1.1.0.5965_RC2p2/lib/ruby/site_ruby/1.8/java
OK?
Enter Yes/No: y
Copying OCI8.rb to C:/eclipse/341/dropins/Aptana_RadRails/eclipse/plugins/org.jr
uby_1.1.0.5965_RC2p2/lib/ruby/site_ruby/1.8/DBD/OCI8 ... done
Copying oci8.rb to C:/eclipse/341/dropins/Aptana_RadRails/eclipse/plugins/org.jr
uby_1.1.0.5965_RC2p2/lib/ruby/site_ruby/1.8 ... done
Copying oci8lib.so to C:/eclipse/341/dropins/Aptana_RadRails/eclipse/plugins/org
.jruby_1.1.0.5965_RC2p2/lib/ruby/site_ruby/1.8/java ... done
OKC:\eclipse\341\dropins\Aptana_RadRails\eclipse\plugins\org.jruby_1.1.0.5965_RC2p
2\bin>
◆超お手軽一括インストーラ
アプリの作成はeclipse上のRadRailsで行おうと思う。今回はRubyではなくJRubyを使う点と、あらかじめ他のInstantRailsとかの開発環境が混じっているとgemなどで問題を生じるので、環境変数Pathを確認する。ここは念には念を。再確認します。
C:\eclipse\341\dropins\Aptana_RadRails\eclipse\plugins\org.jruby_1.1.0.5965_RC2p
2\bin>echo %Path%
Path:=C:\oraclexe\app\oracle\product\10.2.0\server\bin;C:\InstantRails20\mysql\b
in;C:\Program Files\Java\jdk1.6.0_06\bin;C:\WINNT\system32;C:\WINNT;C:\WINNT\Sys
tem32\Wbem;C:\eclipse\341\dropins\Aptana_RadRails\eclipse\plugins\org.jruby_1.1.
0.5965_RC2p2\bin;
プラグインのほうのJRubyが優先されていることを確認。(コンソールで作業するケースが出てきた場合にここが重要になる。)
eclipseの設定の確認
プロジェクトの作成
プロジェクト名:JRoROra01
プロジェクトのソースの雛形を一括作成後、自動的にサーバが立ち上がっています。
まだ対応する画面もテーブルも作成していないので、Topページのみの動作確認です。
次に通常はDBを作成します。
たいていの場合は、「rake db:create」にてDB自体を生成しますが、今回のOracleの場合は、この手順は割愛し、既存のインストール時のDBを使用することにします。
scaffoldします。
scaffold
todo limit:timestamp title:string detail:text
MVCアーキテクチャの対応ソースが一気にでき、更にマイグレーションファイルもできあがっています。中身を確認します。
class CreateTodos < ActiveRecord::Migration
def self.up
create_table :todos do |t|
t.timestamp :limit
t.string :title
t.text :detailt.timestamps
end
enddef self.down
drop_table :todos
end
end
次にいよいよ、DBにテーブルを作成しますが、その前にDBへの接続条件を確認します。
development:
adapter: oracle
database: 192.168.1.36/orcl
username: dev01
password: oracletest:
adapter: oracle
database: 192.168.1.36/orcl
username: tes01
password: oracleproduction:
adapter: oracle
database: 192.168.1.36/orcl
username: pro01
password: oracle
念のためクライアントPCからDBサーバ側へSSH接続するなりして疎通確認を行います。特に1521番ポートは使用するので、ちゃんとポートがLISTENING状態であり、F/Wにおいても開放されていることを確認しておきます。
[root@vm36 ~]# ifconfig
eth0 Link encap:Ethernet HWaddr 00:0C:29:C8:19:70
inet addr:192.168.1.36 Bcast:192.168.1.255 Mask:255.255.255.0...
[root@vm36 ~]# netstat -na | grep 1521
tcp 0 0 0.0.0.0:1521 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:31502 127.0.0.1:1521 ESTABLISHED
ここで、db:migrateを実行する。
あ
あ
あ