http://net.tutsplus.com/articles/interviews/ember-js-core-team-interview/
Ember.js コアチームへのインタビューが興味深かったので斜め読み。長いので分割します。 インタビュー対象者は Yehuda Katz と Tom Dale です。
ちょこちょこ良く分からないところがあったので, 例によって間違ってたらスミマセン。
バックグラウンド教えて
Yehuda Katz
- 大学で会計を専攻してた。
- 学ぶのは好きだけど会計を仕事にするのは自分にはつまらないと感じた。
- 最初に就職した会社で Web デザイナーの職を得た。
- プログラミング勉強しようと思った。当時すでに jQuery と Rails があった。
- すぐに OSS の世界に入った。まだ未成熟だったし自分の未熟なスキルでも貢献出来るところがあった。
- 最初のアプリをリリースしたら Rails の枠を超えて成長し始めた。
- 気がつけばアプリよりも Rails をハックしてることの方が多くなってた。
- Merb の開発に参加した。
- 最終的に Merb の目指すところは Rails と似てきたので合流することになった。
- Merb の modularity と configurability を Rails 3 に取り入れた。
- Rails 3 をリリースしたあと、Web 上の他の大きな問題がないか探し始めた。
- 大きな Web アプリを作るときのやり方は何年も変わってなかった。未だに jQuery 使うやり方は変わってなかった。
- jQuery は素晴らしい DOM ライブラリだけど、どういうわけかその存在が開発者を低レベルな抽象化に閉じ込めていた。
- 最初にデータバインディング出来るテンプレートエンジン作った。
- これは Handlebars になった。
- SproutCore にはデータバインディングがあるのを知ってたけど、これはシンプルな HTML を描画するのに大量の JavaScript を要求した。
- 最高の HTML の DSL は HTML。
- Knockout も知ってたけど、バインディング情報を HTML 属性として書きこむのはあまり好きじゃなかった。
- このころ Charles Jolley(SproutCore の開発者)に Apple まで呼ばれた。
- 最初の SproutCore が Merb で作られたものだから, 彼は僕のことを知ってた。
- 彼は SproutCore に僕のテンプレートエンジンのアイディアを組み込まないかと提案してきた。
- 彼の作った新しい会社(Strobe)に入社した。
- このとき Tom はまだ Apple に居たけど、彼のことは素晴らしい API デザイナーだと分かったので Strobe にリクルートした。
- Strobe が Facebook に買収されたあと、Tilde 作ってプロジェクトを継続してる。
Tom Dale
- きちんとした教育を受けたエンジニアではない。
- カリフォルニア大アーバイン校で犯罪学・社会学・法学の学位を取得。
- 卒業後, アップルストアの Genius Bar で働き始めた。
- 仕事で使うソフトウェアが酷いものだったので, Cocoa の本を買ってハックした。
- 暫くしてこのソフトウェアは周囲の店舗にも拡がっていった。
- フロントエンド SproutCore, バックエンド Rails のアプリつくってる人に呼ばれた。
- Rails のバックエンドはすぐ出来たけど, フロントエンドはまだまだ仕事が残ってた。
- JS やったことは無かったけど, リテールに戻りたくなかったので JS の本を大量に買って仕事することにした。
- これが 2009 年頃の話。
- 暫くしてリリース出来た。
- SproutCore は ver 1.0 になってなかった。
- 当時はまだ誰もこのようなクライアントサイドアプリケーションを作ってなかった。SproutCore は進歩的だった。
- Cocoa と JS を詳しく知ってる人も少なかった。
- 正しい場所に正しいときに居たと思う。
- MobileMe に採用された。
- フレームワーク開発するのが好きだと気付いた。
- SproutCore の API 設計を通じて Yehuda と知り合い、彼らの会社(Strobe)に入社した。
- SproutCore は素晴らしいアイディアを沢山もってたけど沢山のレガシーな部分も抱えていた。
- SproutCore 2.0 をスクラッチから作ることにした。
- 2011 年の終わり頃, Strobe は Facebook に買収された。
- Facebook は働くには良いところかもしれないけど, 僕等は OSS の世界で独立して仕事を達成したかった。
- Yahuda や他のメンバーと一緒に新しい会社(Tilde)を作った。
何で新しいフレームワーク作ったの?
(省略)
何で SproutCore からリネームしたの?Ember.js の新しい取り組みは何?
Tom Dale
- SproutCore では沢山の間違いを犯した。
- 一番大きな間違いは多分 Cocoa を Web に持ってこようとしたこと。
- Web では UI のカスタマイズ性は大事だけど, SproutCore では難しくなってた。
- Backbone の人気に気付かされた。
- 開発者は HTML と CSS の経験が豊富。
- 彼らに SproutCore を学んでとは言いづらかった。
- Backbone は大きなアプリケーションを作る際に必要になる適切な抽象化を欠いている。
- けど始めるのも簡単だし, 開発者は HTML と CSS のノウハウが利用出来る。
- Web 開発者に Cocoa のようなアーキテクチャを提供出来ると思った。
- 新しい API を設計して既存の開発者の資産を活かせるようにしたかった。
- だから新しくスクラッチで作り直した。
- SproutCore には色んなレッテルがあったし, テンプレートドリブンなアプローチはコミュニティ内でも議論を醸した。
- 新しいものなんだってことを伝えたくてリネームすることにした。
Yehuda Katz
- SproutCore での最大の仕事は DOM の抽象化だった。
- HTML と CSS を理解してる開発者よりも, 何らかの抽象化された層の上での開発者の方が多い。
- Web はパワフル。HTML と CSS でコンテンツを表現出来る。
- じゃあそれで完璧?全然そうじゃない。
- Ember の目標は, 開発者が使っていたツールを彼らの手に取り戻させること。
Ember はまだ未成熟だけど?
(省略)
MVC って観点だと Ember のとったアプローチは他のフレームワークとは違うよね?
Tom Dale
- Ember の MVC は Cocoa や Smalltalk のそれに似てる。オリジナルの MVC に近い。
- Model:ドメインロジックとデータ。
- View(テンプレート):Controller にバインドされて Model を表現する。
- Model の変更は補足されて View に反映される。
- 他のフレームワークと比較して一番大きな違いは恐らく Ember は front と center に router を置いていること(※ どういうこと?)。
- 他のフレームワークと同様に URL にフォーカスしてる。
- URL をコピーしたら, 他のブラウザで開いても全く同じ画面が見えるべき。
- Ember 使えば簡単に開発出来る。
Yehuda Katz
- みんなそれぞれ違うけど, やりたいのは HTML とデータモデルを分けたいってこと。
- Backbone はそれだけに留めてる。Model と View を提供してくれるけど, 他のレイヤは自分で好きなように作る。
- 他のフレームワークには Controller がある。これは View Model と呼ばれていて, Knockout とかはコレ。
- Ember は Cocoa にインスパイアされてる。
- Controller は View レイヤで Model をデコレートして表現する。
- Router は Cocoa で言うところの coordinating controllers で, コントローラ間の協調を可能にする。
- Ember の Router は URL を中心の概念に置いているので, ブックマーク/共有可能な URL を提供する。