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
やさしい仮想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
RAG を使わないという選択肢
tatsutaka
1
190
プロダクト開発から業務改善コンサルまで。事業全体へ「染み出す」ことで広がるエンジニアの可能性
ham0215
0
100
AmazonRoute 53ではじめてのドメイン取得!HTTPS化までの道のりを整理してみた
usanchuu
3
130
AWSシリコン最前線 〜AI時代のチップ選択を読み解く〜
htokoyo
2
470
2026TECHFRESH畢業分享會 - 原生還是跨平台? App 開發踩坑實錄
line_developers_tw
PRO
0
820
Amazon Bedrock AgentCore ワークショップ JAWS UG TOHOKU / amazon-bedrock-agentcore-workshop-jawsug-tohoku-2026
gawa
9
690
AI駆動開発を通して感じた、 AI時代のデザイナーの役割変化
whisaiyo
0
250
[モダンアプリ勉強会]今更聞けないGit/GitHub入門
tsukuboshi
0
370
NAB Show 2026 動画技術関連レポート / NAB Show 2026 Report
cyberagentdevelopers
PRO
0
170
就職⽀援サービスにおけるキャリアアドバイザーのシフトスケジューリング
recruitengineers
PRO
1
140
10倍の生産性を実現するAI駆動並列エージェントのすべて
kumaiu
5
1.3k
あなたの AI ワークスペースに、 専門コーダーを連れてくる - Amazon Quick Desktop 最新情報
kawaji_scratch
1
130
Featured
See All Featured
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
31
3.2k
State of Search Keynote: SEO is Dead Long Live SEO
ryanjones
0
200
Music & Morning Musume
bryan
47
7.2k
Max Prin - Stacking Signals: How International SEO Comes Together (And Falls Apart)
techseoconnect
PRO
0
180
Code Reviewing Like a Champion
maltzj
528
40k
Primal Persuasion: How to Engage the Brain for Learning That Lasts
tmiket
0
360
The browser strikes back
jonoalderson
0
1.2k
The Hidden Cost of Media on the Web [PixelPalooza 2025]
tammyeverts
2
330
Skip the Path - Find Your Career Trail
mkilby
1
140
Agile Leadership in an Agile Organization
kimpetersen
PRO
0
160
Hiding What from Whom? A Critical Review of the History of Programming languages for Music
tomoyanonymous
2
850
We Have a Design System, Now What?
morganepeng
55
8.2k
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)
͝ਗ਼ௌ ͋Γ͕ͱ͏ ͍͟͝·ͨ͠