Webアプリ作成前に考えたこと
僕が今回、Webアプリを作ろうと思ったときに、考えたことをまとめてみます。
- 何を作るのか。
- どのように公開するのか。
- 動作OSは何にするのか。
- 作成言語は何にするのか。
- 使用フレームワーク・手法・ツールは何にするのか。
まず1番目。何を作るのか。
これが決まらないと、どうしようもないですよね。まあ、漠然となんでもいいから作りたいってこともあるかもしれませんが。
今回僕は、ある特定の分野に特化したSNS+Blogのようなシステムを作ろうと考えております。
次に、公開方法をどうするのか。
とりあえず、自宅サーバで運用していこうと思います。もし万一、自宅サーバじゃおっつかなくなったら、レンタルサーバとかに移行するかもしれませんが。
そして、動作OS。
自宅サーバでいく限り、Linuxが基本になります。ずっとCentOS使ってたけど、Solaris 10(とBelenix)のインストールにチャレンジして失敗して以来、またCentOSに戻してずるずる使ってました。
でも、最近人気のUbuntuが気になって、6.10が出たので入れてみたらこれが想像以上にいい!ってことで、Ubuntu Linuxでいこうと思っています。
それから、言語。
いろいろ悩みましたが、まずLinuxってことで.NETは却下(Mono使えばいいかもしれませんが)。Webアプリ作成に使える言語でなれているのはJavaかRubyであり、Ruby On Railsも使いたいけど今回は仕事のための技術習得もかねてJavaでいくことに決めました。
最後に使用フレームワーク等。
RubyならRailsで決定だったんですが、Javaの場合いろいろ多すぎて相当悩みました。とりあえず、Ajaxはふんだんに採り入れたい、最新の技術を使っていきたいってことで、以下のような候補をあげました。
- Ajax4JSF、DWR、jMaki、Google Web Toolkit
- Wicket、Echo 2、JSF
- EJB 3.0(+JBoss Seam)、Spring 2.0、Seasar 2.4、DataBinder
- JPA(Hibernate)、db4o、JDO(JPOX)
- Qwicket、ROMA framework、Chura
とりあえず、Ajax層・プレゼン層・ビジネスロジック層・パーシステンス層・フルスタックなものに分けて書いてみましたが、これの組合せで色々考えました。
まず、プレゼン層。
今後の標準を考えればJSFなんだろうけど、あまりJSF好きじゃないんでその他を考えてたところ、Ajaxとの親和性からEcho 2が、作成面のやりやすさからWicketが候補としてあがりました。Echo 2はほんとに素晴らしいフレームワークで、こちらのDemoみてもわかるとおりAjaxに特化したフレームワークです。最初はEcho 2で行っちゃおうかと思ったんだけど、そのころWicketがApache Software Foundation入りするって話題が入って、Wicketも大好きなフレームワークだったから調べ直したら、こちらもAjaxとの親和性が相当高くなってきてることを再確認しました。両方とも試しにプログラム組んでみたりしたところ、Wicketの方がEcho 2よりもプログラマに残されている領域が広い(逆にいうとEcho 2はWicketよりフレームワーク主導な部分が多い)と感じ、Wicketで行くことに決めました。そして、AjaxはWicketに組込みのものを使っていこうと思います。
次にビジネスロジック層。
プレゼン層でJSFに決まっていれば、EJB 3.0かSeasar 2.4の一騎打ちだったのですが、WicketになったのでWicketとの親和性を考えてSpring 2.0に決めました。また、WicketにはDataBinderという素晴らしいフレームワークがあり、これを使えばHibernateとの連携がとても簡単にできるとのことだったのですが、DataBinderの開発が実質一人で行われていること、Maven 2主導でいろんなライブラリとか勝手に使われたりするとこが気に食わなくて、使うのは遠慮しときました。
んで、パーシステンス層。
Wicket+Springとくれば、ここはHibernateに迷いなく決めました。ほんとはdb4oとかのオブジェクトデータベースとかも使って見たかったんだけどね。
最後に、フルスタックのフレームワーク。
QwicketはWicket+Spring+Hibernateのフレームワーク。結果として僕が選んだのと同じ組合せなので、これを使おうかと思ったけど、更新滞ってていまだにWicket、Spring、Hibernateともに古いバージョンなので、これも却下しました。また、ROMAはEcho 2+Spring+JPOXのフレームワークであり、Echo 2でいくことになってたらこれもアリだったのかもしれませんが、Wicketを選んだのでこれも却下で。ChuraはSeasar 2.4使うならってとこだったんだけどこれも却下で。
というわけで、結果としてWicket1.2.3+Spring 2.0+Hibernate 3.2で自力で組み合わせて作っていくことにしました。
それを前提に、使用するサーバ・DB等を考えました。
EJB 3.0ならJBossかGeronimoかGlassfishかといったところだったのですが、Springでいくので今回はJetty 6.0.1でいくことにしました。Jettyを選んだ理由としては、Cometを実現しやすいことがあります。まあ、GlassfishでもNIO使ってるらしいけど。JettyのほうがWebサーバ機能もあり、軽量だってことで。
んで、DBはPostgresでいきます。MySQLでもいいんだけど、なんとなくエンタープライズ版だしたりするあたりの商魂が嫌だったんで。
最後にIDEはEclipse(+Callisto)でいきます。EJB 3.0ならNetBeansでこのDemoみたいに楽にできるみたいだけど、EclipseのWTP用のJettyプラグインも発見したので、まあEclipseでいいかな、と。Wicket用のプラグインであるWicket Benchとかもあるけど、これもライブラリファイルとか勝手に入れてくれたりするので気にくわなかった。
というわけでまとめると、
OS:Ubuntu Linux 6.10 日本語版
言語:Java
フレームワーク:Wicket 1.2.3、Spring 2.0、Hibernate 3.2
アプリケーションサーバ:Jetty 6.0.1
データベース:PostgreSQL 8.1.4
で、SNS+Blogのようなシステムを作っていきます。
次回は、WicketとSpringとHibernateを結びつける方法について書こうと思います。
ではまた。
Comments(1)