Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
LitElementとWeb Componentsの比較 #meguroes
Search
tiwu
June 06, 2019
Technology
690
1
Share
LitElementとWeb Componentsの比較 #meguroes
Meguro.es # 21 @ ビザスク
で登壇した資料です
https://lit-element-sample.netlify.com/
tiwu
June 06, 2019
More Decks by tiwu
See All by tiwu
Eleventy で SSG
tiwu_dev
2
700
Eleventy - 11ty
tiwu_dev
0
140
Install for PWA
tiwu_dev
0
1.5k
App Shortcuts
tiwu_dev
0
940
Web Vitals
tiwu_dev
0
82
Web Share API
tiwu_dev
0
1.5k
Badge in Background
tiwu_dev
0
100
PWAとCache API #frontkansai
tiwu_dev
5
2.3k
Web Componentsとlit-element #frontkansai
tiwu_dev
2
1.6k
Other Decks in Technology
See All in Technology
目的ファーストのハーネス設計 ~ハーネスの変更容易性を高めるための優先順位~
gotalab555
8
2k
AIが書いたコードを信じられない問題 〜レビュー負荷を下げるために変えたこと〜 / The AI Code Trust Gap: Reducing the Review Burden
bitkey
PRO
3
870
マルチエージェント × ハーネスエンジニアリング × GitLab Duo Agent Platformで実現する「AIエージェントに仕事をさせる時代へ。」 / 20260421 GitLab Duo Agent Platform
n11sh1
0
140
DevOpsDays Tokyo 2026 軽量な仕様書と新たなDORA AI ケイパビリティで実現する、動くソフトウェアを中心とした開発ライフサイクル / DevOpsDays Tokyo 2026
n11sh1
0
150
EarthCopilotに学ぶマルチエージェントオーケストレーション
nakasho
0
270
インターネットの技術 / Internet technology
ks91
PRO
0
180
AI時代のガードレールとしてのAPIガバナンス
nagix
0
210
Azure Lifecycle with Copilot CLI
torumakabe
3
1k
昔はシンプルだった_AmazonS3
kawaji_scratch
0
320
クラウドネイティブな開発 ~ 認知負荷に立ち向かうためのコンテナ活用
literalice
0
110
"SQLは書けません"から始まる データドリブン
kubell_hr
2
470
Rebirth of Software Craftsmanship in the AI Era
lemiorhan
PRO
4
1.9k
Featured
See All Featured
RailsConf 2023
tenderlove
30
1.4k
Joys of Absence: A Defence of Solitary Play
codingconduct
1
350
Product Roadmaps are Hard
iamctodd
PRO
55
12k
The Straight Up "How To Draw Better" Workshop
denniskardys
239
140k
Code Review Best Practice
trishagee
74
20k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
31
3.2k
Gemini Prompt Engineering: Practical Techniques for Tangible AI Outcomes
mfonobong
2
370
SEO Brein meetup: CTRL+C is not how to scale international SEO
lindahogenes
1
2.5k
We Analyzed 250 Million AI Search Results: Here's What I Found
joshbly
1
1.2k
The Spectacular Lies of Maps
axbom
PRO
1
700
Amusing Abliteration
ianozsvald
1
150
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.4k
Transcript
LitElementとWeb Componentsの比較 Wataru Taguchi
アジェンダ - 自己紹介 - Web Componentsとは - LitElementとは - Todoリスト
- 比較 - 所感 - Q&A - まとめ
自己紹介 # Wataru Taguchi - GameWith Front End Engineer -
PWAとかWeb Componentsとかパフォーマンス チューニングが好き - @tiwu_official - FF14, Beer, Kyoto Animation
Web Componentsとは Vanilla JS、HTML、CSS を使用して 再利用可能なコンポーネントを作成する仕組み
- ライブラリに依存せずコンポーネントを作成できる - ビルド作業はない - どんなサイトでも動く - Scoped CSSが書ける -
命名ルール地獄からの解放 メリット
- カスタム要素 - 新しくHTMLタグを作成する - Shadow DOM - DOMを隠すことができる Web
Componentsを構成する技術
シンプルなボタン
シンプルなボタン text属性を利用し表示 cssとHTMLをまとめて配布する
LitElementとは 軽量で高速なWebコンポーネントをつくる シンプルなベースクラス
- 宣言的に書ける - 要素は、プロパティが変更されると自動的に更新される - 軽い - lit-htmlが変更されたデータのみを再描画するため、DOMの更新は非常に高 速 -
Web Componentsに準拠している - どのフレームワークでも動く - TypeScriptでも書ける メリット
LitElementのサンプル
Todoリスト https://lit-element-sample.netlify.com/
Todoリスト my-todo my-list my-item my-input
Todoリスト my-todo my-list my-item my-input 入力
Todoリスト my-todo my-list my-item my-input 入力 CustomEvent発火
Todoリスト my-todo my-list my-item my-input 入力 CustomEvent発火 入力された値を受け取って listに追加 &LSに追加
Todoリスト my-todo my-list my-item my-input 入力 CustomEvent発火 入力された値を受け取って listに追加 &LSに追加
リスト更新
Todoリスト my-todo my-list my-item my-input 削除
Todoリスト my-todo my-list my-item my-input 削除 CustomEvent発火
Todoリスト my-todo my-list my-item my-input 削除 CustomEvent発火 CustomEvent発火
Todoリスト my-todo my-list my-item my-input 削除 CustomEvent発火 indexを元にlistから削除 &LSに追加 CustomEvent発火
Todoリスト my-todo my-list my-item my-input 削除 CustomEvent発火 CustomEvent発火 indexを元にlistから削除 &LSに追加
リスト更新
比較 my-input addEventListenerを利用し、イベントを付与 inputのvalueは直接DOM弄りを空にする
比較 my-input @clickを利用し、イベントを付与 inputのvalueは直接DOMは弄らず空にする
比較 my-item addEventListenerを利用し、イベントを付与 indexはattributeから取得
比較 my-item @clickを利用し、イベントを付与 indexはClassの変数から取得
比較 my-list observedAttributesを利用しlistプロ パティの変更を監視 attributeChangedCallbackで変更 があったら、my-itemを削除して新し いlistを元にmy-itemをDOMに挿入 する my-itemにdeleteイベントを貼って、 deleteイベントを再度発火させる
比較 my-list this.list.mapを利用してmy-itemを表示させる @my-delete-eventでイベントを貼って、再度発火させる
比較 my-todo listはJSON.stringifyを使ってJSON文字列にして”をエスケープさせる listの追加、削除があったらsetAttributeを使って,リストを描画させる
比較 my-todo JSON文字列はエスケープ無しで問題なし list変数に変更を加えるだけで、リストの再描画が走る ※ filterではなくspliceを利用し削除したら再描画は走らなかった
- 動的な値の変更・描画はLitElementが楽 - LitElementはcssの補完が効かないのが辛い - bundle size - web components
1.5kb - LitElement 7.7kb 所感
- https://www.youtube.com/ - https://voice.ameba.jp/ - https://support.pairs.lv/hc/ja/ - 日経電子版(現在リニューアル中) 事例
Q : 対応ブラウザは? A : Edge以外大丈夫 Q&A
Q : Edgeどうすれば・・? A : Chromiumベースになるから大丈夫だろう・・・ Q&A
Q : クライアントサイドでレンダリングされるということは SEOが・・・ A : Google I/Oで最新Chromiumレンダリングエンジンを サポートすることが発表されたから大丈夫 Q&A
- ライブラリに依存せずコンポーネントが作れる - Scoped CSSが書ける - LitElementは結構便利 - ただ描画周りは気をつける必要あり -
結構大手のサイトで使われている まとめ
Web Components / LitElement はいいぞ
ご清聴ありがとうございました