Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Web Components の期待と実情、未来 — 2年のライブラリ開発経験から

Web Components の期待と実情、未来 — 2年のライブラリ開発経験から

ng-japan 2017 (2017/06/17) での発表スライドです。
[イベントURL: https://ngjapan.connpass.com/event/55210/ ]

31d309da3b3b96a39108fe77cdc5e7cd?s=128

Naoki Matagawa

June 17, 2017
Tweet

More Decks by Naoki Matagawa

Other Decks in Programming

Transcript

  1. 2017/06/17(⼟) ng-japan 2017 8FC$PNQPOFOUTͷظ଴ͱ࣮৘ɺະདྷ ŠŠ ೥ͷϥΠϒϥϦ։ൃܦݧ͔Β ຢ઒ ঘथ !O@NBUBHBXB

  2. ࣗݾ঺հ •⼜川 尚樹 (@n_matagawa) • アシアル株式会社(2016年4⽉〜) • Web エンジニア 2年⽬

    •Onsen UI 2 (2015年10⽉〜) • 純 Web Components 製の UI ライブラリ • AngularJS, Angular, React, Vue に対応 • https://onsen.io/
  3. σϞʢ0OTFO 6*ͷ঺հʣ https://tutorial.onsen.io/

  4. ͜ͷൃදͷ໨ඪ •Web Components について知ってもらう!!! • 「今後も Angular を使って⼤丈夫なのか?」 • 「また

    Web に⼀波くるのか?」 • ……といった疑問を解消
  5. ͳͥ "OHVMBSͷ৔Ͱ 8FC$PNQPOFOUTΛʁ •Angular と Web Components は 無関係ではない!!! •

    フレームワークと Web Components は 切っても切り離せない関係
  6. ୈ෦ 8FC$PNQPOFOUTͷޫ

  7. 8FC$PNQPOFOUTͱ͸ (1) ブラウザの機能 • WebGL, Web Audio API, ... に並ぶもの

    (2) 上記を使って作られたコンポーネント
  8. ͳͥ 8FC$PNQPOFOUT͕࿩୊ʹͳ͔ͬͨʁ • メジャーブラウザに搭載され始めたから • デフォルトで使えるようになった • 特に、2017年3⽉に iOS 10.3

    に搭載されたのが⼤きい
  9. ͳͥ 8FC$PNQPOFOUT͕࿩୊ʹͳ͔ͬͨʁ http://caniuse.com/#feat=custom-elementsv1

  10. ͳͥ 8FC$PNQPOFOUT͕࿩୊ʹͳ͔ͬͨʁ • メジャーブラウザに搭載され始めたから • デフォルトで使えるようになった • 特に、2017年3⽉に iOS 10.3

    に搭載されたのが⼤きい • フレームワーク戦争が収束して話題が枯渇したから • 各フレームワークを掘り下げる流れになった • そこに Web Components が割って⼊ってきた
  11. ϒϥ΢βͷػೳͱͯ͠ͷ 8FC$PNQPOFOUT •複数の機能の集まり • しかし、重要な機能は2つだけ

  12. ॏཁػೳͦͷ 特定の名前を持つ要素 <x-hoge> が ⽣成された時、 DOM ツリーに追加された時、…に 指定した処理を実⾏する機能

  13. σϞʢॏཁػೳͦͷ$VTUPN&MFNFOUTʣ

  14. ॏཁػೳͦͷ DOM ツリーの⼀部分に対して 個別の DOM, CSS スコープを与える機能(+α)

  15. σϞʢॏཁػೳͦͷ4IBEPX%0.ʣ

  16. ͭͷॏཁػೳΛ࢖ͬͯԿ͕Ͱ͖Δ͔ʁ •ブラウザが元々持っている <input>, <video>, <table> 等と同じ仕組みで <x-hoge>, <x-piyo> を動かすことができる •HTML5

    に新しい機能が増えたかのような感覚で コンポーネントを使うことができる
  17. 8FC$PNQPOFOUT͕ඳ͘ະདྷ • 再利⽤可能なコンポーネントを ブラウザの機能だけで実装 • 特定のフレームワークに依存しないコンポーネントが 実装・シェア・利⽤される世界

  18. ୈ෦ 8FC$PNQPOFOUTͷҋ

  19. ϑϨʔϜϫʔΫϢʔβʹͱͬͯ ੜͷ 8FC$PNQPOFOUT͸ػೳෆ଍ × データバインディング × Input/Output × DI ×

    パイプ × モジュール •あらゆるものが無い!! • ⽣の Web Components は使えたものではない × 繰り返しレンダリング × アニメーション × …
  20. ੜͷ 8FC$PNQPOFOUTΛ XSBQͯ͠࢖͍΍͘͢͢Δ (1) フレームワークで機能を補填 • X-Tag (2012年〜) Vue チック

    • Polymer (2013年〜) 独⾃路線 • Skate (2014年〜) React チック • slim.js (2016年〜) Angular チック
  21. ྫʢTMJNKTʣ

  22. ੜͷ 8FC$PNQPOFOUTΛ XSBQͯ͠࢖͍΍͘͢͢Δ (1) フレームワークで機能を補填 • X-Tag (2012年〜) Vue チック

    • Polymer (2013年〜) 独⾃路線 • Skate (2014年〜) React チック • slim.js (2016年〜) Angular チック • ランタイムライブラリを読み込む必要がある • ブラウザの機能以外(⾮標準)に頼ることになる
  23. ੜͷ 8FC$PNQPOFOUTΛ XSBQͯ͠࢖͍΍͘͢͢Δ (2) 別の形式で書いて⽣の Web Components に変換 • (2017/06

    現在、そういったライブラリは無し) • ランタイムライブラリは不要 • しかし⼿元にビルド環境(⾮標準)を⽤意することになる
  24. ଞਓ͕ 8FC$PNQPOFOUTͰॻ͍ͨίϯϙʔωϯτΛ ࢖͏ͷ΋؆୯Ͱ͸ͳ͍ • ブラウザ標準の <input> はそのままでは使いにくい • なので @angular/forms

    が作られた • それと同じことが <x-hoge> にも起こる • @angular/forms のようなものが提供されていないと使いにくい • Onsen UI 2 では ngx-onsenui を作る⽻⽬になった
  25. ୈ෦ ͡Ό͋ɺԿͷ໾ʹཱͭͷʁ

  26. ඇϑϨʔϜϫʔΫϢʔβʹͱͬͯͷ 8FC$PNQPOFOUT •世の中、 フレームワークを使っていない⼈の⽅が多い • データバインディングがない、 Input/Output がない、そんなのは苦痛ではない • ⾮フレームワークユーザにとっての魅⼒:

    • ライブラリなしですぐに使える • コピペするだけですぐに使える
  27. ϑϨʔϜϫʔΫϢʔβʹͱͬͯͷ 8FC$PNQPOFOUT •⽣の Web Components(+その wrapper)に フレームワークユーザの求めているものは無い • Web Components

    は あくまでフレームワークに依存しない・再利⽤可能な コンポーネントを作るためのもの •Q. どうすれば良いか? • A. 引き続きフレームワークを使いましょう!!
  28. ϥΠϒϥϦఏڙऀʹͱͬͯͷ 8FC$PNQPOFOUT • 複数のフレームワークに ライブラリを提供できる最⾼のツール • Web Components でコア(共通部分)を実装してしまえば、 あとは

    @angular/forms のようなものを⽣やすだけ • 今後この設計を持つライブラリは増えていく Web Components 層 angular- onsenui ngx- onsenui react- onsenui vue- onsenui ember- onsenui aurelia- onsenui フレームワーク 層 (onsenui)
  29. ϑϨʔϜϫʔΫఏڙऀʹͱͬͯͷ 8FC$PNQPOFOUT •フレームワークの構築に使える機能が揃っている •⾼速化に利⽤できる • Web Components は速い • Angular

    は 既に Shadow DOM を使った⾼速化を実装済み • デフォルトでは無効
  30. ࠷ޙʹ

  31. 8FC$PNQPOFOUTΛୟ͘ʜʜͦͷલʹ •関係者は今も Web Components の未来に向けて 動いている •フレームワークの進化は速すぎた • Web Components

    を置き去りにした •これからその溝が埋まっていく
  32. Thank you for listening! Web Components の未来に 乞うご期待!!