現時点でWebアプリを作るなら、どのFWを選択するか


最近Web系に興味を持っています。Twitterを利用した適当Webアプリを作って勉強でもしようと思い、色々試してます。

Webアプリの内容は「特定のハッシュタグを監視して、その統計をグラフ表示する」というものに決めました。サーバサイドもクライアントサイドも丁度良いサイズの処理になりそうです。

先週の土日と今週の土日で色々なサンプルコードを作ったりしてみて、ある程度何を使って作るかを決めたので、今日はそれをメモします。

アーキテクチャ

バッチ処理スケジューリング:cron 特に考えずにcronを選択。仕事では特定の製品だったりWindowsのタスクスケジューラを利用しています。今回はLinuxですし、慣れてるcronでいいかなと。15分毎(Twitter APIの制限時間)ごとに呼べればそれでいいので。

バッチ処理:Java, Spring Batch Spring Batchを選択しましたが、今回の要件(Tweetを回収してDBに保存)程度であれば生のJavaだけでも十分かと思います。他のバッチ用FWにTERASOLUNAやJava EE 7もあります。それらは情報が少なかったり、シェアの問題で選択しませんでした。

サーバサイド(API):JAX-RS Jersey 少しのアノテーションで簡単にサーバサイドの処理が書けるのが良いです。当初はJSPのごちゃまぜコードを打破するためにWicket(HTMLにwicket:idという属性を付けてサーバ側でHTMLをいじくる)がベストかなーと思っていました。ですが、WicketだとJavaScriptに対する支援が受けられないので、今回は選択しないことに。サーバ側はあくまでJSON文字列を返却するだけの方式を選択しました。これならクライアントが何であろうと、JSON文字列をParseさせできればいいので、柔軟性は高いかと思います。

クライアントサイド(デザイン):Twitter Bootstrap デザインスキルのないプログラマや時間のないプログラマ、デザイナーを雇えないプロジェクトには最高のツールですね。AngularJSも凄いですが、こちらの方が感動しました。自分はCSS使ってまともにデザインできない人なので、デザインはBootstrapに任せて気になる部分だけ自力で頑張るという方式にしました。似たようなツールにGumbyがありますが、こちらは今回選択せず。今回は情報量が多そうなBootstrapを選択します。

クライアントサイド:AngularJS 当初は動的にHTMLを構築する方法はWicketで実現しようと思いましたが、クライアント側はJSで統一することにしました。AngularJSでWicket以上のことができそうですし。ただし、AngularJSだと処理がクライアントサイドで行われるため、秘密にしたい情報や処理をどうすればいいのかさっぱり分かっていません。今回は関係ないですが、セッションとかどうするんだろう・・・。そこら辺考えるとWicketの方がやりやすいような。

Webはとことん弱いのでこの機に何とか覚えたいです。今回の案でWebアプリを開発して、11月末には一応の完成を目指します。不格好でも良いからちゃんと公開して行こうと思います。