Polymerプロジェクトのこれからについて


laco0416です。10/16にPolymerチームから今後のロードマップが発表されましたので、雑に日本語訳します。

# すごく雑なまとめ
- Polymerプロジェクト自体のことはPolymer/projectリポジトリを作ったからそこで話すようになる
- めっちゃコミュニティ大きくしたいからいろいろやる
- APIにはあんまり変更なさそう
- 周辺ツールをかなり強化する
- `Carbon`エレメントが爆誕する
- `router` やるよ


# Polymerプロジェクトのロードマップとリポジトリの紹介
https://blog.polymer-project.org/announcements/2015/10/16/polymer-roadmap-and-repo/

Polymer 1.0の公開とPolymer Summitの開催から、Polymerの採用事例は指数関数的に増えています。しかし、我々はPolymerプロジェクトの向かう先について十分に盛り上げることができていませんでした。

我々はチームのゴールとロードマップについて熱心にコミュニケーションし、そして今日新たなリポジトリ [Polymer/project](https://github.com/Polymer/project) を発表できました。このリポジトリは全てのメタ情報、すなわち[ロードマップ](https://github.com/Polymer/project/blob/master/Roadmap.md)や[行動規範](https://github.com/Polymer/project/blob/master/Code_of_Conduct.md)、[コントリビュートガイド](https://github.com/Polymer/project/blob/master/Contributing.md)など、Polymerプロジェクトそのものについての情報をまとめます。

このリポジトリではWikiよりもプロジェクトの構造や方向性について広く議論することに重きを置きます。Polymerプロジェクトは多くのリポジトリにより構成されており、プロジェクトレベルでの議論をするのにそれでは困難だったからです。

新たなPolymer/projectリポジトリはそれを簡単にしてくれます。プロジェクトレベルでの質問や提案、アイデアあるいはイシューなどをぜひprojectリポジトリに集めてください。

また、projectリポジトリは最新のドキュメントとして、常に更新されていきます。他のPolymerプロジェクトのリポジトリと同様にプルリクエストを大歓迎しています！

# ロードマップ
https://github.com/Polymer/project/blob/master/Roadmap.md

Polymerコアチームの今後数ヶ月の活動について説明します。

注意：このドキュメントは常に更新され、変更されます。Polymerプロジェクトは常に新しいユースケースに対応して進化していきます。このロードマップは明確なタイムラインではなくその上にある北極星のようなものです。

ぜひ疑問や懸念、提案をこのリポジトリに寄せてください。

## コアライブラリ

### 人間工学の改善

Polymerライブラリは基本的に、Web Componentsの上にある人間工学の層です。我々は常に、HTML要素を作るときにライブラリをより直感的に、「期待する通りに動く」ようにしようと求めています。

- データバインディングにおけるオブジェクトの監視について改善します。特に `object.*` のようなものを監視するときのあらゆる変更に対する部分を改善します。
- ライブラリ全体で統一されていない `undefined` の使い方を直します。
- 「遠隔作用」形式のデータバインディングをサポートする上でのドキュメンテーションやガイドを作成します。
- Look into creating something along the lines of `array-selector` but for objects.(訳注：さっぱりわからなかった)

(追記：↑についてコメントで補足していただけました)

### スタイリングシステムの改善

- P1レベルのイシューをすべて閉じて基本的なシステムを得ます。
- クロスブラウザにおいて、ブラウザのネイティブCSSプロパティと現在のスタイリングシステムの間での相互作用ができるように、ネイティブのCSSプロパティを活用する準備ができていることを確認する。
- `Polymer.dom`を使った動的なスタイリングをサポートします。
- 外部のスタイルシートをロードするためのメソッド・ツールをサポートします。

### コードの健全性の改善

- annotationsとeffectsに関するリファクタリングを行います。
- polymer-microとpolymer-miniのレイヤリングに関するリファクタリングを行います。

### パフォーマンス

- HTML要素の「コスト」(生成にかかる時間)を計測できるツールを作ります。
- 長大なアイテムを扱う際の人間工学を改善するために`iron-list`と`dom-repeat`に関してパフォーマンスを向上させます。
- Polymer要素のインスタンス化の基本的なパフォーマンスを10%速くします。
- `paper-button`の生成を2倍速くします。

### Elements

それぞれのエレメント群について、メタリポジトリでロードマップを作ります。

[Paper Elements](https://github.com/polymerelements/paper-elements)
[Iron Elements](https://github.com/polymerelements/iron-elements)
[Gold Elements](https://github.com/polymerelements/gold-elements)
[Platinum Elements](https://github.com/polymerelements/platinum-elements)
[Neon Elements](https://github.com/polymerelements/neon-elements)

### アプリケーションレール

Polymerのライブラリはカプセル化されたHTML要素を簡単に作ることができるという点を特に重視していますが、プロジェクトとしてはもっと大きな範囲で、誰でも簡単にウェブ上で高品質なエクスペリエンスを構築できるようにすることを支援したいと考えています。

ライブラリとエレメンツによる強固な基礎の上で、単一の包括的な「フレームワーク」に依存することなく、エレメンツを超えた全体のアプリケーションを構築するガイダンスを提供しようとしています。その代わりに、我々はエレメンツの形でアプリケーションの構造の機能を提供し、それによって開発者は慣用的な方法でアプリケーションを構築するために必要な物を使うことが出来ます。これらの要素は、暫定的に`Carbon`エレメンツと命名されています。

- `router`エレメントを試作します。
- 新しいマークアップ(訳注：Custom Elementsのこと？)を必要なときにサーバーから動的に遅延ローディングするための方法を試作します。
- 文字列の翻訳のためのローカライゼーション方法を模索します。
- 全てのエレメントについてRTLをサポートします。
- もっと単純にレスポンシブなアプリケーションをレイアウトできる要素のセットを試作します。

### ツール

- アプリケーションが必要とする部分だけを動的にロードできるような sharded vulcanizeツールを作ります。
- PolymerのLintツール([Polylint](https://github.com/PolymerLabs/polylint))をリリースします。
- パッケージマネージャなしにPolymerが提供する要素を使えるように、開発時向けの[Polygit](https://github.com/PolymerLabs/polygit)ツールを試作します。(訳注：PolymerElements専用のCDNみたいなもの)
- vulcanizeツールがPolygitと協調することで、開発者がクライアントサイドでパッケージマネージャを使わなくてもビルドできるようになります。

### オペレーション

Polymerチームやコミュニケーションの生産性をより高めるためのツールを成長させます。

- すべてのリポジトリに共通する一貫したイシューラベルを用意します。
- ファイリングするイシューの要件を明確にまとめます。(再現性とテストコードを要求します)
- PRの要件を明確にまとめます。(すべての変更に対するテストを要求します)
- CIを全てのリポジトリでTravis CIに移行します。
- jscompilerが落ちた時にCIを落とすようにします。
- linterがエラーを吐いた時にCIを落とすようにします。

----

個人的な注目ポイント

- Polygit前提のエコシステムに移行しそうなので、そうすると今のbowerに依存したエコシステムを脱却できて、設計の自由度が上がりそう。
- Polylintバンザイ！！でもASTとか使ってなくてすごくシンプルなJSONオブジェクトのチェックなのが残念。流用してd.ts吐かせてみたい。
- Polymerが負う層じゃないからrouterやめてくれよ…と思うんだけど実際出てきてから再考する。
- 行動規範(Code of Conduct)がめっちゃ面白い。OSSとしてまじめに育てる意志が感じられて非常に好感が持てる。

「遠隔作用」形式のデータバインディングについてよくわからなかったのでslackで聞いてみたところ、「mediatorパターンではないデータバインディングの仕組み」のことを指しているらしく、具体的には[iron-signal](https://elements.polymer-project.org/elements/iron-signals)と同種のものらしい。

routerを公式から提供しようとする意図について尋ねてみた結果
https://github.com/Polymer/project/issues/4
Polymerの利用者たちからのニーズの答えた形ということで、そろそろ公式のお墨付きのPolymer製routerがあってもいいんじゃないかという判断らしい。フレームワークではなくライブラリだというスタンスもそのままで、routerはPolymerのコアとは完全に切り離されたCarbonエレメンツの一つとして提供される。ライブラリの機能としてrouterをサポートするのではなくPolymerの使用例の一つとして公開されるのはいいことだと思った。