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の機能を利用することができるのです。 例えば、
とRHTMLに記載したとします。すると、user_nameというフォーム要素(テキストフィールドやセレクトボックスなど)の値が変更されたことをRailsが検知し、コントローラクラスのajax_actionメソッドが実行され、その応答(この場合は、_ajax_action.rhtml)が、<div>タグの内部の記述として動的に置き換わります。このようにJavaScriptコードの記載をすることなくAjaxの機能が使えるのです。 ■統合開発環境も提供 Railsフレームワーク自体の機能というわけではありませんが、統合開発環境の存在についても触れておきましょう。Javaでの統合開発環境というと、Eclipseが非常にメジャーな存在ですが、実はEclipseにはRails開発のためのプラグインとして「RadRails」(http://www.radrails.org/)がすでに存在しています。Javaエンジニアの皆さんにとっては、慣れ親しんだ環境でコーディングができるというのはかなり歓迎できることではないでしょうか。コードの色分けや補完機能も備えており、Rubyに不慣れな方にもお勧めできます。
|
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全記事一覧 |
- 実運用の障害対応時間比較に見る、ログ管理基盤の効果 (2017/5/9)
ログ基盤の構築方法や利用方法、実際の案件で使ったときの事例などを紹介する連載。今回は、実案件を事例とし、ログ管理基盤の有用性を、障害対応時間比較も交えて紹介 - Chatwork、LINE、Netflixが進めるリアクティブシステムとは何か (2017/4/27)
「リアクティブ」に関連する幾つかの用語について解説し、リアクティブシステムを実現するためのライブラリを紹介します - Fluentd+Elasticsearch+Kibanaで作るログ基盤の概要と構築方法 (2017/4/6)
ログ基盤を実現するFluentd+Elasticsearch+Kibanaについて、構築方法や利用方法、実際の案件で使ったときの事例などを紹介する連載。初回は、ログ基盤の構築、利用方法について - プログラミングとビルド、Androidアプリ開発、Javaの基礎知識 (2017/4/3)
初心者が、Java言語を使ったAndroidのスマホアプリ開発を通じてプログラミングとは何かを学ぶ連載。初回は、プログラミングとビルド、Androidアプリ開発、Javaに関する基礎知識を解説する。
|
|