Angular 2への移行でGoogleが失った開発者と、後に整えた段階的な移行策
出典: angular.dev

AngularJSからAngular 2への大幅な転換

Googleは2014年、広く使われていたJavaScriptフレームワークAngularJSを非推奨とし、アーキテクチャを大きく変えたAngular 2へ移行する方針を示しました。新旧に互換性はなく、Angular 2は当時まだ完成していませんでした。

AngularJSは2009年、Googleのエンジニアだったミシュコ・ヘヴェリー氏が個人プロジェクトとして始めました。HTMLを拡張して画面を作りやすくする仕組みが社内外の開発者に広まり、Googleも社内プロジェクトに採用しました。

AngularJS 1系では、コントローラーが入力や処理、データの受け渡しを担い、$scopeを通じて画面と結び付いていました。Angular 2では、画面の部品ごとにクラスを持たせるコンポーネント方式に移行し、フレームワーク全体をTypeScriptで書き直しました。

移行先が見えないまま旧版の終了を告げた

Angular 2の構想は2014年のカンファレンスで発表されましたが、基礎部分の仕様変更が続き、リリース時期も定まっていませんでした。旧版の機能を順に廃止する説明には墓標の図や鐘の音が使われました。

GoogleでAngularの開発に携わったスティーブン・フルイン氏は、移行先が用意される前に旧版を終わらせると、開発者が不安を感じ、意欲を失うと振り返りました。移行に取り組む人たちを引き継ぐには、旧版を廃止するだけでなく、移行経路を示す必要があるとも述べています。

当時、コンポーネント方式を採用したReactやVue.jsはすでに利用できました。Angular 2の完成を待たずに移った開発者もいました。2016年のJavaScript開発者調査では、Reactを使ったことがある回答者は53%、AngularJSを使う回答者は30%、Angular 2を使う回答者は13%でした。

名称とリリース時期も混乱を招いた

Angular 2は2016年9月に公開され、翌年3月にはAngular 4がリリースされました。バージョン3は飛ばされ、AngularJS 1系も2016年春に1.5へ更新されてコンポーネント機能を導入したため、新旧の区別はさらに分かりにくくなりました。

「AngularJS」と「Angular 2」という名称から、別のフレームワークなのか、同じ製品の世代違いなのかを判断しにくい状況が生まれました。フルイン氏によると、Googleは名称やバージョンの説明方針を整え、専門家への説明やナレッジグラフの修正にも取り組みました。

フルイン氏は後年、Angular 2をまったく別の名前で始め、利用者を改めて獲得する方がよかった可能性にも触れました。一方、コンポーネント方式への転換はGoogleのニーズに応え、現在はGeminiのユーザーインターフェースやGoogle AnalyticsなどでAngularが使われています。

後に用意された段階的な移行方法

Angularの移行ガイドでは、AngularJSとAngularを同じアプリケーション内で並行して動かし、コンポーネント単位で順に移す方法を案内しています。一度にすべてを書き換える必要がなく、大規模なアプリケーションでも作業を分けて進められます。

移行前の準備として、機能ごとにコードを整理し、コンポーネントを1ファイルずつ分ける構成を推奨しています。この構成にすると、アプリ全体ではなく機能ごとに移行できます。

また、AngularJS 1.5のコンポーネントAPIを使い、$scopeへの依存を減らして、各部品が独立したテンプレートや入出力を持つ形に整える方法も説明しています。TypeScriptの導入やサービス・コントローラーのクラス化も、後の移行に備える方法として挙げています。

Angularは現在、年2回の定期リリースを行い、削除予定の機能を事前に非推奨としています。