余白

https://blog.lacolaco.net/ に移転しました

2019年のAngularを考える

この記事は Angular アドベントカレンダー 2018 25日目の投稿です。

qiita.com


こんにちは、lacoです。2018年ももうすぐ終わりますね。 この記事では2019年のAngularの進路について、今わかる範囲で予想をしていきます。 当たる保証はありませんが、心の準備はできるかもしれません。しばしお付き合いください。

ちなみに余談ですが、先日Angular GDEになりましたが持っている情報は以前とそれほど変わっていません。 結局オープンソースだしGitHubTwitterをひたすら追うのが一番確実なアンテナですよ。

Ivyの安定版リリースはv9か?

長らく期待されていますIvyですが、コアチームによればリリース可能になるまでにはまだあと数ヶ月かかる見込みです。 現在はGoogle社内でドッグフーディングしながら、後方互換性が失われていないことをバリデーション中です。 3月、4月に予定されているv8.0では、安定版リリースができるかどうか多少の不安があります。

以前コアチームのIgor氏は、Ivyは影響の大きいアップデートなので破壊的変更が起きないとしてもメジャーアップデートに合わせると言っていました。 v8に間に合わなければ、次のチャンスはv9です。まだあまり期待せず、少し気にする程度にかまえておきましょう。

Bazelはもうすぐ到来

BazelがAngular CLIにやってきます。1月にリリース予定のAngular CLI v7.2から、ng newコマンドが Bazelを利用したプロジェクトを作成できるようになります。 すでに7.2.0のRCバージョンに含まれているので、興味のある方はぜひ試してみてください。

blog.mgechev.com

Bazelは今までの開発タスクのなかでも高速で安定した差分ビルドを提供してくれますが、 その真価は リモートキャッシュリモートビルド実行 を利用したときに発揮されます。 リモートキャッシュは、Bazelによってビルドした結果をアップロードして保存しておく仕組みです。 2回目以降のビルドは、そのキャッシュを使って差分だけを処理することで巨大なアプリケーションでも高速にビルドできます。 リモートキャッシュはチーム内で共有することができる点が強力です。同じビルドをチーム内で繰り返す必要がありません。 リモートビルド実行はこれをさらに進めます。 Bazelのビルド環境自体をクラウド上に持つことで、巨大なアプリケーションのファイルも、Google Cloudのようなスケーラブルな環境で並列にビルドし、成果だけを得ることができます。

Bazelのリモートキャッシュ、リモートビルド実行はGoogle社内の数百のTypeScriptアプリケーションですでに導入されています。 AngularコアチームはそのノウハウをAngular CLIを通じて広く一般の開発者にも使えるようにしようとしています。

いまはまだオプトインですが、これまでのCLIの進化と同じように、Angular CLIを使っていればいつの間にか基盤がBazelに切り替わる日が来るでしょう。 そういうものもあるんだなあと、少しだけアンテナを張っておくとよいかもしれません。

NgRxの拡大

Angular向けの状態管理ライブラリ NgRx は、公式ドキュメンテーションサイトも完成し、いよいよ流行の兆しを見せています。 Google社内でも多くのプロジェクトで導入されているらしく、コアチームによるドッグフーディングがより進み、今後もさらに洗練されていくことが予想されます。

状態管理に悩みそうなら、とりあえずNgRxを入れておくとよいのではないでしょうか。 NGXSAkitaなど、面白いサードパーティライブラリも登場していますが、NgRxに関しては半公式というくらいコアチームが関わっているので、 それぞれ比較して選定するモチベーションがなければまずNgRxを試してみてから考えてもよいでしょう。

「AngularにはReduxないの?」「NgRxっていうのがあってね」

2019年は多分これでOKでしょう。

Angular ElementsによるWeb進出、そして脱NgModuleの流れは来るか

v6でリリースされたAngular Elementsは、WebエコシステムでのWeb Componentsの普及の波にのり、着実に存在感を高めています。 Angular Elementsの発達によって、Angularはようやくオープンな Web エコシステムへの進出ができるのではないかと期待しています。

先日ng-japan OnAirでも、Angular ElementsとWeb Componentsについての回を配信しました。

www.youtube.com

ここだけの話ですが、Ivyを前提としたAngular Elementsのアップデートが現在コアチーム内で設計されています。 堅牢でスケーラブルなWebアプリケーション開発のためのフレームワークという、これまでのAngular像を破壊するポテンシャルを大いに秘めています。 年明けには何かしらの情報が公開されるかもしれません。乞うご期待です。

IvyはAngular内部で革命的なアーキテクチャの変化をもたらします。 そして、Ivyによって、NgModuleの存在価値が今よりもさらに下がることが予想できます。

一般的なアプリケーションの開発においてはいまのNgModuleありきのアーキテクチャで特に問題はないですが、 Angular Elementsを主軸としたWeb Components開発や、コンポーネント数個程度の軽量なプロジェクトにおいては、いちいちNgModuleを作るのは面倒です。 Ivy後の世界では、NgModuleを作らずコンポーネントだけでAoTビルドできるようになります。

もしかすると、従来のいわゆるSPAの開発においても、2019年後半には脱NgModule化の波が起き始めるかも知れません。 しかしもしNgModuleが廃止されることになったとしても、最短でもv11くらいでしょうから、とりあえず慌てて何かをする必要はありませんよ。


まとめ

Ivyがまるでシンギュラリティのような扱いですが、Angularに限っていえばIvyはまさにそれくらいのインパクトがある大改革なのです。 早く来てほしいですが、中途半端にマイグレーションが必要な状態でリリースされると大変です。どっしり落ち着いて構えておきましょう。

それではまた来年もAngularを楽しんでいきましょう。良いお年を!