6
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ReactとVue、結局どっちが"賢い"の?仮想DOMの中身から考えてみた

Last updated at Posted at 2025-06-22

React / Vue の「仮想DOMの仕組み」と「設計思想の違い」をざっくり整理する

フロントエンドの文脈でよく出てくる「仮想DOM」という言葉。
ReactもVueも使っているけど、「結局どう違うの?」と思うことはないでしょうか。

この記事では、仮想DOM が生まれた背景と、React/Vue の考え方の違いを整理してみました。

DOM と 仮想DOM の関係

DOM は JavaScript の DOM APIで更新します。
ただし、画面への描画はすぐには行われず、ブラウザが次のフレーム(約16ms間隔)でまとめてバッチ処理されます

※ DOMってそもそも何?という方はこちらの記事も参考になるかもしれません →

function changeColor(newColor) {
  const elem = document.getElementById("para");
  elem.style.color = newColor;
}

このように変更しても、すぐに画面が再描画されるわけではなく、内部的に「次のタイミングで処理しよう」とキューに積まれます。

DOMの欠点

  • 差分がなくてもとりあえず全部処理される
  • 操作コストが高く、パフォーマンス面で不利

この欠点を補うために登場したのが 仮想DOM(Virtual DOM) です。

仮想DOMとは?

仮想DOMは、「画面の状態」をメモリ上に再現しておき、差分だけを本物のDOMに反映する仕組みです。

たとえば、カウンタボタンを押したとき:

  1. 変更前の仮想DOMを保存しておく
  2. 新しい仮想DOMを構築
  3. 前後の差分(diff)を比較し、必要な部分だけ本物のDOMに反映

この仕組みにより、DOM 操作の負担を最小限に抑えられます。

React の設計思想

  • UI は「状態に対する関数」として設計する
  • 状態変更(=再描画)を明示的に制御する
  • 一方向データフローにより副作用を減らす
const [count, setCount] = useState(0);

setCount() の呼び出しによって、新しい仮想DOMが構築され、前の状態との差分がレンダリングされます。

React は「すべてを一度再実行して差分を取る」というスタンスで、
「冪等で速ければ何度実行してもいい」 という思想に立っています。

Vue の設計思想

  • UI・ロジック・スタイルを1ファイルにまとめて管理しやすく
  • refreactive によって状態の変化を追跡
  • 依存関係を自動的に記録して、必要な箇所だけ再描画
const count = ref(0);

Vueは状態の追跡を Proxy によって自動的に行う ため、仮想DOMを更新する対象を最初から絞ることができます。

「そもそも全部比較するのは無駄」という発想です。

仮想DOMの更新効率は?

比較項目 React Vue
差分抽出方法 全体を再構築 → 差分を比較 変更箇所を事前に検知して差分
自動追跡 なし(useStateなど明示) あり(Proxyベース)
処理効率 実装が単純で予測可能 効率は高いが、仕組みが複雑になりやすい

Vue の方が効率的に見えますが、その分ロジックは複雑になっています。
どちらが優れているかは一概に言えず、「実装のシンプルさ」「学習コスト」「拡張性」など、開発者体験全体を含めて選ぶべきポイントです。

状態を変えても画面が変わらない場合

ReactもVueも、「状態が変わった」とライブラリに伝えないと描画は更新されません。

  • ReactでuseStateを使わなかった場合
  • Vueでrefreactiveを使わなかった場合

内部の値は変わっても、画面は変わりません。
状態変更の通知が「仮想DOM更新」のトリガーです。

まとめ:React / Vue の設計思想比較

観点 React Vue
UIの捉え方 状態に対する関数 UI・ロジック・スタイルの統合
状態管理 明示的(Hook)で制御 自動追跡(ref / reactive)
描画の定義 JSXベースのロジック主導 template中心の構造主導
学習スタイル 自由に組み合わせる 最初から整ったフレームワーク
エコシステム 状態管理やルーティングは選定自由 公式エコシステムが豊富で統一感がある

おわりに

仮想DOMはどちらのライブラリでも中心的な仕組みですが、「何を重視しているか」によってその使い方や設計方針が異なります。

  • 状態とUIの関係を純粋に保ちたい → React
  • わかりやすさや統一感を重視したい → Vue

自分に合ったスタイルや、プロジェクトの要求に応じて選べると良いですね。

6
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?