NetBeans上で使ってみる
NetBeansではJ2EEアプリのひな形の作成と、内蔵されているGrassFishへのデブロイも簡単に出来るので、JRuby & Sinatra環境を構築してみます。Railsと違いプロジェクトのテンプレートが用意されているわけではないので、多少は手動でごにょごにょする必要はあります。
プロジェクトの作成
新規プロジェクトの作成で、Java WebのWeb アプリケーションをひな形にして作成します。
プロジェクト名とかは適当に。そのままWebApplication1として作成しました。
デフォルトのままです。GlassFish V3を使います。
ここもデフォルトです。ここに出てるフレームワークは使いません。これで完了です。
ライブラリの追加
JRubyとJRuby-Rackのjarファイルを用意します。
JRubyは、http://jruby.org/download/ からjruby-complete.jarをダウンロードしてきます。必要なのはcompleteが付いてるものです。今回は最新バージョンの、http://dist.codehaus.org/jruby/1.3.1/jruby-complete-1.3.1.jar をダウンロードしました。
Rackは、http://kenai.com/projects/jruby-rack/pages/Home#Download からjruby-rack.jarをダウンロードしてきます。今回は最新バージョンの、 http://kenai.com/downloads/jruby-rack/jruby-rack-0.9.5.jar をダウンロードしました。
用意した2つのjarファイルを、プロジェクトのライブラリとして追加します。プロジェクトプロパティのライブラリで追加しています。
gemの追加
Sinatraはgemからインストールします。JRuby-Rackは何も指定しないとWEB-INF/gemsディレクトリにgemがインストールされているとみなします。NetBeansで作成したWebApplicationにはgemsディレクトリは作られていないので、自分で作成してやる必要があります。
作成したgemsディレクトリに対してsinatraのgemをインストールします。普通にjrubyを使っても良いですが、先ほどダウンロードしてきたjruby-complete.jarを使うことも出来ます。NetBeansはgemの管理も出来るのですが、今回はコマンドラインから手動で追加しました。
java -jar WebApplication1/lib/jruby-complete-1.3.1.jar -S gem install -i WebApplication1/web/WEB-INF/gems/ sinatra --no-ri --no-rdoc
gem installに-iオプションを付けてインストールディレクトリを指定しています。他にもgemを使いたい場合は、同じように追加していけばOKです。
サンプル用のSinatraのRubyプログラムを作成
WEB-INF直下にdemo.rbとして作成しました。
require 'rubygems' require 'sinatra' get '/' do 'Hello world!' end get '/test/' do 'Hello Test' end
ここまでで、ディレクトリ構造はこんな感じになってます。
webの下にindex.jspが作成されていたのですが、邪魔なので消してます。
web.xmlの編集
最後にweb.xmlを編集します。ほとんどJRuby-Rackのサンプルをコピーしてきました。通常Rackのアプリを動かす時にruファイルを作成しますが、その内容をrackupのパラメータにて設定する感じです。
<?xml version="1.0" encoding="UTF-8"?> <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> <context-param> <param-name>rackup</param-name> <param-value> require 'rubygems' gem 'sinatra', '~> 0.9' require './demo' set :run, false set :environment, :production run Sinatra::Application </param-value> </context-param> <filter> <filter-name>RackFilter</filter-name> <filter-class>org.jruby.rack.RackFilter</filter-class> </filter> <filter-mapping> <filter-name>RackFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <listener> <listener-class>org.jruby.rack.RackServletContextListener</listener-class> </listener> </web-app>
動作チェック
これにて完了です。あとはWebサーバを起動すれば確認することが出来ます。NetBeansでプロジェクトを右クリック、実行で配備出来ます。
http://localhost:8080/WebApplication1/ にアクセスすればdemo.rbにて作成したものが表示されます。
使いどころ
J2EEで動かすのでパフォーマンスはかなり良いです。CGIと比べると圧倒的だと思います。
起動してしまえば早いのですが、起動完了まで時間がかかります。あと、ソースを修正する度にアプリケーションの再起動が必要なので、開発に使うには厳しいです。普段は素のRubyで動かしておいて、最終的にJ2EE上にデブロイするのが上手いやり方だと思います。
これだけだと手間がかかるだけで魅力的に感じませんが、Google App Engine上で動かす方法が確立されているので、それについてはかなり魅力的だと思います。
http://jugyo.org/blog/3388