Node.jsとBackbone.jsのどちらを学ぶべきか

9月14日(日)

だいぶご無沙汰してます。

最近は日本語書く代わりにプログラミング言語を書く量が増えてます。たまにはいいもんですね。

と言っても、なかなか思うように動いてくれず、ググったり、教えてもらったりしながら牛歩の毎日です。

●Tech Garden Schoolのゼミ制度

プログラミング学習の主戦場であるTech Garden Schoolでは最近「ゼミ」というのが始まりました。

僕は「最新技術とエンジニアの現場」「JavaScriptゼミ」という2つを受講してるのですが、
どっちもアツいです。

3時間授業のはずが、7時間トイレ休憩無しノンストップwwwという驚異的な盛り上がりを見せることも。

●JavaScriptと向かい合う

今回の記事は『Node.jsとBackbone.jsのどちらを学ぶべきか』というタイトルです。

javaScriptゼミの第4回目の授業でどちらを学ぶべきか考えたい、という趣旨の下で書いています。

これまで、
・javaScript(以下JS)という言語そのもの
・JSを扱いやすくするためのjQueryというライブラリの基本的な扱い方
・JSの根底にある概念(オブジェクト指向、Ajax通信)
を学んできたのですが、今後個別の処理単位にとどまらず、より大規模なWebサービスを構築するにあたっては種々のフレームワークを扱えるようになる必要があります。

今学んでいる言語は幾つかあるものの、特にJS芸人として食って行けるようになりたい(というと語弊がありますが)僕としてはJSの中でも何を中心に扱えるようになるべきか、っていうのはやや慎重に考えたいのです。

とか言って、今回の2つのフレームワークは得意な領域が異なるので、軸にしたいもの(RailsとかJSとか言語なのか、フロントエンドとかサーバサイドとか分担なのか)次第ではどっちも必要って話になるかもしれません。

が、手当たり次第学ぶにしても今目の前にあるのは何なのかをある程度理解した上でやりたいのでまとめることにしました。

ちなみに、JS芸人として食っていきたいってのは以下の理由です。

・万能感
フロントからサーバ、ハイブリッドアプリまでJSを軸に色々できる
・学ぶ環境
周りの人、教材
・サーバサイドの熾烈な感じ
RailsとかPHP系とかよりフロントエンド周りのがまだ手薄かつ売り手市場では?という思い込み
https://www.wantedly.com/projects/7267
>●JavaScript の基礎知識 (ただしアプリケーションエンジニアと同等のレベルまでは要求しない)

●Node.jsとBackbone.jsのどちらを学ぶべきか

意外とNode.jsの情報に手薄感があって純粋に比較するの難しそう。

なので、致命的な情報が欠落していたらソーシャルに教えてくださいね!!

●backbone.js


●概要
クライアントサイドのJSのMVCフレームワーク。WebアプリにModel、View、Collection、Eventの構造・仕組みを提供します。

Rails等、サーバサイドのMVCとは別物のようです。

・Model :データの管理や加工
・Collection:複数のModelを扱う配列みたいなもの
・View :イベント処理、DOM操作、Model、Viewの操作
・Router :APの状態管理

●出自
JSで分担してアプリを書くとどこにイベントがあるのかわかり辛く、分担しにくい!!それを解決する仕組みを作ろう!!!

●メリット
・シングルページアプリケーションが作りやすい
Routerが便利
・様々な種類のデータが扱いやすい
Model、Collectionが便利
・イベント処理、DOM関連のコードがカオスになりにくい
Viewが便利
・類似フレームワークと比較して軽量
6.3KB。モバイル環境でも使える
・役割毎に分割可能
・疎結合なコードが書け、メンテナンス性が高い

●デメリット
・JSコーディングが遅くなる
ModelとView設計が必要で鍛錬しないとサクサク書けない
・ルール違反して書けてしまう
決まり事が少なく自由度が高いため、うまく書かないとスパゲッティコードが途端にできあがる
・Viewのコードが長く複雑になる
Viewが担当するページ要素が広過ぎる
Viewにデータ処理に関するコードを書いている
→データ処理に関するコードはM/Cへ
View同士を連携させるコードをたくさん書いてしまう
→Mのイベントを介して連携

●必要なスキル
・JS、jQ or Zwpto.js(jQ互換の軽量ライブラリ)
・Underscore.js(あるといい)

●使用例
hulu
Foursquare
ShareWis

●参考資料
・いまさら聞けない!?Backbone.js 超入門 (オススメ!)

**いまさら聞けない!?Backbone.js 超入門 ** from Kohei Kadowaki

・BACKBONE.JSによるWebアプリケーション開発について

**BACKBONE.JSによるWebアプリケーション開発について ** from Toshio Ehara

・5分でわかる?Backbone.js ことはじめ

**5分でわかる?Backbone.js ことはじめ ** from Kohei Kadowaki

これまでの「MVC」とBackbone.jsの関係について少し理解した。

●Node.js


●概要
サーバサイドのJS製フレームワーク。「リアルタイムWeb」を実現すべく下記仕様を実装。

・ノンブロッキングI/O
サーバ側で動作するJSで、大量データ処理をするためにノンブロッキングI/Oというモデルを採用。
GoogleV8エンジンにより、ブロックのないイベントループを実現。
・Socket.ioを扱える
リアルタイムな通信を実現するためのライブラリ。DBアクセスとWebページ表示を別々に行ってくれる。
・イベントループ
リクエストやコールバックの発生はイベントとして扱い(登録する)、そのイベントに関する処理が終わったら次のイベント処理する。
シングルスレッド。

●出自
C10K問題への対処。大規模なI/Oが発生する処理への需要が高まっている。
しかし、Apacheなどは1HTTPリクエストに1プロセス消費する上に、マルチスレッドだとメモリの消費が激しい。

●メリット
概要と同じ笑

●デメリット
・一度に1つの処理しかできないため、複数の処理を捌けない
・Model周りが貧弱、マイグレーションがない
・最初にGruntfile.jsを生成するが、バージョンアップに追従するのが面倒
・オブジェクト指向でないのでチーム開発に向かない
→Type Script MSが提供するNode用のオブジェクト指向言語がある

●使用例
・ソシャゲ、チャットサービス
・RESTfulなAPI
・Twitterのキュー
・テレビ・ゲームの統計データ
starseeker
LinkedIn(モバイル)
ピグライフ

●資料
Node.js とは一体何か?
いまアツいJavaScript!ゼロから始めるNode.js入門〜5分で環境構築編〜
基礎から学ぶNode.js
Node.jsをサーバサイドのUIレイヤに限定するのか?(大事なお話)
あのサービスも「NODE.JS」!?知らないを「卒業」しよう!NODE.JS勉強会まとめ

あと、モジュールいっぱいあるらしい。

●比較してみる

●本
教材へのアクセスという意味での学習コストは重要。Amazonで検索。
・Backbone.js:31件
・Node.js :93件

それぞれ別の情報混じるものの、Backbone.jsのがノイズ多い印象。

純粋に教材だけ見るとNode.jsのが勉強しやすそう。

●求人
forkwellだけちょろっと覗いてみました。
・Backbone.js:11件
・Node.js :7件

これからですかね!Railsって載せるよりPHPって載せた方が人集まるような考えで、「フロントエンドエンジニア」とか「javaScript」とかで採ってそう。

●Googleトレンド
・Backbone.jsとNode.js

みんなが気になるNode.jsって感じですかね?

ちなみに、
・Angular.js、Knockout.js、Backbone.js

Backbone.jsの圧倒的優位性がAngular.jsに脅かされてますね。

Angular.jsが主流になるのでしょうか?

気になるかどうかと実際使う、使いたい、検証してみたいは別かもですが参考まで。

●結論

こんなんじゃ比較なんねーよと叫びたい。

決定的にこのプロダクトがいい!!こんなの作るためにこの技術必要!!というのもない。

というわけで、Node.js学びたいと思いました。

理由としては、

・世間的に必要とされてる技術
・使ってる技術や拡張性
・Rialsと比較できる部分が多い

というあたりです。

いずれフロントエンド周りのフレームワークもちゃんとやるということで。