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
picodomでVDOMの理解を深める
Search
takanorip
January 25, 2018
Technology
440
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
picodomでVDOMの理解を深める
takanorip
January 25, 2018
More Decks by takanorip
See All by takanorip
AI-Slopなデザインを生まないためのデザインプロセス戦略
takanorip
10
6k
「見せる」登壇資料デザインの極意
takanorip
7
1.6k
Design System Documentation Tooling 2025
takanorip
3
3k
デザインエンジニアの延長にデザインマネージャーとしての可能性を探る
takanorip
1
1.3k
Tools for Design Engineers other than LLM in the LLM era
takanorip
1
890
Bulletproof Design System with TypeScript
takanorip
7
5.4k
Eleventy3.0 で始める爆速個人ブログ開発!
takanorip
0
320
Webフォント選定の極意!フォントの基本から最新トレンドまで徹底解説
takanorip
6
1.2k
効果的な管理画面を デザインをするために 避けるべき5つの罠
takanorip
15
8k
Other Decks in Technology
See All in Technology
Von-Neumann Machines, Dreams & The Futures of IT
ufried
0
130
aws-iot-platform-architecture-use-cases.pdf
ma2shita
0
560
白金鉱業Meetup Vol.25 アウトカムが二値のデータに対するCausal Impact
brainpadpr
0
290
事業課題から技術的負債に向き合う
sansantech
PRO
2
2.3k
積み重なった技術負債への挑戦 〜初手としての全社ゴト化〜
techtekt
PRO
0
1.6k
Oracle Cloud Network Path Analyzerを試してみた/I Tried Out Oracle Cloud Network Path Analyzer
masakiokuda
1
110
Why Agent Cost Needs Observability
nttcom
0
140
アクセスキーこわい やめかたと漏らさない工夫
sassssan68
1
670
開発投資の期待値を上げるプロダクトロードマップづくり ~プロダクトエンジニアが越境して事業を伸ばす~
kekekenta
1
240
AIエージェントの権限管理 3: Agentic RAG の Fine grained access control 編
ren8k
0
230
Cloudflare Workers 向けアプリを C# で構築する ~WASM Native AOT への道~
nenonaninu
1
1.3k
C#未経験の僕がAIに読めるコードを書かせるまで
maguroalternative
0
250
Featured
See All Featured
Applied NLP in the Age of Generative AI
inesmontani
PRO
4
2.5k
From Legacy to Launchpad: Building Startup-Ready Communities
dugsong
0
340
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
360
31k
Game over? The fight for quality and originality in the time of robots
wayneb77
1
290
Product Roadmaps are Hard
iamctodd
55
13k
The SEO identity crisis: Don't let AI make you average
varn
0
560
Unsuck your backbone
ammeep
672
58k
Why You Should Never Use an ORM
jnunemaker
PRO
61
10k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.8k
How to optimise 3,500 product descriptions for ecommerce in one day using ChatGPT
katarinadahlin
PRO
3
3.8k
Claude Code どこまでも/ Claude Code Everywhere
nwiizo
67
58k
svc-hook: hooking system calls on ARM64 by binary rewriting
retrage
2
580
Transcript
picodomでVDOMの 理解を深める Takanori Oki @Megro.es
自己紹介 • 大木 尊紀(オオキ タカノリ) / @takanorip • 株式会社スマートドライブ •
フロントエンドエンジニア • React、Vue、Polymer、Web制作全般 • Polymer Japan 翻訳チーム • 「イヌでもわかる Web Components」 好評配信中 • 輝夜月かわいい
Polymer Japan Cafe (2月6日@Google Tokyo Office)
hyperapp コードリーディング会 (2月7日@チームスピリット)
picodom ?
picodom • VDOMでページを操作するJSライブラリ • 1kbしかない、軽い • hyperappのJorgeBucaranさんが書いてる • 提供するメソッドは2つだけ •
h():VDOMを生成する • patch():VDOMへ差分適用 • JSXが使える
なんでpicodom? • Fish shellのファンだから(JorgeBucaranさんはFish shellの開発者でもある) • hyperappよりも機能が絞られているから読みやすいか なと思った • VDOMの実装だけ読みたかった
• picodom使ってオレオレライブラリ作れたら面白そう
picodomを読む
構成とか • picodomの構成 • h.js:h()の定義 / 29行 • patch.js:patch()を定義 /
206行 • (index.jsは↑2つのファイルをimportしてるだけ)
picodomを読む: h() • VDOMを生成する • DOM構造をオブジェクトに変換する (VODMはオブジェクト) • めっちゃシンプルなので言うことない •
Reactとかとやってることはだいたい同じ
h("div", {id: 'app'}, [ h("h1", {class: 'title'}, 'Title'), h("button", {
onclick: () => {hoge: 'fuga'} }, "+"), 'some text' ]);
{ name: "div", props: { id: "app" }, children: [
{ name: "h1", props: { class : "title" }, children: ["Title"] }, { name: "button", props: { onclick: () => {hoge: 'fuga'} }, children: ["+"] }, "some text" ] }
picodomを読む: patch() patch patchElement setElementProp removeChildren createElement updateElement setElementProp oldNode
== null patchElement true false
picodomを読む: patch() patch patchElementの結果を返す patchElement 差分更新の処理を司る setElementProp elementにpropsを挿入する createElement document.createElementを使って
elementを作成する updateElement elementのvalueやpropsを更新する removeChildren elementを削除する
picodomを使う
import { h, patch } from picodom /** @jsx h
*/ let node function render(view, withState) { patch(node, (node = view(withState))) } function view(state) { return ( <div> <h1>{state}</h1> <input autofocus type="text" value={state} oninput={e => render(view, e.target.value)} /> </div> ) } render(view, "Hello!")
まとめ • 軽量なVDOMフレームワーク • 仮想DOMの仕組みがなんとなくわかった • コア機能のみの実装で、実装はとてもシンプル • picodomベースでオレオレフレームワークをつくる本 を書いてみたい
おわり (Rounded-L Mgen+ 2p)