連載
» 2008年07月24日 00時00分 公開

実用レベルに達したJRubyを体感してみよう(後編):Java屋がTomcatでRuby on Railsを試すには? (2/2)

[佐藤聖規,@IT]
前のページへ 1|2       

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」との連動企画です。このフォーラムには、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       

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。