AngularデベロッパアドボケートのStephen Fluin氏はngconfで講演し、大規模アプリケーションを構築するAngularチームが共通的に直面する課題について論じた。
最初に氏は、自身が昨年行った同様の講演で取り上げた、エンタープライズセグメントにおけるAngular開発者が直面する課題に改めて言及した。当時のAngular開発者たちは、モバイルアプリケーションの提供、チーム間のコンポーネント共有、ハイブリッドアプリケーションの構築、テスト、A/B試験、PWAといった共通の疑問を抱えていた。さらに、Angularのバージョンを最新に保つことや、ビルド時間の最適化も継続的な課題として語られていた。
Fluin氏が言及したのは、新たな産業やテクノロジのトレンドによって、今年の問題点は別のものに移っている、という点だ。
コロナ禍にある現在の状況において […] ビジネスと顧客との関係が根本的に変化しています。その事実が、私たちのアプリケーションの構築方法や、提供を目指すエクスペリエンスのあり方を変えているのです。[…] もうひとつの問題は、新たなテクノロジトレンドの存在です。私たちの使用するテクノロジが変化し、より優れたものになっていくことで、私たちがテクノロジを利用する方法も変わりました。
Fluin氏が今年の初頭に交わした会話の中で浮かび上がってきた最大の懸念は、ユーザエクスペリエンス、マイクロフロントエンド、サーバサイドレンダリング、モノリポジトリとコード共有、Angularを部分的にのみ使用するアプリケーションの管理、Angularをバージョンをアップグレードするビジネス事例の提案などに関するものだった。
優れたユーザエクスペリエンスとは、初期ロードが早く、トランジションがシームレスであることを意味する。そのためにFluin氏が強く推奨するのは、soure-map-explorer npmパッケージを使用してAngularビルドの構成の監視と分析を行うことだ。
企業内開発者と交わした会話の中から、彼らの学んだ最も価値のあるもののひとつとして、これが明らかになりました。
さらにFluin氏は、最新のAngularバージョンを常に使用するようにするだけで、バンドルサイズの縮小や、設定可能な最適化ストラテジ(バンドリングの改良、サーバサイドレンダリングなど)を実装したコマンドラインインターフェースの改善によるメリットを享受することが可能になる、と述べるとともに、Angularアプリケーションに見られるルート間のシームレスなトランジションがAngularのセールスポイントとして衆知のものである点にも言及した。
その上で氏は、マイクロフロントエンドの持つ独立的なデプロイという特徴が、テストやコード共有、依存関係管理といった問題への対処手段としてのモノリポジトリ使用の推奨との緊張関係を作り出す可能性について説明した。独立性のあるデプロイメントを実現するための活動は今後も継続していく、と氏は認めている。
独立的なデプロイメント機能を求めているのであれば、素晴らしい回答を用意できていないのが現実です。現時点での回答は、アプリケーション機能[を独自のパッケージにした]ライブラリを使用する、ということです。[…] 独立した開発チームには一定の自律性はありますが、集中的なコーディネーションの必要がなくなる訳ではありません — 必要なものをすべて再デプロイするのは、アプリケーション作者の責任なのです。
[…] 将来的には、Ivyと動的インポートがソリューションのために大きな役割を果たしてくれるでしょう。
次にFluin氏は、モノリポジトリはインテグレーションやコラボレーション上の問題を解決する一方で、特異性や分散に関する問題を包含している、と説明した。氏はモノリポジトリ対ポリリポジトリに関する自身の意見を、次のようなことばで述べている。
まったくの私見ではありますが、ツールや文化で修正が簡単なのはモノリポジトリの方だと思います。
モノリポジトリの持つ欠点は、ツーリングによって修正できる可能性がある。例としてFluin氏は、有効非循環グラフを使って内部依存関係を追跡し、モノリポジトリの必要な部分のみを再ビルドするGoogleのbezelを取り上げた。GitHubとpullapproveも、モノリポジトリのどのパーツを誰がコントロールするかを管理する上で有効だ。
モノリポジトリを使用するという指示のない企業に対して氏は、講演の中で"仮想モノリポジトリ"と呼ぶパターンを紹介した。このパターンは、必要が生じた場合にモノリポジトリを繰り返し構築することで構成されるものだ。
それらの上でFluin氏は、Angularについて、アプリケーションのさまざまなパーツのオーケストレーションにすぐ使うことのできる優れたものだ、と断言した。Angularと非Angularのコードベースを混在させる必要のある状況では、Angular Elementsやngx-build-plusが役に立つ、と氏は説明する。
特定バージョンのAngularを共有する一連のWebコンポーネントと、セルフブートストラップ形式の独立したWebコンポーネントの、どちらも提供することが可能になります。[対照的に、] 自身のカスタム要素を構築している[非Angular]開発チームに関与して、それらの要素を使用したい場合でも、リーフノードに対して良好に動作します。[…] AngularのWebコンポーネントのサポートは非常に優れているのです。
カスタム要素に関する仕様は開発途上であるため、Angularの要素(ディレクティブ経由でカスタマイズが可能)に比べて機能数で劣る場合はあるが、将来的にはConstructable Stylesheets仕様によって、カスタム要素のスタイルをさらにカスタマイズ可能になると期待される。CSSカスタムプロパティなど現行のテクニックは、ブラウザによる完全なサポートに欠ける(IE 11ではサポートされない)上に、ポリフィル(polyfilling)にはパフォーマンス面での懸念がある。
最後に、Agularバージョンを最新に保つことの必要性をサポートするビジネス面での理由を紹介して、Fluin氏は自身の講演を締め括った。
講演の全体を収めたビデオには、さらに多くの技術的詳細や価値あるコメントが含まれている。ng-confは、Angular JavaScriprフレームワークに関する最高品質のトレーニングの提供を目標とした3日間のAngularカンファレンスだ。ソルトレークシティで開催された同カンファレンスには、1,500人を越える開発者が参加した。