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
picodomでVDOMの理解を深める
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
takanorip
January 25, 2018
Technology
430
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
「見せる」登壇資料デザインの極意
takanorip
4
1.1k
Design System Documentation Tooling 2025
takanorip
3
2.8k
デザインエンジニアの延長にデザインマネージャーとしての可能性を探る
takanorip
1
1.1k
Tools for Design Engineers other than LLM in the LLM era
takanorip
1
790
Bulletproof Design System with TypeScript
takanorip
7
5.2k
Eleventy3.0 で始める爆速個人ブログ開発!
takanorip
0
300
Webフォント選定の極意!フォントの基本から最新トレンドまで徹底解説
takanorip
6
1.1k
効果的な管理画面を デザインをするために 避けるべき5つの罠
takanorip
15
7.9k
社内管理画面のデザインもプロダクトデザイン
takanorip
5
2.3k
Other Decks in Technology
See All in Technology
実装だけじゃない! CCA-F取得エンジニアが教えるClaude Code開発プロセス活用術
diggymo
2
730
オブザーバビリティ、本当に活用できてる? 〜API連携×生成AIで成熟度を自動評価〜
dmmsre
1
3.2k
Gen3R: 3D Scene Generation Meets Feed-Forward Reconstruction
spatial_ai_network
0
130
インフラと開発の垣根を超えていき!〜元AWSインフラエンジニアがAWS開発で奮闘している話〜
hatahata021
3
190
ガバナンスの「ちょうどいい落とし所」を探れ!開発スピードを妨げない運用判断の勘所 / SRE NEXT 2026
genda
1
130
AI Agent SaaS を支える自社仮想化基盤への挑戦と実運用 / ai-agent-saas-virtualization
flatt_security
2
3.9k
しくみを学んで使いこなそう GitHub Copilot app
torumakabe
2
250
最適な自走を最小限の支援で — M&Aで拡大する組織で少人数SREが挑んだ1年 / SRE NEXT 2026
genda
0
1.2k
「最後に責任を取るのはチーム」— 人間のPRレビューを最小化してアップデートしたメンタルモデル
jnishime_dresscode
0
700
プロダクトだけじゃない、社内プロセスにおける自動化・省力化ノススメ
kakehashi
PRO
1
3.8k
Devsumi 2026 Summer 人もAIも使える共通基盤を事業の加速装置にする~デザインシステム運用に学ぶ組織レバレッジ~ 渡辺 凌央
legalontechnologies
PRO
0
140
Compose 新機能総まとめ / What's New in Jetpack Compose
yanzm
0
260
Featured
See All Featured
Tell your own story through comics
letsgokoyo
1
990
Utilizing Notion as your number one productivity tool
mfonobong
4
390
We Have a Design System, Now What?
morganepeng
55
8.2k
DBのスキルで生き残る技術 - AI時代におけるテーブル設計の勘所
soudai
PRO
67
56k
Visualization
eitanlees
152
17k
Ethics towards AI in product and experience design
skipperchong
2
330
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
230
23k
Agile Leadership in an Agile Organization
kimpetersen
PRO
0
190
Digital Projects Gone Horribly Wrong (And the UX Pros Who Still Save the Day) - Dean Schuster
uxyall
1
1.9k
Java REST API Framework Comparison - PWX 2021
mraible
34
9.5k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
12
1.2k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
37
6.5k
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)