生まれ変わるAngularJS

https://www.youtube.com/channel/UCEGUP3TJJfMsEM_1y8iviSQ

1 comment | 1 point | by WazanovaNews 約2年前 edited


Jshiike 約2年前 edited | ▲upvoteする | link

シングルページアプリ向けの各フレームワークをGoogle Trendで比較したグラフLars Eidnesのブログに掲載されてますが、AngularJSの伸びが他を圧倒しています。一方で、アーキテクチャ上の課題は、コミュニティの声もあり、かつ当事者である開発チームも認識していたところ。そして、それに対する答えとしては、バージョン2.0で大幅に書き直すという流れになっています。

AngularJS 2.0については、「野心的だが険しい道のり」というタイトルの記事がGuardianに掲載されてますが、

  • ES6の採用
  • Web Componentsとの親和性のアップ
  • (双方向バインディングをどうするかまだ決まってないが)Reactの考え方に近づいてきている
  • (1.3のサポートはしばらく平行して続くと発表されたが)本当にスムーズな移行を提供できるのか?

がポイントだとSeb Ceveyはまとめています。

先月開催された ng-europeから、11/16にコアチームのRob Eisenbergが発表した長いブログのエントリーに至るまで、Googleのメンバの発言を拾ってみました。

  • Googleの社内レポジトリで、AugularJSのアプリの数は1600を超えた。(Igor Minar)
  • AngularJS 2.0の特徴としては、(Brad Green / Igor Minar)
    • モバイル: Material Designの採用、router / アニメーションの改善、ネイティブ並みのクオリティ
    • パフォーマンス: ガベージコレクタプレッシャーとメモリ使用量の削減、DOM操作の最適化、分析ツールの提供
    • スケーラビリティ: オートコンプリート / ナビゲーション / タイプミスチェック改善、ES6のオプション型システム拡張による型とメタデータの表現でAPIコントラクトを書きやすく、ドキュメント化ツール
  • アイソモーフィックなサーバサイドレンダリングの採用については、そのバージョンのAngularJSをつくってみたこともある。しかし、現状ではクライアントサイドでの起動時間を短くすることが優先。サービスワーカーとかブラウザの新しいAPIの登場を考慮すると、ブラウザ側に専念して起動時間の短縮を目指すほうがよいと思う。(Igor Minar)
  • コードのレイジー読込みは2.0で採用(Igor Minar)
  • 「サーバサイドでのHTMLの事前レンダリングから解放され、Googleがクロールするようになるのはいつか?」については、「今年の末までには。」という答えになる。Web Master Toolブログで、全てのJavaScriptをレンダリングするようになると発表されていて、AngularJSなども自動的にクロールされるようになる。(Brad Green)
  • AngularDartのきっかけは、Google内の大きなチームが Dart + AngularJSで開発していて、Dartの高いクオリティが評価されつつも、人が読めるコードでなくアセンブリコードを生成するため、JavaScriptコミュニティの資産を活用できない仕様になっているという課題を解決するため。(Brad Green / Misko Hevery)
  • Dartはランタイムとベースクラスライブラリをもち、DOM操作 / collection / event / RegExなどのAPIも独自のもの。既存のJavaScriptのコードと互換性はない。技術的には既存のJavaScriptライブラリを呼び出すことは可能ではあるが、実用的な話ではない。AngularJSの場合、パフォーマンスのペナルティは受け入れがたいので、Googleとしては、AngularDartをつくるという判断をした。残念ながら、これで一件落着ではなく、異なる言語の二つのバージョンのAngularJSが存在することになり、バグの修正 / 新機能の実装 / リリースなどをそれぞれのチームがやらなくてはいけない。(Rob Eisenberg)
  • (Dartはどうなるのかという質問に対して、「未来を見通すのが苦手なのでわからない。」と答える際の例え話として、)自分がかつて大学をでた後の最初の仕事は、Steve Jobsという人に見せるデモの段取りをする役割。ある日、「世界中の学術論文をつなぐことができる技術をデモしたい。」と、スイスからTimという人がやってきた。そのプロダクトの名前を聞いたら、「World Wide Web」とのこと。「それはイケてない名前だし、Steveは気に入らないと思うよ。」と答えてしまったんだ。(Brad Green)
  • 正直言って、AngularJSはマスターするのが一番簡単なフレームワークではない。… 元々はcustome directiveはなかった、… 後からAPIを用意することで、それができるようになった。controllerも最初はなかった。… 現在ではコア機能とみなされるものを、ボルトで継ぎ足すように追加してきた結果が、あまりエレガントでないAPIになってしまった。(Rob Eisenberg)
  • 新しいrouterは、バージョン1.3にもバックポートされるが、コンポーネントごとにchild routerを持つことができる。複数のチームでの大型開発や、一人でつくっているがコードベースをうまく区分して管理したいニーズにぴったり。アプリの各部分をミニアプリとして開発できるようになる。(Rob Eisenberg)
  • AngularJSのバインディングの実装の問題は、dirty checkingで、最初のcheckの結果の副作用で起こる変更も含め、二度checkするはめになる。しかし、双方向バインディングを外すことで問題は解決しない。watchも一緒に取り除かないと、表現の変更しても誰も任意のコードをトリガーしないようにと担保できない。また、それでも解決はしなくて、event aggregatorを使えばできてしまうし、やらざるをえないこともある。「やっかいな双方向バインディングがなくなればせいせいする。」という意見の人もいるが、Angular, Durandal, Knockout, Emberなどの人たちは賛同しないだろう。AngularJSチームは全ての可能性を検討しているので、まだ決断はしていない。(Rob Eisenberg)

仕様を発表したばかりの段階なので、まだかなり流動的なようです。全体の印象としては、オープンソースのプロジェクトという前提ながら、Googleの会社としてのサポートが手厚くなる一方で、Googleのプロダクトポートフォリオにおける整合性を模索しているというところでしょうか。

#angularjs #google


ワザノバTop200アクセスランキング


Back