Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
やさしい仮想DOM
Search
Ryo Nakamura
April 25, 2019
Technology
240
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
やさしい仮想DOM
about Virtual DOM
Ryo Nakamura
April 25, 2019
More Decks by Ryo Nakamura
See All by Ryo Nakamura
楽しいProxy
ryonkmr
2
120
Other Decks in Technology
See All in Technology
Vibe Coding で作ったプロダクトをどう安全に動かすか / How to Safely Run Products Built with Vibe Coding
glidenote
0
570
「どのログを見ればいい?」 から始めた サーバーレス障害解析
y_waka1
1
150
今話題のAI「Jev」って何? 宇宙最速で学ぶ会
minorun365
PRO
33
21k
人間はどの意思決定を手放せるのか
kawasima
16
8.3k
AI感のないAWS構成図をAIエージェントに描かせたい!
sagochiko
1
370
ScotSecure West 2026 - Glasgow
raybugg
0
170
絵ではじめるKubernetesセキュリティ
aoi1
5
710
AIエージェントの一手は 誰も見ていない - Falco拡張OSS「Prempti」とeBPFで サーバーレス実行基盤を二層防御する
keitah
1
570
AI coding 整合正規方法
philipz
0
550
音声コミュニティを守るAI監視基盤_ 90%以上の入力削減を支えたServerless設計と運用判断
shuheioka123
0
100
白金鉱業Meetup Vol.25 アウトカムが二値のデータに対するCausal Impact
brainpadpr
0
300
GoのInterface内部構造から学ぶ!最高パフォーマンスを出すコード設計
yappli_developers
1
290
Featured
See All Featured
Automating Front-end Workflow
addyosmani
1369
210k
Winning Ecommerce Organic Search in an AI Era - #searchnstuff2025
aleyda
2
2.2k
The SEO Collaboration Effect
kristinabergwall1
1
570
The Spectacular Lies of Maps
axbom
PRO
1
1k
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
23k
The agentic SEO stack - context over prompts
schlessera
0
940
Design in an AI World
tapps
1
330
Faster Mobile Websites
deanohume
310
32k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
State of Search Keynote: SEO is Dead Long Live SEO
ryanjones
0
280
Organizational Design Perspectives: An Ontology of Organizational Design Elements
kimpetersen
PRO
1
830
Transcript
RyoNkmr PROJECT DATE AUTHOR 2019-04-25 ͍͞͠ԾDOM @WE ARE JAVASCRIPTERS! #31
RyoNkmr •tw: @RyoNkmr_ •GH: RyoNkmr •frontend: 3 years+
͍͞͠ԾDOM
͕ࠢ͑ΔʁੈքΛֵ໋͢Δྗʁٹੈओʁ͍ʁ
ԾDOMͬͯੌ͍
ੌ͍→ຐ๏
ຐ๏→Θ͔ΒΜ
Α͘Θ͔Βͳ͍ →ා͍
ଟগΘ͔Δ →ଟগා͘ͳ͍
͍͞͠ԾDOM
ԾDOMͱ
ԾDOM࣮ͱ
DOM TreeΛ ͱͯ͠දݱ →ԾDOM Tree
ԾDOMTreeͷมߋΛ ݩʹ࠷খݶͷDOM APIΛ ར༻࣮ͯ͠ࡍͷDOMTree ʹө͢Δ
JSX
JSX ೖΕࢠͷؔ܈ ม
JSX ೖΕࢠͷؔ܈ ม ༧Ίఆٛͨؔ͠ͷ ࣮ͷΓ ԾDOM ԾDOM Tree
JSX ೖΕࢠͷؔ܈ ม ༧Ίఆٛͨؔ͠ͷ ࣮ͷΓ ԾDOM ԾDOM Tree (ҙͷλΠϛϯάͰ) DOM
API Λར༻ͯ͠ DOM ʹө
JSX ೖΕࢠͷؔ܈ ม ༧Ίఆٛͨؔ͠ͷ ࣮ͷΓ ԾDOM ԾDOM Tree (ҙͷλΠϛϯάͰ) DOM
API Λར༻ͯ͠ DOM ʹө DOM DOM Tree ϒϥβ DOM API
ʔ…
ͳΜͱͳ͘ ٕज़ཁૉΛ ཧղ͢Δ
JSX
JSX ೖΕࢠͷؔ܈ ม ༧Ίఆٛͨؔ͠ͷ ࣮ͷΓ ԾDOM ԾDOM Tree (ҙͷλΠϛϯάͰ) DOM
API Λར༻ͯ͠ DOM ʹө DOM DOM Tree ϒϥβ DOM API
JSX ೖΕࢠͷؔ܈ ม ༧Ίఆٛͨؔ͠ͷ ࣮ͷΓ ԾDOM ԾDOM Tree (ҙͷλΠϛϯάͰ) DOM
API Λར༻ͯ͠ DOM ʹө DOM DOM Tree ϒϥβ DOM API
const goodOldDays = <p style="width: 240px;”> 昔は良かったなあ </p> React.js Ͱ͓ͳ͡ΈͰ͢Ͷ
͜Ε͕
var goodOldDays = React.createElement( "p", { style: "width: 240px;" },
"昔は良かったなあ" ); ͜͏ͳΔ ※@babel/preset-react ʹ௨͚ͨͩ͠
DOM
JSX ೖΕࢠͷؔ܈ ม ༧Ίఆٛͨؔ͠ͷ ࣮ͷΓ ԾDOM ԾDOM Tree (ҙͷλΠϛϯάͰ) DOM
API Λར༻ͯ͠ DOM ʹө DOM DOM Tree ϒϥβ DOM API
JSX ೖΕࢠͷؔ܈ ม ༧Ίఆٛͨؔ͠ͷ ࣮ͷΓ ԾDOM ԾDOM Tree (ҙͷλΠϛϯάͰ) DOM
API Λར༻ͯ͠ DOM ʹө DOM DOM Tree ϒϥβ DOM API
Document Object Model
<!DOCTYPE html> <html> <head> <title>やさしいVirtualDOM</title> </head> <body> <h1>やさしいVirtualDOM</h1> <p>昔々あるところに、おじいさんとおばあさんとNull</p> </body>
</html> HTML
DOM Tree
DOM Tree p body head h1 ੲʑ ͋Δͱ͜Ζʹ… ͍͞͠ VirtualDOM
document html
JSX ೖΕࢠͷؔ܈ ม ༧Ίఆٛͨؔ͠ͷ ࣮ͷΓ ԾDOM ԾDOM Tree (ҙͷλΠϛϯάͰ) DOM
API Λར༻ͯ͠ DOM ʹө DOM DOM Tree ϒϥβ DOM API
DOM & DOM API JavaScript DOM Tree DOM API
DOM API body Լͷ̍ݸͷཁૉ͘Ε JavaScript DOM Tree DOM API
DOM API body Լͷ̍ݸͷཁૉ͘Ε JavaScript DOM Tree DOM API ͍͋Αʂ
h1 Ұஸʂ
DOM API body Լͷ̍ݸͷཁૉ͘Ε ͦͷ h1 ͷςΩετڭ͑ͯ JavaScript DOM Tree
DOM API ͍͋Αʂ h1 Ұஸʂ
DOM API body Լͷ̍ݸͷཁૉ͘Ε ͍͞͠ VirtualDOM JavaScript DOM Tree DOM
API ͍͋Αʂ h1 Ұஸʂ ͦͷ h1 ͷςΩετڭ͑ͯ
DOM API ͦΕΛ ”શʹཧղͨ͠” ʹ ॻ͖͑ͯ JavaScript DOM Tree DOM
API body Լͷ̍ݸͷཁૉ͘Ε ͍͞͠ VirtualDOM ͍͋Αʂ h1 Ұஸʂ ͦͷ h1 ͷςΩετڭ͑ͯ
ԾDOM
JSX ೖΕࢠͷؔ܈ ม ༧Ίఆٛͨؔ͠ͷ ࣮ͷΓ ԾDOM ԾDOM Tree (ҙͷλΠϛϯάͰ) DOM
API Λར༻ͯ͠ DOM ʹө DOM DOM Tree ϒϥβ DOM API
JSX ೖΕࢠͷؔ܈ ม ༧Ίఆٛͨؔ͠ͷ ࣮ͷΓ ԾDOM ԾDOM Tree (ҙͷλΠϛϯάͰ) DOM
API Λར༻ͯ͠ DOM ʹө DOM DOM Tree ϒϥβ DOM API
ԾDOM ԾDOM JavaScript
ϫγͷ৺ͷதʹ͋Δ DOM ԾDOM ԾDOM JavaScript
JSX ೖΕࢠͷؔ܈ ม ༧Ίఆٛͨؔ͠ͷ ࣮ͷΓ ԾDOM ԾDOM Tree (ҙͷλΠϛϯάͰ) DOM
API Λར༻ͯ͠ DOM ʹө DOM DOM Tree ϒϥβ DOM API
JSX ೖΕࢠͷؔ܈ ม ༧Ίఆٛͨؔ͠ͷ ࣮ͷΓ ԾDOM ԾDOM Tree (ҙͷλΠϛϯάͰ) DOM
API Λར༻ͯ͠ DOM ʹө DOM DOM Tree ϒϥβ DOM API
ԾDOMΛDOMʹө͢Δ
ઃܭॻΛ࣮ʹө͢Δ
DOM Tree DOM API ϫγͷ৺ͷதʹ͋Δ DOM ԾDOMΛDOMʹө͢Δ JavaScript ԾDOM
DOM Tree DOM API JavaScript ԾDOM <section> Λ࡞ͬͯ <h1>ͱ<p>Λࢠཁૉͱ ͯ͠࡞ͬͯೖΕͯ…
ԾDOMΛDOMʹө͢Δ
ԾDOMΛDOMʹө͢Δ ͨͷΉͰ DOM Tree DOM API JavaScript ԾDOM
ͨͷΉͰ ԾDOMΛDOMʹө͢Δ ͍͋Αʂ DOM Tree DOM API JavaScript ԾDOM
ԾDOMΛDOMʹө͢Δ ͏͓͓͓͓͓͓͓ DOM Tree DOM API JavaScript ԾDOM
ԾDOMΛDOMʹө͢Δ ࢦࣔͲ͓ΓͰ͖ͨ DOM Tree DOM API JavaScript ԾDOM
ԾDOMΛDOMʹө͢Δ ͋ͬ͟͢ʂ ࢦࣔͲ͓ΓͰ͖ͨ JavaScript ԾDOM DOM Tree DOM API
͋ͬ͟͢ʂ ԾDOMΛDOMʹө͢Δ ᘳͩ JavaScript ԾDOM DOM Tree DOM API
ԾDOMͷมߋࠩͱ ࠷খݶͷDOM APIͷར༻
ԾDOM ͷมߋࠩΛΈͯ ࠷খݶ ͷ DOM API Λ͏ JavaScript ԾDOM ؾ͕มΘͬͨ
DOM Tree DOM API
ԾDOM ͷมߋࠩΛΈͯ ࠷খݶ ͷ DOM API Λ͏ ԾDOM JavaScript ؾ͕มΘͬͨ
DOM Tree DOM API
ԾDOM ͷมߋࠩΛΈͯ ࠷খݶ ͷ DOM API Λ͏ ༿ͷ৭ͱ ΩϥΩϥ͚ͩมΘΔ ͜͜Λ͜ͷ৭ʹ
(ଞ৮Εͳ͍) ԾDOM JavaScript DOM Tree DOM API
ԾDOM ͷมߋࠩΛΈͯ ࠷খݶ ͷ DOM API Λ͏ ͍͋Αʂ ԾDOM JavaScript
DOM Tree DOM API
ԾDOM ͷมߋࠩΛΈͯ ࠷খݶ ͷ DOM API Λ͏ ͋ͬ͟͢ʂ ࢦࣔͲ͓ΓͰ͖ͨ ԾDOM
JavaScript DOM Tree DOM API
jQueryͱซ༻͢Δͳͬͯ ͍ΘΕΔύλʔϯ
DOM Tree DOM API উखʹফͨ͠Ζ͆ ผਓ֨ jQuery JavaScript ԾDOM
DOM Tree DOM API JavaScript ԾDOM ผਓ֨ jQuery উखʹফͨ͠Ζ͆ ʢ͋Εʁϫγͷ
ҙࢥʹͯ͠ ମ͕উखʹʣ ফͯ͘͠Ε
͍͋Αʂ DOM Tree DOM API JavaScript ԾDOM ผਓ֨ jQuery উखʹফͨ͠Ζ͆
DOM Tree DOM API JavaScript ԾDOM ผਓ֨ jQuery ফͤͳ͍ࠜͬ͜ Ҏ֎ফͨ͠
DOM Tree DOM API ফͤͳ͍ࠜͬ͜ Ҏ֎ফͨ͠ ϫϩλ JavaScript ԾDOM ผਓ֨
jQuery
ԾDOM ͷมߋࠩΛΈͯ ࠷খݶ ͷ DOM API Λ͏ ؾ͕มΘͬͨ ʢਖ਼ؾʣ DOM
Tree DOM API JavaScript ԾDOM ผਓ֨ jQuery
༿ͷ৭ͱ ΩϥΩϥ͚ͩ มΘΔ ͜͜Λ͜ͷ৭ʹ (ଞ৮Εͳ͍) ԾDOM ͷมߋࠩΛΈͯ ࠷খݶ ͷ DOM
API Λ͏ DOM Tree DOM API JavaScript ԾDOM ผਓ֨ jQuery
ԾDOM ͷมߋࠩΛΈͯ ࠷খݶ ͷ DOM API Λ͏ ͍͋Αʂ DOM Tree
DOM API JavaScript ԾDOM ผਓ֨ jQuery
༿ͬͺ͕ ͳ͍Αʂ ແཧʂ ԾDOM ͷมߋࠩΛΈͯ ࠷খݶ ͷ DOM API Λ͏
DOM Tree DOM API JavaScript ԾDOM ผਓ֨ jQuery
DOM Tree DOM API JavaScript ԾDOM ผਓ֨ jQuery
jQuery ͷ DOM ૢ࡞ͱ ซ༻͢ΔͱյΕΔ
·ͱΊ
ԾDOMΛݩʹ DOMʹө͢Δ࣮ 1. σʔλˠදࣔ
ԾDOMͷมԽͷ͔ࠩΒ શମΛߋ৽͢ΔͷͰͳ͘ ඞཁͳ෦ͷΈө͢Δ 2. ࠩߋ৽
JSX ೖΕࢠͷؔ܈ ม ༧Ίఆٛͨؔ͠ͷ ࣮ͷΓ ԾDOM ԾDOM Tree (ҙͷλΠϛϯάͰ) DOM
API Λར༻ͯ͠ DOM ʹө DOM DOM Tree
طଘͷ খ͞ΊͷVDOM࣮ ϥΠϒϥϦΛࢀߟʹ
࣮ͯ͠ΈΔͱ ຐ๏͡Όͳͯ͘ ׂͱటष͍͜ͱΛ ͬͯΔͷ͕Θ͔Δͱ ࢥ͍·͢
࡞ͬͯΈΑ͏ʂ VirtualNeko (https://github.com/RyoNkmr/vdom)
ࣗ࡞ϑϨʔϜϫʔΫΛֶͭͬͯ͘Ϳ ԾDOM࣮ફೖ | Black Everyday Company (https://kuroeveryday.blogspot.com/2018/11/how-to- create-virtual-dom-framework.html) ࢀߟ HyperApp
(https://github.com/jorgebucaran/hyperapp)
͝ਗ਼ௌ ͋Γ͕ͱ͏ ͍͟͝·ͨ͠