激凹みから立ち直る方法

Javaのフレームワークについての質問です。

現在、Webアプリケーションのショッピングサイトのようなサーバー側の規模がちょっと大きくなるものに関しては、スクリプト言語のPHPやRubyの代表的なフレームワークを使って作成しているのですが、Java用のWebアプリケーションのフレームワークもこれから使ってみたいと考えています。

それで、質問なのですが、
(1)現在、Java用のWebアプリケーション作成のフレームワークで世の中で皆さんが一番使われているものってどれになるのでしょうか?私が現在知っている限りでは、Struts、Struts2、JSF(Java Server Faces)、Seasar、Seasar2 くらいがあるのですが、使い分けのコツみたいなものがあれば教えていただきたいのです。(それぞれの、メリット、デメリットのようなもの。)

(2)スクリプト言語のフレームワークとJavaのフレームワークの使い分けのようなものも分かれば教えてください。私の認識では、Java用のフレームワークを用いて設計しなければいけないものって、たとえば大手銀行の決済システムとか、かなり規模の大きなものを想定しています。プログラムの動作スピードを上げたい時とか、セキュリティー関係を厳重に行い時などを想定しています。Javaのフレームワークを使うメリットなども分かれば教えてください。

よろしくお願い致します。

A 回答 (2件)

ご質問の印象からすると、どこかの開発会社に所属していてエンタープライズな開発を手がける……といったわけではなくて、プライベートな範囲でJavaフレームワークを勉強していきたい、ということのように見受けられました。



おっしゃるように、確かに現時点でももっとも広く使われているのはStrutsだろうと思います。ただ、これを個人レベルで使っている人って、ほとんど聞いたことがありません。また、既にレガシーといってもよい古い設計で、新しく投入したStruts2もさほど普及せず、袋小路に入っている感があります。

現在、実際にプライベートユースでもっとも広く使われているJavaフレームワークは、「Google App Engine」じゃないでしょうか。私も使ってますし。まぁ、いわゆるフレームワーク」の範疇からは外れるかも知れませんが……。GAEはPaaSですが、独自のフレームワークを搭載しており、Googleのサービスを利用できるようになっています。これにライトウェイトなMVCアーキテクチャーを導入する「Slim3」というフレームワークもあり、けっこう人気があります(Seasar2を作った比嘉さんの作です)。これを使うことで、RailsやCakePHPなどのようなスタイルでMVCベース開発が行えます。

また、やはりPaaSで採用されているために利用が増えているのが「Spring」です。Springは現在、VMWareに買収されていますが、このVMWareが運営するのが、Open Paasの両雄といわれるCloud Foundry(もうひとつはOpenShiftですね)です。そんなわけで、Cloud Foundry + SpringMVCというアプローチは、GAEほどではないにしろ着実に広まりつつあります。個人的には、「RailsのHerokuとOpenShift、JavaのGAEとCloud Foundry」の4つがPaaSの中では一歩抜きん出ており、ほぼこの分野を制するだろうと思います。ですから、Javaであるならば「GAEとSpring」が今後のデファクトとなるだろう、と思うのです。

それ以外に注目されているのは、まずライトウェイトフレームワークの代名詞ともいえる「Apache Wicket」があります。これは従来の「できるかぎりJavaコードから不要なものを切り離してXMLや設定ファイルに置き換えていく」といったフレームワークの概念とは真逆です。「すべてをJavaで書こう」というのがWicketです。GUIもHTMLにはコンポーネントの格納場所となる簡単なタグがあるだけで、全部Javaのクラスとして定義します。これが、なれるとJava屋にとってはものすごく快適なんです。だって、「あれはこのXMLにタグを書いて、あれはこっちのファイルに設定を書いて……」なんてやらないでいいんですから。全部、Javaのコードをゴリゴリ書いていくだけ。素晴らしい!

また、RailsのJava版となりうるだろうと思われているのが、現在はApacheに属する「Click Framework」と、Springに買収された「Grails」あたりでしょう。Clickは、Railsと同じようにコマンドでMVCファイル類を自動生成するため、とりあえずざっとアプリケーション全体を構築し、後から少しずつ具体的なページを作っていく、といったざっくりとした開発ができます。Grailsは、Java上で動くJava言語に非常に近いスクリプト言語「Groovy」を使ったMVCフレームワークで、なれるとスクリプト感覚で書けるGroovyはJava屋にとってもっとも快適なスクリプト言語であると気づきます。

HibernateやJSFなどは、直接触れることはなくなりつつあるように思えます。これらを土台として組み込んで独自フレームワークを組むような感じになってますね。例えばCloud FoundryなどもDAOの部分はHibernateを使っていたように記憶してます(うろおぼえ、別のフレームワークだったかも……)。Seasar2は根強い人気があると思います。ただ、私はあんまり触る機会がなかったのでよくわかりません。

また、大規模なエンタープライズ開発の現場については、私もよくわかりません。以上は、もう少し小規模な現場で使われているフレームワーク、ということで考えてください。
    • good
    • 0

こんばんわ!


私の見解なので、正しいとは思わず1つの意見程度に
読んでいただけたら嬉しいです。

(1)
私がよく聞くオープン系フレームワークは
Struts + Springの組み合わせ
Seasar2
JSF
といったところです。
ただ、最近になってVelocityやらClickやらWicketといった
Apache系の軽量フレームワークを取り入れる所もあるみたいですね。
あと、割とオリジナルフレームワークの会社も多いです。

使い分けのコツ
コツというか、大抵は開発するメンバーの経験してきた
フレームワークの中から、多数決的な感じで決まることが多いです。
少なくとも私はそうでした。
なのでStrutsが今でも多いんでしょうね。

Seasar含むStruts系
メリットは、
設定ファイルさえやってしまえばコーディングが楽になる、
1action1インスタンスが保証されている、
って感じです。

デメリットは、
設定ファイルの記述方法を覚えなくてはいけない
(意外にコーディング以上に時間がかかることも…)、
リフレクションを使ったり設定ファイルを読み込んだりがあるので
処理が生のサーブレットに比べて遅い(かもしれない)、
といったところでしょうか。

Apache系の軽量フレームワーク
メリットは、
MVCモデルにもとづきJavaコードをWebページから切り離すことができる、
なのでプログラマとデザイナの仕事をキレイに分離できる
(これはmayaaを使えばいいという話もありますが…)、
Java屋を実感できる(笑)
(ゴリゴリと全部ソースでやるので)、
かな?と。

デメリットは、
Struts系に比べて書籍や解説サイトが少ない、
ゴリゴリと全部ソースでやるので辛く感じる人もいる、
とかですかね。

余談になりますが、HibernateやS2Daoといった
DB系のフレームワークもあります。
こちらも合わせて理解しておくといいと思います。

(2)
JavaのWebアプリって、基本的にフレームワークを用いります。
理由として、例えばいちいちパラメータのサニタイズを
実装しなきゃいけないのが面倒だとか、
MVCを明確にしただとか、
おっしゃる通りスピードとかセキュリティもあります。
まぁぶっちゃけるなら「ちょっとお勉強が必要だけど
フレームワーク使った方が楽だもん」です(笑)

サーブレットって本当に基本しか用意されてないので、
1から作ると共通処理をライブラリ化したり
何だりカンだりラジバ…すると、結局オリジナルの
フレームワークが完成してしまいます。
なので「基本フレームワークは使う」ってなるのかな?
なんて感じています。

最後になりますが、プログラム全般そうですが
大切なのは生産性と保守の容易さだと思ってます。
それを基本にフレームワークを選定するといいと思います。

初めに申しました通り、にわかJava屋の1つの見解です。
実は内容が間違ってるかもしれません(汗)

長文失礼いたしました。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!