特集「実用レベルに達したJRubyを体感してみよう」

実用レベルに達したJRubyを体感してみよう(後編)

Java屋がTomcatで
Ruby on Railsを試すには?


佐藤聖規
2008/7/24


Warblerでwarのパッケージ化をしよう

 続いて、前編で作成したToDo管理アプリケーションを、Tomcat上で動かすためにwar(Web Application Resources)ファイル化します。

Warblerとは何か?

 アプリケーションをwarファイル化するには、前述のWarblerを利用します。WarblerはRailsアプリケーションをwar化するGoldspikeをラッピングする形で作成しています(Warbler 0.9.5)。Goldspikeはwarファイルを作成するときにJavaサーブレット標準のフォルダ構成に準拠しない構成でwarファイルを作成してしまいます。一方、Warblerは動的ファイルを「WEB-INF」フォルダ以下に配置し、「.svn」「test」といった不要なファイルをwarファイルに含めません。

Warblerを使ってwarファイルを作成する手順

 手順は以下のとおりです。

  1. 「warbler config」コマンドでwarbler.rbを作成
  2. warbler.rbを編集
  3. 「warbler war」コマンドでwarファイルを作成

 warbler.rbを作成するには、コマンドプロンプト上でwar化したいプロジェクト(例、ToDoManager)に移動して、以下のコマンドを実行します。

> jruby -S warble config

 コマンドが成功すると、「ToDoManager\config\warble.rb」ファイルができます。

 続いて、warble.rb中の赤文字の部分を編集して、作成するwarファイルのRailsのバージョンや含めるパッケージの設定を行います。

# Warbler web application assembly configuration file
Warbler::Config.new do |config|
# Temporary directory where the application is staged
# config.staging_dir = "tmp/war"

# Application directories to be included in the webapp.
config.dirs = %w(app config lib log vendor tmp)

# Additional files/directories to include, above those in config.dirs
# config.includes = FileList["db"]

# Additional files/directories to exclude
# config.excludes = FileList["lib/tasks/*"]

# Additional Java .jar files to include. Note that if .jar files are placed
# in lib (and not otherwise excluded) then they need not be mentioned here
# JRuby and Goldspike are pre-loaded in this list. Be sure to include your
# own versions if you directly set the value
# config.java_libs += FileList["lib/java/*.jar"]

# Loose Java classes and miscellaneous files to be placed in WEB-INF/classes.
# config.java_classes = FileList["target/classes/**.*"]

# One or more pathmaps defining how the java classes should be copied into
# WEB-INF/classes. The example pathmap below accompanies the java_classes
# configuration above. See http://rake.rubyforge.org/classes/String.html#M000017
# for details of how to specify a pathmap.
# config.pathmaps.java_classes << "%{target/classes/,}"

# Gems to be packaged in the webapp. Note that Rails gems are added to this
# list if vendor/rails is not present, so be sure to include rails if you
# overwrite the value
# warに同梱するgemsライブラリを指定
config.gems = ["activerecord-jdbcderby-adapter", "jruby-openssl"]
# config.gems << "tzinfo"
# warに同梱するRailsのバージョンを指定
config.gems["rails"] = "2.0.2"

# Include gem dependencies not mentioned specifically
config.gem_dependencies = true

# Files to be included in the root of the webapp. Note that files in public
# will have the leading 'public/' part of the path stripped during staging.
# config.public_html = FileList["public/**/*", "doc/**/*"]

# Pathmaps for controlling how public HTML files are copied into the .war
# config.pathmaps.public_html = ["%{public/,}p"]

# Name of the war file (without the .war) -- defaults to the basename
# of RAILS_ROOT
# config.war_name = "mywar"

# True if the webapp has no external dependencies
config.webxml.standalone = true

# Location of JRuby, required for non-standalone apps
# config.webxml.jruby_home = <jruby/home>

# Value of RAILS_ENV for the webapp
# Railsの動作モードをdevelopmentに指定
# productionモードで動作させるには、migrate実行時に
# "RAILS_ENV=production"のオプションをつける
config.webxml.rails_env = 'development'

# Control the pool of Rails runtimes
# (Goldspike-specific; see README for details)
# config.webxml.pool.maxActive = 4
# config.webxml.pool.minIdle = 2
# config.webxml.pool.checkInterval = 0
# config.webxml.pool.maxWait = 30000

# JNDI data source name
# config.webxml.jndi = 'jdbc/rails'
end

 最後に、warファイルを以下のコマンドで作成します。

> jruby -S warble war

 成功すると、「プロジェクト名.war(例、ToDoManager.war)」ファイルができています。

 なお、warを作り直す場合は以下のコマンドを実行してwarファイルのために一時領域を削除します。

> jruby -S warble war:clean

ついに発進! Tomcat on Rails

 warファイルを作ることができたら、いよいよTomcat上にデプロイしましょう。warファイルさえ作成しておけば、デプロイ作業は非常に簡単です。Tomcatインストールフォルダの「webapps」フォルダに作成したwarファイル(ToDoManager.war)をコピーするだけです。

 このときDerbyと接続するので、RadRailsを起動しておいてください。RadRailsを起動すると、Derbyが起動します。

Ruby on Rails 2.0の新機能「Cookie Session Store」

 ここでTomcatを起動します。Tomcatが起動したらすぐに動作を確認したいところですが、このままではアプリケーションは動作しません(Warbler 0.9.5の場合、※注2)。WarblerのベースになっているGoldspikeがRuby on Rails 2.0の新機能である「Cookie Session StoreCookieを使うセッション管理)」に対応していないためです。

 回避するためには、web.xmlを編集する必要があります。Tomcatのインストールフォルダにある「【プロジェクト名】/WEB-INF/web.xml」に以下の行を追加します。

    <context-param>
      <param-name>jruby.session_store</param-name>
      <param-value>db</param-value>
    </context-param>

 毎回warファイルを展開した後に上記コードの追加を行うのが手間な場合は、Warblerでwarファイルを作成するときに静的なweb.xmlを渡すことが可能です。「【プロジェクトルート】/config」フォルダに上記コードを追加したweb.xmlを置いておくことで、次回からwarファイルを作成したときに自動的に含めます。

※注2:2008年7月現在の最新版であるWarbler 0.9.9では、WarblerのベースがGoldspikeからJRuby Rackに変更されているため、すでに対応済みです。ただし、RadRailsに同梱されるJRuby 1.1 RC2では動作が不安定なので、注意してください

Tomcat on Railsの動作確認

 web.xmlを編集したら、Tomcatを再起動します。Tomcatが起動したのを確認したら、【プロジェクト名】/【アプリケーション名】のURLにアクセスします(例、http://localhost:8080/ToDoManager/todos)。すると、Tomcat上でToDo管理アプリケーションが動作していることを確認できます。

図4 Tomcatで動作確認
図4 Tomcatで動作確認(画像をクリックすると、拡大します)

実業務でも使われ始めたJRuby on Railsに期待

 本稿では、前編・後編と2回にわたってJRuby on Railsを紹介しましたが、いかがでしたか?

 JRuby on Railsのメリットに注目して紹介してきましたが、まだまだ商用レベルでの実績は少なく、安定性に欠ける部分もあるかもしれません。しかし、RubyやJRubyで開発実績のある伊藤忠テクノソリューションズと帳票ベンダのウイングアーク テクノロジーズが、2008年7月14日からエンタープライズ市場を対象にJRubyを利用した帳票ソリューションの共同展開を開始するという発表もありました(参考)。JRuby on RailsはこれからもRubyとJavaのイイとこ取りをしながら発展をしていくことでしょう。

 RadRailsを使えば、手軽にJRuby on Railsを試すことができますので、皆さんもJRubyでRailsに乗ってみませんか?

@IT関連記事


Coding Edge
この記事は、プログラミングに誇りを感じるヒトのための技術情報フォーラム「Coding Edge」との連動企画です。このフォーラムには、Rubyの情報が多数掲載されます

JRuby on RailsやJava EE開発に便利なNetBeans
Eclipse対抗馬の本命!? NetBeansとは?(後編) 
NetBeansはDB連携やWebアプリケーション、いま注目のJRuby on Railsの開発も簡単で、便利な機能がてんこ盛り
Java Solution」フォーラム 2008/3/17
(Java+Derby)* Ruby on Rails プログラミング
小山博史のJavaを楽しむ(4) 
世の中には、JavaなまりのRubyである「JRuby」という言語がある。しかも、それがRailsで使えるとなると……。試してみない手はないだろう

Java Solution」フォーラム 2007/2/7
Ruby On Railsのチームに学ぶ仕事術
安藤幸央のランダウン(30) 
素早い開発を提供するRuby On Rails。その開発チームも、優れたツールの活用でRuby On Railsのスピーディーな開発を実現している

Java Solution」フォーラム 2006/3/25
WebプログラマはRailsに乗るべきか?
安藤幸央のランダウン(29) 
日本で産まれたスクリプト言語Ruby。そのWebフレームワークとして海外から登場したRuby on Railsは驚異的なRADを提供するという

Java Solution」フォーラム 2006/2/11
スクリプト言語をサポートするEclipseプラグイン
CoolなEclipseプラグイン(10) 
EclipseはJava以外の言語もサポートする。今回はPerl、Ruby、Pythonなどのスクリプト言語をサポートするプラグインを紹介する

Java Solution」フォーラム 2006/2/25

JavaエンジニアのためのRuby入門

何だか盛り上がっているRuby。「でも触ったことないし」とためらうJavaエンジニアの皆さん! この2つ、実はよく似ているのです
第1回 Javaエンジニアにこそ、Rubyの良さが分かる

第2回 JavaとRubyの共通点と相違点
第3回 Strutsの知識を基に、Ruby on Railsを学ぶ方法

プロフィール
佐藤 聖規(さとう まさのり)

某大手SIerに勤務し、ソフトウェア開発の抜本的生産性向上のためEclipseを中心とした開発環境の整備に日夜いそしんでいる。
その傍ら、アーキテクトやトラブルシューターとしてプロジェクト支援も行っている。

1-2

 INDEX 【特集】実用レベルに達したJRubyを体感してみよう(後編)
        「Java屋がTomcatでRuby on Railsを試すには?」
  Page1
  JRuby on Railsの“真骨頂”とは?
Ruby on RailsをJavaサーバで動かす4つのメリット
TomcatでJRuby on Railsを動かす準備
コラム 「JRuby on Railsの環境を一括構築! 便利なJRubyStackとは?」
Page2
  Warblerでwarのパッケージ化をしよう
ついに発進! Tomcat on Rails
実業務でも使われ始めたJRuby on Railsに期待





Java Solution全記事一覧

TechTargetジャパン

Java Solution フォーラム 新着記事

@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

RSSフィード

キャリアアップ

- PR -
@IT Sepcial

イベントカレンダー

PickUpイベント

- PR -
もっと見る
- PR -

お勧め求人情報

ホワイトペーパーTechTargetジャパン

@IT Sepcial
ソリューションFLASH