わたしは元SIerで、JavaによるWEBアプリを作っていた経験がほとんどだったのですが、
ついに最近Rubyでのお仕事をはじめました。これはその感想です。
わりとJavaディスり気味になるかもしれません
2.WEBアプリにおけるJavaとRubyの比較
ここでの比較は言語ではなく、フレームワークの戦いになると思います。
つまり、Struts/Struts2などなど vs Rails。
実装のしやすさ、間違いを犯さないかどうか
これは完全にRailsに軍配が上がると思います。
Javaは書いたコードの出来上がりはPythonのように一定の粒度で書けますが、構造に欠陥ができやすいというのが私の今の所感です。
3.Javaの辛いところ/Rubyで楽になったところ
(B)JSP(View)のデバッグがたいてい大変になる*2
不誠実なエラー
・JSPはエラーを出した時、画面が真っ白になるので原因がわかりません。
・ControllerからViewにデータを飛ばす部分がブラックボックスになるので、エラーの原因をさらにわかりにくくする。*3
・というかJavaはJSP以外にテンプレートエンジンないのか?(ただし、Velocityテメーは駄目だ)*4
→ RailsにはBetter Errorsというものがあり、特に混雑しがちなViewのデバッグが楽にできます
Railsのデバックが捗るエラー画面 Better Errors 使ってみた! - 酒と泪とRubyとRailsと
戦場の如きView
・また、JSPのJSTL、JSFのタグ、フレームワークごとの独自タグ、プロジェクト独自タグなど、
謎のタグ地獄によく遭難しました。更に悪いことに、そこにヘタクソに書かれたJavascriptのコードが襲いかかってきます。Viewは地獄です。
→ Javaがなぜこのようにタグを乱立させるのか私にはわからないのですが、
とりあえずRailsならerb/slim/hamlのどれかを使えばいいのでそこはいいです。少なくともタグが混ざることはない。
Slim - A Fast, Lightweight Template Engine for Ruby
→ また、そのように複雑な構文を書かなければいけない原因は、
最初の設計段階で複雑なモデルを考えているからです(もしくは考えていないから破れかぶれ)。*5
とりあえずRailsならrails generateでmodelを自動生成できるので、最初からある程度
疎結合なモデルを作っておけば、複雑なViewを書く可能性は減ります。
Scaffoldによって作成されるファイル - Ruby on Rails入門
モデルの作成とRailsで指定可能なデータ型 - Ruby on Rails入門
→ 最近だとScalaのSkinnyがそういうrails g scaffoldみたいな機能持ってるらしくて注目してます
Skinny Frameworkで始めるScalaのWebアプリ開発 - argius note
(C)普通のデバッグがそもそも大変
苦痛をともなうデバッグ
・Javaで有る箇所のデバッグを行いたい場合、ユニットテストがあればそこからバグをたどるし、
なければIDEで問題箇所にブレークポイント張るような気がします。
→ 上記でも問題は無い気はしますが、Railsの場合rails consoleが使えます。
rails consoleのすごいところは、言語で用意されてるクラスだけではなく、プロジェクト内で
作ったクラスのインスタンス化・実行が試せる点です。ネットワークアクセスを伴うような
処理でも実行できます。かるーくデバッグできます。
rails console の tips - Qiita
→ また、byebugもいい感じです。疲れていたとしても、頭が死んでいたとしても使えるぐらい楽です。
pry-byebug を使ってRailsアプリをステップ実行する - Hack Your Design!
4.使ってみてわかったRubyへの偏見と実際
環境構築が大変なのではないか
・rbenvが無い頃、これは多分大変だったと思うのですが、rbenvを使えば環境構築自体簡単にできるので、困ったことはないです。
重いのではないか
・重くない、Twitterレベルのサービスになると流石に駄目なのかもしれんけど
5.使ってみてわかったRubyの良いところ/悪いところ
良いところ
・CSRFトークンなど、細かいところに手が届く
→ 要はCSRF対策用の仕組みを自動で組み込んでくれる。Javaはそういうのないよね。
→ Railsのセキュリティ対策については右のページを参考にしてください(英語):Ruby on Rails Security Guide — Ruby on Rails Guides
→ 「CSRFって何?」というクソエンジニア、マネージャの方は以下を参照。わかりやすいよ
Security&Trust ウォッチ(33):「ぼくはまちちゃん」 ――知られざるCSRF攻撃 - @IT
6.懸念点
・Rails自体のアップデートを追いかけないとダメそう、大変そう
・運用段階での障害対応とかどんな感じなのか知らず
7.JSPの後継は?
こんな比較があった
stackoverflow.com