IT用語
(
ひよぺん
)
Home
コラム
用語集
About
検索
Ctrl K
Esc
見つかりませんでした
調べたいIT用語を入力してね
仮想DOM
かそうどむ
プログラミング
用語集
› 💻 プログラミング › 仮想DOM
【かそうどむ】
仮想DOM とは?
最終更新:
2026年4月18日
💡 本番の舞台に出る前に「リハーサル」する仕組み
📌 このページのポイント
React
が採用したことで広まった、
UI
の効率的な更新手法
状態が変わると新しい仮想
DOM
を作り、前回の仮想
DOM
と比較(差分検出=diffing)する
差分だけを実
DOM
に反映(パッチ適用)するので、不要な再描画を避けられる
開発者は
DOM
操作を意識せず「今の状態に対応する
UI
の見た目」を宣言的に書ける
仮想DOMの差分検知(Diffing)
① 旧 仮想DOM
② 新 仮想DOM
③ 実DOM更新
<div>
<h1>A
<p>B
<div>
<h1>A
<p>C
変更!
<div>
<h1>A
<p>C
更新!
Diff
Patch
仮想DOMの仕組み
状態変更
setState等
新仮想DOM生成
JSオブジェクト
差分検出
Diffアルゴリズム
最小更新
実DOM反映
変更のあった箇所だけを実DOMに反映するため高速
React・Vueなどのフレームワークで採用
仮想DOMは差分のみを実DOMに反映し、効率的にUIを更新する
ひよこ
なんでわざわざコピーを作るの?
ペンギン先生
実
DOM
の操作は描画の再計算を伴うのでコストが高い。仮想
DOM
はただの
JavaScript
オブジェクト
なので高速に比較できる。「どこが変わったか」を軽い
オブジェクト
同士で見つけてから、必要な部分だけ実
DOM
を触る。
ひよこ
仮想
DOM
があれば必ず速くなるの?
ペンギン先生
実はそうでもない。シンプルな変更なら直接
DOM
操作のほうが速いこともある。仮想
DOM
の真の価値は速度よりも「宣言的に
UI
を書ける」という開発体験の良さ。
Svelte
のように仮想
DOM
を使わない
フレームワーク
も高速に動いている。
ひよこ
React
のre-renderと仮想
DOM
の関係は?
ペンギン先生
React
の
コンポーネント
がre-renderされると新しい仮想
DOM
が生成され、前回のものと差分比較される。差分があった箇所だけ実
DOM
が更新される。だからre-render自体は軽い処理で、実
DOM
の変更を最小限に抑えてくれる。
ひよこ
React
の仮想
DOM
と
Svelte
のコンパイルアプローチ、どっちが優れているの?
ペンギン先生
一長一短だよ。仮想
DOM
は「
ランタイム
で差分計算」するから柔軟性が高く、複雑な
UI
の動的更新に強い。
Svelte
は「ビルド時に
コンパイル
」して直接
DOM
操作コードを生成するから、
ランタイム
の
オーバーヘッド
がゼロに近い。小〜中規模なら
Svelte
の方がバンドルサイズが小さく高速、大規模で
エコシステム
が重要なら
React
の方が選択肢が豊富だね。
ひよこ
React
Fiberって仮想
DOM
の進化版なの?
ペンギン先生
そうだよ。
React
16で導入されたFiber
アーキテクチャ
は仮想
DOM
の差分計算を「中断可能」にしたんだ。従来は差分計算が始まると完了するまでメインスレッドをブロックしていたけど、Fiberは作業を細分化してフレーム間の隙間で少しずつ処理できる。これによりユーザー入力への応答性が大幅に改善された。
React
18のConcurrent Featuresもこの仕組みの上に成り立っているんだよ。
まとめ:ざっくりこれだけ覚えればOK!
仮想
DOM
って出てきたら「変更箇所だけを効率よく画面に反映する仕組み」と思えばだいたいOK!
📖 おまけ:英語の意味
「virtual DOM」
= 仮想的なDOM
💬 virtual は「仮想の、実体のない」という意味で、メモリ上にだけ存在するDOMのコピーを指す
🔗 あわせて読みたい
DOM(ドキュメントオブジェクトモデル) とは?
副作用 とは?
状態管理 とは?
シェアする
X
URLコピー
← 用語集にもどる