ntaoo
7 min readNov 8, 2014

PolymerDartについての現状認識

Moved to http://jablog.ntaoo.com/articles/2014/11/18/polymer-dart-current/

先日、Dart現状確認会でPolymerDartについて共有した。その補足説明をここに残す。

https://speakerdeck.com/ntaoo/webapp-with-polymerdart-and-material

仕様

PolymerDartはPolymerJSの仕様に追随している。そのため、PolymerJSを学習し理解すれば少しの努力でPolymerDartを理解できる。

DartバージョンはDart向けに文法が整理されている。

一番目を引く違い。PolymerDartにおけるcustom tagは、それに対応するclassと@annotationを持つ。@CustomTagでelement nameを指定する。@publishedでcustom attributeを指定する。@observableでelement内部のdata binding対象を指定する。

その他の違いもDartの文法を知っていれば自然に対応できる印象。

Material Design

Paper ElementsとCore ElementsはPolymerDartにおいても使用できる。それぞれPub(というDartのPackage Manager)でインストールする。

これは基本的にはPaper ElementsとCore ElementsのJS版をdart:jsというライブラリを使用して呼び出している。

例外としてAjax処理が絡むelementはDartで書きなおされている。少なくともcore-ajax, core-xhr, core-listが対象。理由は未調査。それぞれのtagの名称に-dart suffixが追加されている。core-ajax-dart, core-xhr-dart, core-list-dart。core-listについては、infinite scrolling機能が内包されいるためだと思われる。

core-ajax-dartを試してみたが残念ながらうまく動かなかった。(勘違いかもしれない)そのためそこはJS版のtutorialとは異なる実装にした。

将来すべてDartで書きなおされるのかは不明。仕様と実装が安定したらそうするのでは。

そろそろPolymerの仕様は安定してきた…のか?

JSへのCompile

Polymer TutorialをDartにportしたものをpub build(dart2jsによるJSへのcompile)すると1.1MBまで膨らんだ。個人的にはここがつらい。うまくtree shakingできなかったのではないか。dart:mirrorを使うとdart2jsはまだ辛い印象。Issue ticketも結構残っている。インストール型でサイズが膨れてもそれほど気にしなくとも良いCordovaやChromeAppから入るのがいまのところ正解かと思う。もしくはmirrorを使わなければ最小で200KBくらいと許容できるサイズになる。

2015年にはChromeにDartVMが入るとして、AndroidのCordovaとChromeApp(とMobileChromeApp)はDartVMで実行できることが期待できるが、その他の環境ではJSへのcompileが必要なので、改善を期待。

PolymerDartの学習方法

学習はDartEditorで始めるといい。リアルタイムのwarningやbuildメニューなどIDEとしていろいろ支援してくれるため。 しかしぶっちゃけEditor単体としてはかなり使いにくい(ごめん)ため、個人的にはWebStormのDartサポートが安定したらそれに乗り換える予定。

PolymerDart Home.

まだissueが結構潜んでいるようで、サンプルコードに載っている範囲が安全地帯という感じもある。

PolymerDartもPolymerなので、PolymerJSを学習しておくとPolymerDartの理解が容易になる。

CoreElementsとPaperElementsのAPIはJS版と同じ(はず)なので、JS版のリファレンスを参照して開発できる。もしくはライブラリのソースのコメントを読む。

自分は、PolymerDartとPaperElements,CoreElementsを多少表示が崩れたり初期起動が遅くとも問題が少ないAdmin consoleに導入してみている。

次はDartのAppEngine ManagedVMについて書く。