ng-japan 2017 (2017/06/17) での発表スライドです。 [イベントURL: https://ngjapan.connpass.com/event/55210/ ]
2017/06/17(⼟) ng-japan 20178FC$PNQPOFOUTͷظͱ࣮ɺະདྷ ͷϥΠϒϥϦ։ൃܦݧ͔Βຢ ঘथ [email protected]
View Slide
ࣗݾհ•⼜川 尚樹 (@n_matagawa)• アシアル株式会社(2016年4⽉〜)• Web エンジニア 2年⽬•Onsen UI 2 (2015年10⽉〜)• 純 Web Components 製の UI ライブラリ• AngularJS, Angular, React, Vue に対応• https://onsen.io/
σϞʢ0OTFO 6*ͷհʣhttps://tutorial.onsen.io/
͜ͷൃදͷඪ•Web Components について知ってもらう!!!• 「今後も Angular を使って⼤丈夫なのか?」• 「また Web に⼀波くるのか?」• ……といった疑問を解消
ͳͥ "OHVMBSͷͰ 8FC$PNQPOFOUTΛʁ•Angular と Web Components は無関係ではない!!!• フレームワークと Web Components は切っても切り離せない関係
ୈ෦8FC$PNQPOFOUTͷޫ
8FC$PNQPOFOUTͱ(1) ブラウザの機能• WebGL, Web Audio API, ... に並ぶもの(2) 上記を使って作られたコンポーネント
ͳͥ 8FC$PNQPOFOUT͕ʹͳ͔ͬͨʁ• メジャーブラウザに搭載され始めたから• デフォルトで使えるようになった• 特に、2017年3⽉に iOS 10.3 に搭載されたのが⼤きい
ͳͥ 8FC$PNQPOFOUT͕ʹͳ͔ͬͨʁhttp://caniuse.com/#feat=custom-elementsv1
ͳͥ 8FC$PNQPOFOUT͕ʹͳ͔ͬͨʁ• メジャーブラウザに搭載され始めたから• デフォルトで使えるようになった• 特に、2017年3⽉に iOS 10.3 に搭載されたのが⼤きい• フレームワーク戦争が収束して話題が枯渇したから• 各フレームワークを掘り下げる流れになった• そこに Web Components が割って⼊ってきた
ϒϥβͷػೳͱͯ͠ͷ 8FC$PNQPOFOUT•複数の機能の集まり• しかし、重要な機能は2つだけ
ॏཁػೳͦͷ特定の名前を持つ要素 が⽣成された時、DOM ツリーに追加された時、…に指定した処理を実⾏する機能
σϞʢॏཁػೳͦͷ$VTUPN&MFNFOUTʣ
ॏཁػೳͦͷDOM ツリーの⼀部分に対して個別の DOM, CSS スコープを与える機能(+α)
σϞʢॏཁػೳͦͷ4IBEPX%0.ʣ
ͭͷॏཁػೳΛͬͯԿ͕Ͱ͖Δ͔ʁ•ブラウザが元々持っている, , 等と同じ仕組みで, を動かすことができる•HTML5 に新しい機能が増えたかのような感覚でコンポーネントを使うことができる
8FC$PNQPOFOUT͕ඳ͘ະདྷ• 再利⽤可能なコンポーネントをブラウザの機能だけで実装• 特定のフレームワークに依存しないコンポーネントが実装・シェア・利⽤される世界
ୈ෦8FC$PNQPOFOUTͷҋ
ϑϨʔϜϫʔΫϢʔβʹͱͬͯੜͷ 8FC$PNQPOFOUTػೳෆ× データバインディング× Input/Output× DI× パイプ× モジュール•あらゆるものが無い!!• ⽣の Web Components は使えたものではない× 繰り返しレンダリング× アニメーション× …
ੜͷ 8FC$PNQPOFOUTΛ XSBQ͍ͯ͘͢͢͠Δ(1) フレームワークで機能を補填• X-Tag (2012年〜) Vue チック• Polymer (2013年〜) 独⾃路線• Skate (2014年〜) React チック• slim.js (2016年〜) Angular チック
ྫʢTMJNKTʣ
ੜͷ 8FC$PNQPOFOUTΛ XSBQ͍ͯ͘͢͢͠Δ(1) フレームワークで機能を補填• X-Tag (2012年〜) Vue チック• Polymer (2013年〜) 独⾃路線• Skate (2014年〜) React チック• slim.js (2016年〜) Angular チック• ランタイムライブラリを読み込む必要がある• ブラウザの機能以外(⾮標準)に頼ることになる
ੜͷ 8FC$PNQPOFOUTΛ XSBQ͍ͯ͘͢͢͠Δ(2) 別の形式で書いて⽣の Web Components に変換• (2017/06 現在、そういったライブラリは無し)• ランタイムライブラリは不要• しかし⼿元にビルド環境(⾮標準)を⽤意することになる
ଞਓ͕ 8FC$PNQPOFOUTͰॻ͍ͨίϯϙʔωϯτΛ͏ͷ؆୯Ͱͳ͍• ブラウザ標準の はそのままでは使いにくい• なので @angular/forms が作られた• それと同じことが にも起こる• @angular/forms のようなものが提供されていないと使いにくい• Onsen UI 2 では ngx-onsenui を作る⽻⽬になった
ୈ෦͡Ό͋ɺԿͷʹཱͭͷʁ
ඇϑϨʔϜϫʔΫϢʔβʹͱͬͯͷ8FC$PNQPOFOUT•世の中、フレームワークを使っていない⼈の⽅が多い• データバインディングがない、Input/Output がない、そんなのは苦痛ではない• ⾮フレームワークユーザにとっての魅⼒:• ライブラリなしですぐに使える• コピペするだけですぐに使える
ϑϨʔϜϫʔΫϢʔβʹͱͬͯͷ8FC$PNQPOFOUT•⽣の Web Components(+その wrapper)にフレームワークユーザの求めているものは無い• Web Components はあくまでフレームワークに依存しない・再利⽤可能なコンポーネントを作るためのもの•Q. どうすれば良いか?• A. 引き続きフレームワークを使いましょう!!
ϥΠϒϥϦఏڙऀʹͱͬͯͷ8FC$PNQPOFOUT• 複数のフレームワークにライブラリを提供できる最⾼のツール• Web Components でコア(共通部分)を実装してしまえば、あとは @angular/forms のようなものを⽣やすだけ• 今後この設計を持つライブラリは増えていくWeb Components 層angular-onsenuingx-onsenuireact-onsenuivue-onsenuiember-onsenuiaurelia-onsenuiフレームワーク 層(onsenui)
ϑϨʔϜϫʔΫఏڙऀʹͱͬͯͷ8FC$PNQPOFOUT•フレームワークの構築に使える機能が揃っている•⾼速化に利⽤できる• Web Components は速い• Angular は既に Shadow DOM を使った⾼速化を実装済み• デフォルトでは無効
࠷ޙʹ
8FC$PNQPOFOUTΛୟ͘ʜʜͦͷલʹ•関係者は今も Web Components の未来に向けて動いている•フレームワークの進化は速すぎた• Web Components を置き去りにした•これからその溝が埋まっていく
Thank you for listening!Web Components の未来に乞うご期待!!