« ITには物語や視点が必要 | メイン | レバレッジの効く仕事をする »

Webアプリケーション開発の今後- Rails + Spring

 11/6日本Javaユーザーグループによる「クロス・コミュニティ・カンファレンス 2007 falll」に参加してきました。SeasarひがさんRails高井さんとともに 「Webアプリケーション開発の今後を占う」という題名でポジショントークとパネルを行いました。よういちろうさんがuStreamで録画してくれたので見てください。ちょっと、音声がぶつぶつですが、だいたい聞き取れると思います。ポジショントークの資料はこちら

RailsでSpring
 ポジショントークで紹介したのがRailsとSpringを統合してみた、というやつです。コードはここに
 まずJavaアプリケーションですがjava\src\java\mainに入っています。クラスBusinessLogicImplは、メッセージを返却するだけのメソッドshowMessageが実装されています。

package jp.java_users.ccc2007.impl;
import jp.java_users.ccc2007.BusinessLogic;
public class BusinessLogicImpl implements BusinessLogic {
 private String message;
 public void setMessage(String message) {
  this.message = message;
 }
 public String showMessage() {
  return message;
 }

メッセージはSpringにinjectしてもらう想定。java\src\java\resourcesのapplicationContext.xmlを見てください。

<bean id="mybl" class="jp.java_users.ccc2007.impl.BusinessLogicImpl" >
  <property name="message" value="Hello Spring" />
</bean>

 Springの起動はweb.xmlを利用しますがconfigに入っています。applicatioinContextはクラスパス経由で呼び出されます。これらはJARファイルにしてlib\spring-rails-0.0.1にいれてあります。


 さて、Railsアプリケーションはすごく単純なものでconfig\routes.rbにあるように、なんでもCccで受けます。

map.connect '', :controller => "ccc", :action => 'index'

 コントローラーはapp\controllers\CccController.rbです。

class CccController < ApplicationController
  include Java
  import org.springframework.web.context.support.WebApplicationContextUtils
  def index
    app_context = WebApplicationContextUtils.getWebApplicationContext($servlet_context)
    @mybl = app_context.getBean 'mybl'
    @message = "Hello World"
  end
end

 これはJRubyを前提に、いきなりSpringのWebApplicationContextUtilsを使うように書いてあります。が、もっとラッピングしてかっこよくすることは可能だと思います。Railsがよくわからないから手抜き。

 で、テンプレートがviews\ccc\index.rhtml。

<%= @message %><br />
<%= @mybl.showMessage %><br />

 こんだけですね。

 さて、このRailsのアプリケーションをWARファイルで動かします。これに利用したのがWarblerです。RailsをServletコンテナで動かすというのではGoldSpikeが有名だと思いますが、WarblerはGoldSpikeを使いやすくするためのツールです。詳しくはInfoQの「Warbler:RailsのJava EE WARファイル向けパッケージングツールの機能強化」と作者の「Warbler, A Little Birdie To Introduce Your Rails App To Java」をどうぞ。

 使い方は簡単(詳しくはWarblerのページで)。

1.web.xmlをcxonfigにおく(元ネタは1回Warblerを実行したときにできるtmp/war/WEB-INF/web.xmlを利用)
2.必要なJARファイルをlibにおく
3.jruby %JRUBY_HOME%\bin\warbleを実行

 これだけでwarファイルを作ってくれます。すごい便利。


パネル
 さてパネルですが、なかなか面白かったです。yoshiori、おつかれ!

 個人的な発見はSpringの立場が一番柔軟で可能性や多様性を認めるという点です。RailsやSeasaerほうが、ある意味で頑な。もちろん柔軟性がある=良いという単純な図式ではありません。柔軟性を得るために暗黙的な規約を排除し、なるべく明示的な設定を行おうという姿勢になるわけですね。そう、Springは「柔軟でありたい」ということについては、ものすごい頑なです。

 Webアプリケーションの今後についても「コンテキストを読んで勝ちパターンにしたがってやんなさい」 by 高井さんという意味では3者とも同じ意見。ただ、解き方が違うわけです。

 僕はエンジニアの持つ特性や才能を活かすには個々人の作業にあった道具(言語やフレームワーク)が必要だと思っています。だから、複数の言語やフレームワークが1つのアプリケーションの中で使われるのは当たり前のことです。そして、それらの統合するためのインフラとしてはSpringが最も使いやすいと考えています。


トラックバック

このエントリーのトラックバックURL:
http://www.arclamp.jp/mt33/mt-tracback.cgi/2392

コメントを投稿

(いままで、ここでコメントしたことがないときは、コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。承認されるまではコメントは表示されません。そのときはしばらく待ってください。)

About

2007年11月08日 09:14に投稿されたエントリーのページです。

ひとつ前の投稿は「ITには物語や視点が必要」です。

次の投稿は「レバレッジの効く仕事をする」です。

他にも多くのエントリーがあります。メインページアーカイブページも見てください。

Creative Commons License
このブログは、次のライセンスで保護されています。 クリエイティブ・コモンズ・ライセンス.
Powered by
Movable Type