Upgrade to PRO for Only $50/Year—Limited-Time Offer! 🔥
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
実例と表現で学ぶWeb Components 〜"愛される"広告表現とShadowDOM〜 ...
Search
CARTA Engineering
November 28, 2025
Technology
0
25
実例と表現で学ぶWeb Components 〜"愛される"広告表現とShadowDOM〜 / practical-guide-to-lovable-ads-shadow-dom
フロントエンドカンファレンス東京 x Vue Fes Japan コラボイベント
登壇者: @hako584
CARTA Engineering
November 28, 2025
Tweet
Share
More Decks by CARTA Engineering
See All by CARTA Engineering
CARTAのAI CoE が挑む「事業を進化させる AI エンジニアリング」 / carta ai coe evolution business ai engineering
carta_engineering
0
1.6k
Snowflakeとdbtで加速する 「TVCMデータで価値を生む組織」への進化論 / Evolving TVCM Data Value in TELECY with Snowflake and dbt
carta_engineering
2
430
エンジニアインターン「Treasure」とHonoの2年、そして未来へ / Our Journey with Hono Two Years at Treasure and Beyond
carta_engineering
0
560
AIに淘汰されない技術力とは?事業を進化させるエンジニアの実践知 / engineering-skills-that-ai-cant-replace-and-drive-business-evolution
carta_engineering
0
170
AIは脅威でなくチャンス。 AIと共に進化するエンジニアの成長戦略 / spz-colab-conf-2025
carta_engineering
0
250
鳴り止まないアラート対応の中で学んだ 監視改善の進め方 / team-based-monitoring-improvement-from-alert
carta_engineering
0
610
撤退危機からのピボット : 4年目エンジニアがリードする TypeScript で挑む事業復活 / crisis-to-pivot-4th-year-engineer-ts-relaunch
carta_engineering
2
1.6k
4社統合におけるマスタデータ管理に立ち向かう / Towards master data management in the four-company integration
carta_engineering
0
1.2k
正解のない未知(インボイス制度対応)をフルサイクル開発で乗り越える方法 / How to overcome the unknown invoice system with full cycle development
carta_engineering
0
470
Other Decks in Technology
See All in Technology
Kiro Autonomous AgentとKiro Powers の紹介 / kiro-autonomous-agent-and-powers
tomoki10
0
510
re:Invent2025 3つの Frontier Agents を紹介 / introducing-3-frontier-agents
tomoki10
0
150
AWS CLIの新しい認証情報設定方法aws loginコマンドの実態
wkm2
6
740
ExpoのインダストリーブースでみたAWSが見せる製造業の未来
hamadakoji
0
110
プロンプトやエージェントを自動的に作る方法
shibuiwilliam
11
9.4k
AIプラットフォームにおけるMLflowの利用について
lycorptech_jp
PRO
1
160
Power of Kiro : あなたの㌔はパワステ搭載ですか?
r3_yamauchi
PRO
0
160
[JAWS-UG 横浜支部 #91]DevOps Agent vs CloudWatch Investigations -比較と実践-
sh_fk2
2
260
Database イノベーショントークを振り返る/reinvent-2025-database-innovation-talk-recap
emiki
0
200
年間40件以上の登壇を続けて見えた「本当の発信力」/ 20251213 Masaki Okuda
shift_evolve
PRO
1
130
MLflowで始めるプロンプト管理、評価、最適化
databricksjapan
1
250
意外とあった SQL Server 関連アップデート + Database Savings Plans
stknohg
PRO
0
330
Featured
See All Featured
Context Engineering - Making Every Token Count
addyosmani
9
520
Fireside Chat
paigeccino
41
3.7k
RailsConf 2023
tenderlove
30
1.3k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
22k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
9.8k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
37
6.2k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
132
19k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
9
1k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
249
1.3M
Side Projects
sachag
455
43k
Designing for humans not robots
tammielis
254
26k
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.5k
Transcript
実例と表現で学ぶWeb Components 〜"愛される"広告表現とShadowDOM〜 CARTA HOLDINGS フロントエンドエンジニア 小橋はこ(@hako584) フロントエンドカンファレンス東京 x Vue
Fes Japan コラボイベント 2025.08.25
実例と表現で学ぶWeb Components 〜"愛される"広告表現とShadowDOM〜 ねらい • Web Components がどんなものかを掴んでもらう • 世の中にこんなにWeb
Components が溢れているかを知ってもらう • “愛される” 広告表現とは? そして WebComponents 特にShadow DOMが役に立つかを実践を交えて
CARTA HOLDINGS / fluct フロントエンドエンジニア 小橋 はこ @hako584 略歴 ある日「自分をここまで育ててくれたインターネットに恩返しをしよう」
と思い立ち、アドテク企業に就職を決める。 広告業界の深層の浅瀬チャプチャプしつつ、皆が"無料のインターネット" を楽しみつつ世界よくなれ〜を模索する日々。 好きなものはかりんとう饅 頭とAngularとブラウザレンダリング周り。 過去スライド/領域 #年2回沖縄 #javascript #同人誌描き(ex) #タコライス #エッグタルト management engineering Server Data Cloud Infra Front 4000いいね!
AGENDA 01 Web Componentsの歴史とコア技術 02 実世界の採用例 / ReactやVueとの関係 03 広告×Web
Components / 愛される広告とは
01 Web Componentsの歴史とコア技術
実例と表現で学ぶWeb Components 〜"愛される"広告表現とShadowDOM〜 Web Componentsとは 3つの柱 • Custom Elements:customElements.define('my-element', class
{...}) • Shadow DOM:DOM/スタイルのカプセル化( attachShadow({mode:'open'})) • Templates/Slots:<template>, <slot> による構造再利用 期待される効果: • CSS/JSの衝突低減、再利用性、フレームワーク非依存
実例と表現で学ぶWeb Components 〜"愛される"広告表現とShadowDOM〜 Custom Element • VueやReactの ”コンポーネント”相当 ◦ 独自要素をjsで定義
◦ <my-custom> とHTML中に書く ことで、ブラウザが解釈して独自 要素をレンダリングしてくれる • 独自要素を作るだけ? ◦ そうではある ◦ React/Vueっぽいね? ◦ そうだね JSで定義 HTMLでその要素を描画
実例と表現で学ぶWeb Components 〜"愛される"広告表現とShadowDOM〜 Shadow DOM • いわゆる Scoped CSS をブラウ
ザのネイティブで実現する機能 • シャドウツリー側のCSSは切り離 されるため、外部CSSの影響を 全く受けない • ネイティブ実装のため、*{...} や img {... } のような全称セレクタ や要素セレクタの影響も受けな い ◦ 確実な分離ができる ※画像出典: MDN https://developer.mozilla.org/ja/docs/Web/API/Web_components/Using_shadow_DOM
実例と表現で学ぶWeb Components 〜"愛される"広告表現とShadowDOM〜 Templates/Slots • Vueの Slots 相当 • Reactでは
props.children 相当 • 子要素を受け渡せる ◦ 名前付きでも受け渡せる ◦ このへんは本当にVueと同じ
実例と表現で学ぶWeb Components 〜"愛される"広告表現とShadowDOM〜 • 2006–2012:jQueryプラグインと巨大 CSSの時代 ウィジェットはコピペ &グローバルJS/CSS。名前衝突・スタイル崩れ・ライフサイクル不一致が常態化。 iframeは安全だが 重く、親ページとの連携や計測が難しい。
1. 先行する “ブラウザ組み込みの部品化 ”の試み Mozilla XBL(XML Binding Language)、IEの HTML Components / behaviors(.htc)など、ベンダ固有機能で カスタム要素に振る舞いを付与。しかし互換性・保守性の壁が。 • 2011–2013:Web Components v0 提案 Shadow DOM v0 / Custom Elements v0 / HTML Templates / HTML Imports HTML自体にコンポーネントモデル 1. カプセル化 (DOM/CSSの衝突回避)配布可能性 (タグ1つでどこでも動く=広告 /決済/埋め込み向け)相互運用 (フレームワークをまたぐ共通フォーマット) アクセシビリティ内包 (部品側でARIAやフォーカス管理を設計) パ フォーマンス /安全性 (iframe依存からの脱却、境界の明確化) • 初期の紆余曲折 HTML Importsは標準から離脱 →ES Modulesへ統一。v0→v1でAPI刷新、Polyfill(ShadyDOM等)の負担が一時期課題 に。2016–2018に v1が安定実装 され実用段階へ。 • 2020-:定着のフェーズ なぜ Web Components が必要になったか(前史)
実例と表現で学ぶWeb Components 〜"愛される"広告表現とShadowDOM〜 2014→2025:かんたんな歴史 • 2014頃:v0仕様/Polymer実験期 • 2016–2018:v1仕様安定、主要ブラウザが実装 • 2020s:Lit・Stencil等のエコシステムが成熟、Design
SystemがWeb Componentsへ • 2024–2025: ◦ Declarative Shadow DOMでSSR/初期描画の課題を緩和 ◦ Vue 3ではWeb Componentsをターゲットにビルド ◦ React 19のCustom Elements強化 ◦ Scoped Custom Element Registries(進行中):名前の衝突を回避 🗣: 「いまは“実用の時代”。」
02 実世界の採用例 / ReactやVueとの関係
実例と表現で学ぶWeb Components 〜"愛される"広告表現とShadowDOM〜 実世界の採用例 : GitHub • GitHubは徐々にWeb Componentsへ 置き換わっていっています
• 特に、左上部などは全部 Web Components! • パーツごとに違う採用状況 ◦ 漸進的な採用
実例と表現で学ぶWeb Components 〜"愛される"広告表現とShadowDOM〜 実世界の採用例 : YouTube • YouTubeはかなりの部分が Web Componentsでできています。
• <ytd-*, <ytm-* 等、ほとんどが Custom Elementで作られています
実例と表現で学ぶWeb Components 〜"愛される"広告表現とShadowDOM〜 Custom Element ベースのjsだと 行数が 半分以下 & 読みやすい!
実世界の採用例 : Swiper.js • メジャーなサイトでも見る、ギャラリー用の js(Adobe, ASUS, McDonald, BYD, …) • 従来のjsベースよりもずっと読みやすく早い、 Web Components版が強い!
実例と表現で学ぶWeb Components 〜"愛される"広告表現とShadowDOM〜 React/Vue 等との関係 • React: ◦ v18以前は属性/イベント連携の扱いに癖 →
v19で改善 (Custom Elementsの受け入れが容易に) ◦ 状態管理/SSR等の強み+Web ComponentsでのUIカプセル化の組合せで利用 ▪ 他フレームワークもおよそ同様の状況 • Vue 3: ◦ defineCustomElementでSFC→Web Components化が可能 ◦ vue.config.js で isCustomElement を指定すれば外部からの導入も容易 • Angular: ◦ 最も早くからWeb Componentsを志向していた ◦ Web Components化 createCustomElement() や、プロパティバインディングも容易 • Lit/Stencil:Web Components実装専用の生産性ツール (小さなランタイム or ビルド時コンパイラ) 「“対立”ではなく“補完”」 置き換えるものではない
実例と表現で学ぶWeb Components 〜"愛される"広告表現とShadowDOM〜 いつWeb Componentsを使うべきか? 1. UI部品の「埋め込み」と「配布」をしたい ◦ サードパーティウィジェット、社内共通 UI、決済・認証ボタン(セキュア)
◦ フレームワーク横断・カプセル化 (Shadow DOM) 2. Design Systemの核 ◦ Button, Tooltip, Modal, TextField を共通化 ◦ 一旦包まれることで、各所で実装が異なるものが乱立することを防ぐ 3. マイクロフロントエンドの「独立した UI部品」として ◦ チーム間で技術を疎結合にするためのツール・明確な境界 4. コンテンツ主体のサイト( CMS、ドキュメントサイトなど)の組み込みパーツ ◦ 記事の本文中に<my-video-player video-url="..."></my-video-player>と書くだけで、動画サイトのプレ イヤーを埋め込める 5. 使いたくなったとき!
03 広告×Web Components / 愛される広告とは
実例と表現で学ぶWeb Components 〜"愛される"広告表現とShadowDOM〜 “愛される広告” • 静か:音の自動再生しない、画面がチカチカガチャガチャしない • 速い:CLS/LCPに配慮、初期負荷を最小化 • 礼儀正しい:明確な閉じる/ミュート、フォーカス管理
• 役に立つ:文脈/クリエイティブ品質、誤クリック誘発なし • 測れる:ビューアビリティ/ブランドリフト等の設計 • ・・・何より、”愛される” ! ◦ 隣の人やSNSで「ねえ見て、これ」とシェアしたくなる ◦ 新しい!楽しい! ▪ 動画や静止画などのデザイナーのこだわり部分も愛されに重要な要素だが、サイト にマッチした動きのある広告なども重要
実例と表現で学ぶWeb Components 〜"愛される"広告表現とShadowDOM〜 “愛される広告” の例 • 本当はもっとクリエイティブにこだわった実案件をお見せしたい …! ◦ 今はこれがせいいっぱい
• 「新しい!楽しい!」 の演出のため にアニメーションや透明化演出を行 う • Shadow DOMのCSS分離・レンダ リング分離で可能に • (本発表の範囲外だが) Web Animation API: WAAPI での描画 も活用 • クリエイティブ(画像や動画)も合わ せて「見たこと無い!」を演出 -> SNSでの反響は上々 ❤ ◦ 広告自体がシェアされるも のになる
実例と表現で学ぶWeb Components 〜"愛される"広告表現とShadowDOM〜 “愛される広告” • Web上のプレイアブル広告 (実際にプレイできるゲー ム広告)なども、Shadow DOM と相性が良い
◦ 分離されたレンダリングが可能 ◦ 実際にはまだまだiframeで作るケースが多い … • このようなプレイアブル広告は、いまはスマホのアプリ 向けが圧倒的に多い ◦ サイトとの連携感がもっと出せたり、遊びたいと きに全画面化なども出来るようになると楽しそ う!! ◦ まだまだアイデア段階 • 「これって広告?」って言われるようなものを!
実例と表現で学ぶWeb Components 〜"愛される"広告表現とShadowDOM〜 広告の前史 • 広告は基本、 iframeサンドボックス を利用していた ◦ 広告といえばiframeの中に出るもの…
▪ もっと古代は、 document.write で書いていた ▪ iframe + document.write なんてことも… • リッチな挙動は グローバルJS/CSS を使っていた → 体験/計測/パフォでトレードオフ。 ◦ メディア側(Webサイト側)にたくさん貼ってもらう広告タグ ◦ メディア側のCSS変更で壊れる広告(レイアウト崩れ) ◦ 演出的にどうしても、「iframeを飛び越える挙動」は必要 ▪ 衝突しまくるCSS ▪ ロードタイミングの問題で重くなりがちな DOM ▪ 分離されないDOMツリーによる構造の激しい変化 … • Shadow DOM の登場でフェーズが変わった! ◦ 衝突しないCSS分離 ◦ 共通のレンダリングツリー上での表示・非表示 (iframe不使用、軽い) ◦ 複雑すぎるz-indexからの解放・・・はまだならず ▪ とはいえ、shadow-rootについてだけ考えれば良い
実例と表現で学ぶWeb Components 〜"愛される"広告表現とShadowDOM〜 Shadow DOM が広告と相性が良い理由 • CSS衝突ゼロ設計 :Shadow DOM
+ ::part/exportpartsでホスト側カスタムも許可できる。 サイトCSSに汚染しない/されない • カプセル化と軽量化 :iframeよりも圧倒的に軽量、必要十分なサンドボックス いずれにせよ “信頼された” Webサイト・広告ベンダでだけ出すので問題ない • 遅延初期化 :IO/ROで可視時にだけ初期化。非表示時は影響なし • A11y:アクセシビリティAPI(スクリーンリーダー等)への対応も可能。iframeは読み飛ばされる 「アクセシブルな広告」も可能(責任重大だ・・・) • パフォ:iframeに比べレンダリングコンテキスト分離しないため軽い。さらに画像最適化、APNG/WEBM活用、 動画最適化、GPUフレンドリーなCSSを組み合わせることで、サイトのパフォーマンスへの影響を防ぐ
Web Components 使っていきましょう!