Angularチームは、どうかしちゃった?

私は以前の投稿で、Angularなどのフレームワークがあまり好きではない旨を述べました。宣言的なHTMLのタグや属性、{{二重波括弧}}のプログラミングを開発するということには、どうも抜け落ちている部分があるようです。そして、どのフレームワークも独自のやり方で開発されているため、それを理解しサポートするためには、ツールのアップデートに多大な労力を浪費する注ぐ必要があります。

さらに、そんな先入観を抜きにして考えてみても、Angularの今後に関して最近入ってきた情報は、私がますます頭を抱えてしまうような内容だったのです……

ツールに新たに追加される概念は、1つではなく3つ!

Angularをサポートするためにはツールのアップデートが必要ですが、今は下記を考慮していく必要があるようです。

変わるが、良くならない

先ほどの記事において、Angular v1とAngular v2のコードが以下のように比較されています。

Angular v1

<div ng-controller="SantaTodoController">
    <input type="text" ng-model="newTodoTitle">
    <button ng-click="addTodo()">+</button>
    <tab-container>
        <tab-pane title="Tobias">
            <div ng-repeat="todo in todosOf('tobias')">
                <input type="checkbox" ng-model="todo.done">
                {{todo.title}}
                <button ng-click="deleteTodo(todo)">X</button>
            </div>
        <tab-pane>
    </tab-container>
</div>

Angular v2

(注:先の記事の例にはちょっと気になる部分があったため、HTMLは適切と思われる形に調整しています)

<div>
    <input type="text" [value]="newTodoTitle">
    <button (click)="addTodo()">+</button>
    <tab-container>
        <tab-pane title="Good kids">
            <div [ng-repeat|todo]="todosOf('good')">
                <input type="checkbox" [checked]="todo.done">
                {{todo.title}}
                <button (click)="deleteTodo(todo)">X</button>
            </div>
        <tab-pane>
    </tab-container>
</div>

上の例で分かるように、Angularの概念をマークアップする方法にいくつか大きな変更がみられます。ですが、それは良い変更でしょうか? 本当に? 確かに、ディレクティブを属性の文字列として記述するという従来の方法は、不便なものでした。しかしAngular v2では、属性名にまで[角括弧]や(丸括弧)、パイプが使われています。これは変更ですが、改善になっているとはとても思えません。

2016年になるまで使えない

Angularはリリースを2015年末までに行うことを目指しているが、予定されている変更の大きさを考えると、2016年初めになる見込みが高そうだ。- http://jaxenter.com/angular-2-0-112094.html

もう1つ「一体なぜ?」と思ったのがこの点です。変更があまりにも重大なので、随時リリースすることはできないようなのです。そう考えると、v1からv2への移行は、とてつもなく大変な作業になりそうです。

Angular 1.3のサポートは、2.0のリリース後わずか18~24カ月で終了

AngularチームのBrad Greenによれば、Angular 1.3は、バージョン2.0をリリースしてから18~24カ月の間、バグ修正やセキュリティパッチ提供のサポートを継続するという。- http://jaxenter.com/angular-2-0-112094.html

これは何だか、Python 2.7と3.0の関係を思い出してしまいます。Python 3.0は2008年にリリースされましたが、後方互換性を破るほど大きな変更を含んでいるため、Python 2.7は現在のところ、2020年までサポートされる予定です。新旧のバージョンが12年も併存することになります。一方Angularチームは、Angular 1.3のサポートを18~24カ月しか続けないようです。製品の旧バージョンを12年間サポートすることと、移行期間を18~24カ月しか取らないことのどちらの方が問題かは分かりませんが、個人的には両方ともおかしな感じがします。

結論:Angularを選択しない

私の職場では現在、たくさんの新しいテクノロジやフレームワークなどについて、どれが私たちの製品の次期バージョンに適しているかを見定める作業を行っています。その中でプロトタイプを作っているのは、Dart、React、Angularと、その他いくつかです。でもAngularに関するこうした情報を総合して考えると、Angularを選ぶということが難しく思えてきたところです。私たちの現在のコードベースには10年以上使い続けている部分もあり、新しいコードベースもそのくらい長く使えるものにしたいと思っています。ですが、もし今Angularを書き始めたとしたら、長くても3~4年でフロントエンドを書き直さなければならなくなるでしょう(そしてアプリケーションの状況から考えると、フロントエンドのコードベースは大きくなりそうです)。それはあまり好ましいこととは思えません。

私の誤解している部分があるかもしれませんが、この懸念がすべて解消されるとはどうしても考えにくいのです。

私たちに必要なのは、安定していて長期のサポートを得られるフレームワークです。新たな概念が絶えず追加され、重大な変更を伴って矢継ぎ早に改訂されるようなフレームワークではありません。Googleは誰よりも、大規模なWebアプリケーションを維持するのがいかに大変なことかを理解するべきでしょう :-/