Google DartはWeb UIを捨てて、Polymerに置き換えようとしている。外から見る限り、大きな違いはデータバインディングとイベントの処理だ。
GoogleのDartチームはPolymerをDartに移植し始めた。多くのコンポーネントが既に移植済みであり、パッケージングされている。observe、mdv, shadow_dom、polymer.dartなどだ。DartのエンジニアであるJohn Messerly氏によれば、次に挙げた残りの機能も近い将来完成する。
宣言的な<polymer-element>とカスタムエレメント
html_importsのような最新のpolyfillパッケージ
polymer.dartからのコンパイラステップの排除。編集して保存してリフレッシュすればOK!
Polymer UIエレメントをDartへ移植
ドキュメントの更新
Google Polymerはウェブアプリケーションを構築するための新しいコンポーネントであり、Web Componentsの仕様に基づく。Polymerは、polyfillを使って足りていない機能を補うことで、最新のHTML5標準とブラウザをすべてサポートする。Polymerへの期待は高く、DartがPolymerをネイティブでサポートするのは良いアイディアだろう。しかし、GoogleはWeb UIのサポートをドロップするつもりだ。Web UIが使っていたオリジナルのUIフレームワークだ。Web UIはWeb ComponentsやModel-driven ViewsやHTML5標準をサポートすることを念頭に開発されていた。
DartのUIフレームワークが変わることに驚いたユーザもいる。
Thomas Løcke: Polymerを使えてうれしい。でも、web_uiがなくなってしまうのは悲しいです。もうすでに大量の人月をweb_uiに投資してしまっているからね。
Bernd Wessels: Polymer.dartの次には何があるのでしょう。DartのUIフレームワーク(未来のウェブ開発)はごちゃごちゃしたpolyfillがベースになるのでしょうか。
つまり、待ちに待ったDartのリリースの後、DartにしっかりとしたUI開発の基盤がないのは本当にイライラすることだということです。
Googleのエンジニアの中には、Dartがすぐには安定しないことに対する不安を和らげ、なぜPolymer.dartを選択したのか説明する者もいた。
John Messerly: Dartのような新しい言語の面白い点は未来のウェブ開発に一足飛びに進めることです。私たちが行った方法以外に何か方法があったかどうか私にはわかりません。新しいUIフレームワーク/ライブラリを安定化されるためには少し時間がかかるでしょう。Web Componentsや他の標準を受け入れることで、私たちはウェブを最良の開発環境にする可能性がある努力を支持し、そこから恩恵を受けています。
Kasper Lund: 今はまだ既存のプラットフォームのAPIを安定化させるための作業を続けています。最も難しいのはAPIです。変わりやすく、私たちの知らないところで何度も改善されているからです。
Dartを使ったウェブアプリケーション開発に投資している開発者にとっては幸運なことに、Web UIとPolymerというふたつのフレームワークの違いはそれほど大きくない。相互に移植するのは単純な作業だと、DartのエンジニアであるJustin Fagnani氏は説明する。
違いはそれほど大きくありません。shadow DOMやカスタム要素、MDV、HTML importsなどの低いレイヤに基づいているからです。 <element>、<template>、<content>タグも使えますし、{{ }}バインディングも使えます。データモデルとテンプレートのバインドの仕方やバインディングの構文、属性とプロパティのマッピング方法など異なる仕様もあります。このような仕様変更は一部はPolymerを導入するため、また一部はMDVを変更するために起きました。
次のコードはふたつのTo-doサンプルから抜粋したものだ。ふたつのフレームワークの違いを示している。
<ul id="todo-list">
<template iterate="x in app.todos">
<template if="viewModel.isVisible(x)">
<todo-row todo="{{x}}"></todo-row>
</template>
</template>
</ul>
<ul id="todo-list">
<template repeat="{{app.visibleTodos}}">
<li is="todo-row" todo="{{}}"></li>
</template>
</ul>
DartのエンジニアはDartに最新の技術を盛り込もうとしているが、このような変更は未熟で安定していない技術に投資することの危険性も示している。Polymerのメインページには次のように書いてある。“Polymerpre-alphaモードであり、向こう見ずな開発者だけが利用できます”
Polymerについての詳細はInfoQのGoogleの Polymerで今日からWeb Componentsを使おうというニュースでも取り上げている。
Google製のフレームワークであるAngular.jsはDartへポートされている最中だ。これについてもAngularJSのDartへのポーティングが進行中という記事で取り上げている。