Java+Strutsの視点からRailsを捉える

RailsとStrutsの比較を整理する

 さて、まとめとして、RailsとStrutsの特徴を比較すると、次の表のようになると筆者は考えます。

  Rails Struts
MVC準拠 準拠 準拠
ORMのハンドル ActiveRecord ×
Ajaxへの対応 対応 未対応
設定ファイルの記述量 少ない 多い
規約の柔軟性・汎用性 カスタマイズで可能 設定の記述で対応
コードの記述量 Scaffoldで削減可能 やや冗長なコーディングも多い
統合開発環境 あり あり
実績 リリース間もない 豊富な実績
日本語情報 少ない 豊富

 MVCアーキテクチャに関しては、どちらのフレームワークも準拠しており、特に差はありません。それに対して、Rails、Struts双方の思想を特徴付けるものの1つに、ORMのバンドルの有無が挙げられるのではないでしょうか。Strutsは、フレームワークとしてのシンプルさ、ライトウェイト性を重視し、ORMをはじめとするいくつかの機能については、ほかのソリューションとの組み合わせを前提とした構成となっています。対してRailsは、ActiveRecordというORMを初めからバンドルしています。これはあらかじめ必要な機能を提供するという側面もありますが、前述したようにRails流の規約に統制するために1つのORMに限定してバンドルしたとみることもできます。

 また、Railsには開発者が記述すべき設定ファイル類が少ないことも特徴です。「設定より規約」の思想に基づき、多少柔軟性や汎用性を犠牲にする部分もあるものの、Strutsでは設定ファイルで指示すべき内容を「規約」として定めてしまうことでそれを実現しています。

 Railsではさらにscaffoldという仕組みによって、単なるサンプルコードではない、実際に動くテンプレートを提供して、開発者のコーディング量の軽減を図っています。

 Strutsに一日の長があるのは日本語でのサポートや情報量などの点です。リリースから数年がたつStrutsでは日本語での情報が豊富に提供されていますが、それに比べるとRailsはまだまだ発展途上といえるでしょう。

Ruby on Railsのそのほかの機能

■Ajaxへの対応

 Railsの特長の1つであり、Javaエンジニアにとっても興味深いのが、RailsがAjaxに標準で対応したフレームワークであることです。RailsとWeb 2.0が関連付けて語られることが多いのも、そういった背景が影響しているのでしょう。もちろん、自分で、AjaxのJavaScriptコードを書けばほかのフレームワークでもAjaxに対応したアプリケーションは作成できます。Railsの場合はフレームワークレベルで対応しているため、JavaScriptのコードを書かずともAjaxの機能を利用することができるのです。

 例えば、

<%= observe_field(:user_name,
:frequency => 0.5,
:update => :update_div,
:url => {:action => :ajax_action})%>


<div id="update_div"></div>

とRHTMLに記載したとします。すると、user_nameというフォーム要素(テキストフィールドやセレクトボックスなど)の値が変更されたことをRailsが検知し、コントローラクラスのajax_actionメソッドが実行され、その応答(この場合は、_ajax_action.rhtml)が、<div>タグの内部の記述として動的に置き換わります。このようにJavaScriptコードの記載をすることなくAjaxの機能が使えるのです。


■統合開発環境も提供

 Railsフレームワーク自体の機能というわけではありませんが、統合開発環境の存在についても触れておきましょう。Javaでの統合開発環境というと、Eclipseが非常にメジャーな存在ですが、実はEclipseにはRails開発のためのプラグインとして「RadRails」(http://www.radrails.org/)がすでに存在しています。Javaエンジニアの皆さんにとっては、慣れ親しんだ環境でコーディングができるというのはかなり歓迎できることではないでしょうか。コードの色分けや補完機能も備えており、Rubyに不慣れな方にもお勧めできます。
 
画面3 統合開発環境「RadRails」の画面 (クリックすると拡大)

JavaエンジニアはRailsとどう付き合うべきか?

 ここまでの内容をご覧になって、誤解していただきたくないこととして、これらは必ずしも言語としてのRubyが優れていて、Javaが時代遅れであるということを意味しているのではありません。RailsはStrutsの最初の正式リリースである1.0から数年後に発表されたフレームワークであり、Strutsやほかの既存のWebアプリケーションフレームワークに比べて改良が施されたり洗練されているのは、後発のフレームワークですから当然あり得ることです。

 違う言語だからと毛嫌いせず、いま、Javaで開発業務に携わっている方でも、興味深い機能や思想を持った新しいフレームワークとして、Railsを勉強してみるのも面白いと思います。幸いにもRubyとJavaはともにオブジェクト指向言語であるということもあり、見かけの文法はかなり異なりますが、その違いに慣れてくれば、Javaのコーディングとそれほど大きく変わらないことが分かると思います。かくいう私も、Rubyに関してはRailsをきっかけに勉強を始めたのでまだまだ知らないことも多いのですが、Javaの知識があったおかげで、一から勉強するよりは早くRubyに慣れることができたと思っています。Railsのフレームワークにしても、StrutsのようなMVC準拠のフレームワークを知っていれば、慣れるのは決して難しくありません。

 逆にいえば、Railsの良いところを、各種のJava Webアプリケーションフレームワークが取り入れる動きが出てくることもあるでしょう。Railsのアドバンテージの1つであるAjax対応も、ほかのフレームワークがこれからどんどん追従してくることでしょうし、DRYやCoCなどの思想にしても、言語に依存するものではありませんから、Javaのフレームワークでももちろん取り入れることはできるでしょう。ということで、Javaエンジニアの皆さんでも知っておいて決して損はない、と思います。

 個人的には、私もJavaプログラマなので、Java On Rails なんていうのがあるといいなぁ……と冗談半分で思っていますが、それまではRuby On Railsをもう少しいろいろと勉強してみるつもりです。

 皆さんも、ぜひRailsの世界を体験してみてはいかがでしょうか。郷里を離れるとその良さが分かる、というのと同じように、Railsを体験してJavaの良さを再発見することができるかもしれません。

2/2

 INDEX

Javaから見たRuby on Rails
  Page1
Javaプログラマが気になるRailsのキーワード
マスターメンテナンスアプリケーションを題材に比較してみる
Page2
RailsとStrutsの比較を整理する
JavaエンジニアはRailsとどう付き合うべきか?





Java Solution全記事一覧



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

注目のテーマ

Java Agile 記事ランキング

本日 月間