一昨日の晩に、今絶賛勉強中のエンジニアの卵に聞かれたんですよ。
「なんかqiita見てるとRailsがどうのJSがうんたらってのがバズってるんですけど、どう思います?」
「あーその件ねー。僕はね…(以下酔ったおじさん特有の長い話)」
という事があった。
その時の話が残った状態で今朝qiita見てたら
http://qiita.com/hirokidaichi/items/5758609196291d1edd17
がすごくいい記事だなーと思って。
なんかそのへんの自分なりの見解とアプローチ。
目的が違う。
あくまで個人的な見解なのでカッカしちゃだめよ。
- (かつて)Railsが実現しようとしていたのは「それまで無かった程はやいプロトタイピングと顧客への価値提供」だと思う
- 今フロントエンドのJavaScriptで実現しようとしているのは「これまで以上に快適な操作性や高いUX」だと思う
つまり目的が違うのですよ。少し前はRailsで作るだけのUXがUXのMax到達点に近かったからそれで完了した。今は到達点が上がってしまったんです。その理由は下記のようなことが背景だと僕は認識しています。
- モバイル環境でネイティブアプリと張り合いたい為のSinglePageApplicationやそれっぽいUIが必要になった
- 通信環境が酷いモバイルでも快適に動くようにするために通信を極力絞る事が必要になった
PC環境だけ考えるのであれば好きなモノ使えば良いと思います。快適な通信環境とマシンパワーがあって、ユーザーもポチポチ画面遷移することに慣れているから十分ですよね。
モバイルに最適な形はなんだろうか(模索中)
僕は昨年はほぼ毎日(今でも週の半分くらいは)node.jsを触りまくっていて本音は「JSONでのRestful中心でモノを組み立てるのが最高!」って思っています。モバイルWEBのフルスクラッチだったら通信は最初からJSONで組み立てるのが将来を考えても正しいのではないかと思っています(趣味か事業かでも変わるのですがこの文章読む人はそこにはきっと興味がないでしょう)。
そういう環境だと、Railsはやっぱりやりにくかったんですよ。欲しいのは
- JSONを中心にしたデータのやり取り
- ClientのMVCと相性の良い仕組み
- URLを意識しないRPCっぽいデータ通信(SOAPみたいな?知っている人は知ってる)
そいでこんなのを作ってました。node.js側に作ったコントローラクラスroutesをパースして公開用のJSファイルを作ってくれるものです。Backbone.jsとの相性が良い(syncをオーバーライドしなくても動く)URLとJSONでの通信規約。あ、自分はpromise派なのでnode-promise入れています。
https://github.com/ms2sato/Restrant.js
(mongooseまで一本化してたみたい。最近触ってないので忘れたw。わけあって公開しませんでしたが、これを使って結構大きめな動くアプリを一本作っています。)
フロントエンド用にはネームスペースとかMVCに足らないオブザーバも下記で作っていたり(MVCはBackboneに浮気したので最終的には作りこんでいませぬが)
https://github.com/ms2sato/Limo.js
足りないものは作ったら良いと思います。RailsでそれっぽくやりたいならRubyでも作ればいいのではないかと(本当は言語を越えてライブラリを使いまわしたいけどね)。オレオレは無駄?うーん。そうかもしれないけど、今実現したいことに必要ならやったらいいんじゃないかなぁ。自己満足で無駄なコード量産するのは困るけど(困るのはそれが仕事という時間の中でやるからで、自分の時間でやるなら自己満足しまくれ派です)。
ちなみに僕はここまで作っておきながら、今年はRails4やっています(あれ?w)。
「node.jsでやってると技術者の仲間がよう集まらん。」と思ったからなんですけどね。なんか今頃少しいい感じになってきているのかも?でも、Railsの開発もgemがこなれているので楽だし良いよなぁ。
おしまいに
今不満があったら、あっさり諦めないで解消するアプローチを取ってもいいんじゃないかな。GoogleとかTwitterのWEBアプリも今はそんなに落ちない印象。個人的には結構快適に使えていた気がするんだけど、単純に僕の使い込みが甘いからなのかもしれない。無限スクロール的なのが大変というのはあるかもしれないけれどね。
最近セミナー講師の人に話を聞いたらJSの需要って高い感じになってきたらしい。若い人も「JS学びたいっす!」って人が多くなってきているみたいでちょっと嬉しい。JSは好きな言語でもあるのでもっと活躍して欲しいな。