« 第1回 渋谷Edge Rails勉強会×株式会社ドリコム事例発表 + heroku de rails事例発表 | トップページ | Asset Pipelineのすすめ »

2012年12月17日 (月)

Node.js + WebSocket + Backbone.jsのすすめ

Backbone.js Advent Calendarの16日目です。

新しい技術は興味はあるけど、主流にならない技術も多くて全部覚えるにはお腹いっぱいという皆さん。

私もこれはという技術を身につけて、一生食べて行けれたらと常々思っています。

そしてようやくこれはと思える技術に出会いました。

それが表題のNode.js+WebSocket+Backbone.jsです。

それを使った簡単なサンプルアプリ(backbone-railsのサンプルをrailsではなく

Node.jsに置き換え、DBをRedis、データの同期にSocket.ioを使ったもの)のソースは

ここにあります。アプリの解説はまた今度します。

今回はなぜこの組み合わせに賭ける気になったのか思ったを述べます。


利点
  1. デバイスを選ばない
  2. HTML5の利点でよく言われているようにPCはもちろん iPhone、Androidでも動作します。

  3. ネイティブ並に動作が速い
  4. Backbone.jsを用いてSingle Page Applicationとして作成するため、 ページ遷移ごとにServerにアクセスせず、JavaScriptによるページの 切り替えのため、一瞬で画面が遷移します。

  5. リアルタイム更新
  6. WebSocketを用いてBackbone.jsのModelを同期させれば、 Backbone.jsのView側でイベントを検知して表示を更新 してくれるので、実装側としては、勝手にリアルタイム 更新ができている感じです。

  7. Serverへの負荷が低い
  8. linkedInのモバイルの事例で見られるように、Node.jsは マシン効率がものすごくいいです。またWebSocketにより、 表示更新のための無駄なアクセスが必要がなくなります。

  9. 覚える言語がJavaScriptだけでいい
  10. 複数の言語を覚えるより、一つの言語に習熟してライブラリ、 関連ツールを覚えるほうが、開発効率は高いはず。 もちろん、CoffeeScriptやDart、TypeScriptなどJavaScriptに 変換できる言語も使えます。私はBackbone.jsと同じ作者が開発 したCoffeeScriptを愛用しています。

欠点
開発効率は現時点ではRailsのほうが圧倒的に速いです。
Node.jsの場合、DBに複数回アクセスする場合などcallbackが入れ子に
なり、ややこしくなります。
Backbone.jsの場合、Rest前提のため、複数のデータを一度に更新したい
場合や確認画面をはさみたい場合などにかなり頭を悩ませます。
テストの書きやすさやRepl機能の充実度もRailsのほうが上です。
Node.jsを勉強したてということもあり、実感としては1.5倍~倍近く
工数がかかっています。
開発工数も考えると、RESTサーバはRails等で開発したり、Single Page
Applicationにする箇所をよく使う機能に限定する等もありかもしれません。

まとめ

今までのプラットフォームは、言語こそ違えどできることはほとんど
変わらない中、Node.jsでは、他のプラットフォームでは真似できない
リアルタイム性やマシン性能を有効に活用できるほぼ唯一のプラットフォーム
だというのは今後も生き残る可能性大だと思います。
開発が難しいと言う点は、これから情報が増え、ツールが充実したり
することで徐々に改善されていくと思います。
そしてプログラマとして希少価値をあげるためには、難しいことも習得する
必要があることを考えたら、丁度いいと思いませんか?


追記

せっかくなので上記のサンプルアプリを公開してみました。

複数ブラウザでアクセスすると、瞬時にお互いの画面が更新されるのが
わかると思います。(WebSocketのおかげ)
ページの遷移もWebサーバにアクセスしないので一瞬です。
それにも関わらず、ブラウザの戻るに対応していたり、どの画面
もお気に入り登録して、その画面に直接飛べます。(Backbone.jsのおかげ)

|

« 第1回 渋谷Edge Rails勉強会×株式会社ドリコム事例発表 + heroku de rails事例発表 | トップページ | Asset Pipelineのすすめ »

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/68673/56336933

この記事へのトラックバック一覧です: Node.js + WebSocket + Backbone.jsのすすめ:

« 第1回 渋谷Edge Rails勉強会×株式会社ドリコム事例発表 + heroku de rails事例発表 | トップページ | Asset Pipelineのすすめ »