結論から言うと、Vue 3.6 の Vapor Mode(ベイパーモード)は「コンポーネントに vapor と1語書き足すだけで、仮想DOMを使わない高速なコンポーネントに切り替わる」新しいコンパイルモードです。

テンプレートも Composition API もそのまま。それでいて出力されるコードは仮想DOMの差分計算を一切行わず、リアクティブな値が変わった箇所のDOMだけを直接更新します。

この記事では、2026年7月時点の最新プレリリース(v3.6.0-beta.17)を前提に、Vapor Mode の仕組み・使い方・既存アプリとの混在方法・現時点の制約・今すぐ試す手順までを一気に解説します。

独学に限界を感じたら

プログラミング教室がおすすめ。挫折せず最短で実力を伸ばせます。

PR

Vapor Modeとは——仮想DOMを使わないVue

これまでの Vue は、テンプレートを「仮想DOMを生成する render 関数」にコンパイルし、状態が変わるたびに新旧の仮想DOMツリーを比較(diff)して実DOMへ反映してきました。この方式は柔軟な一方、更新のたびにツリーの生成と比較というオーバーヘッドを支払います。

Vapor Mode はこの前提を捨てます。

コンパイラがテンプレートを解析した時点で「どのリアクティブな値が、DOMのどこに反映されるか」は分かっているので、仮想DOMを経由せず「実DOMを直接生成し、値が変わったらその箇所だけをピンポイントで更新するコード」を出力します。

Solid や Svelte 5 が採用しているのと同じ、いわゆるファイングレインド(細粒度)な更新戦略です。

  • 仮想DOMの生成・diff・patch が丸ごと不要になり、実行時のCPU負荷とメモリ確保が減る
  • アプリ全体を Vapor 化すれば仮想DOMランタイム自体をバンドルから落とせるため、配信サイズも小さくなる
  • 公式リリースノートによれば、サードパーティのベンチマークで Solid や Svelte 5 と同等の性能に到達している

重要なのは、これが「新しいフレームワーク」ではなく「同じVueの別コンパイルモード」だという点です。書き味は今までのVueのままで、速さだけを取りに行けます。

2026年7月時点のリリース状況

執筆時点(2026年7月12日)の状況を整理しておきます。ここは時間とともに変わるので、導入判断の前に必ず公式リリースを確認してください。

  • 安定版の最新は Vue 3.5.39(2026年6月25日リリース)
  • Vue 3.6 はベータ版で、最新は v3.6.0-beta.17(2026年6月24日リリース)。3.6 の安定版はまだ出ていない
  • Vapor Mode は「機能的には完成(feature-complete)」と公式がアナウンス済みで、Suspense を除き仮想DOMモードの安定機能とパリティがある
  • ただし公式も beta の Vapor Mode を unstable(不安定)と位置づけており、本番導入はまだ推奨されていない

また Vue 3.6 では Vapor Mode 以外にも、リアクティビティシステムが alien-signals ベースに刷新されており、Vapor を使わない既存アプリでも性能とメモリ使用量の改善が見込めます。3.6 は「Vapor だけのリリース」ではない点も押さえておきましょう。

使い方は1語——script setup に vapor を足すだけ

単一ファイルコンポーネント(SFC)で Vapor Mode を有効にする方法は驚くほどシンプルで、<script setup>vapor 属性を足すだけです。

<script setup vapor>
import { ref, computed } from 'vue'

const count = ref(0)
const double = computed(() => count.value * 2)
</script>

<template>
  <button @click="count++">
    count: {{ count }} / double: {{ double }}
  </button>
</template>

refcomputedwatch も、テンプレート構文もこれまで通りです。変わるのはコンパイル結果だけで、このコンポーネントは仮想DOMを一切生成せず、count が変わったときにボタン内のテキストノードだけを直接書き換えるコードになります。

「移行コストは新しいAPIの学習」ではなく「属性1語」というのが Vapor Mode の最大の設計上の勝利です。コンポーネント単位で有効化できるので、パフォーマンスが効く画面(巨大なリスト、高頻度更新のダッシュボードなど)だけを選んで Vapor 化する、という戦略が取れます。

アプリ全体をVaporにする/既存アプリと混在させる

エントリーポイント側には2つの選択肢があります。まず、すべてのコンポーネントを Vapor で書く新規アプリなら createVaporApp を使います。これで仮想DOMランタイムをバンドルから完全に除外できます。

// main.js —— Vapor 専用アプリ(仮想DOMランタイムをバンドルしない)
import { createVaporApp } from 'vue'
import App from './App.vue'

createVaporApp(App).mount('#app')

一方、既存の仮想DOMベースのアプリに Vapor コンポーネントを段階的に混ぜたい場合は、従来どおり createApp を使い、vaporInteropPlugin を登録します。

// main.js —— 既存アプリに Vapor コンポーネントを混在させる
import { createApp, vaporInteropPlugin } from 'vue'
import App from './App.vue'

createApp(App).use(vaporInteropPlugin).mount('#app')

この相互運用(interop)レイヤーがあるおかげで、「まずは重い一覧画面のコンポーネントだけ Vapor 化して様子を見る」という現実的な移行パスが成立します。既存の Vue 3 コードベースを壊さずに導入できるのは、同規模のフレームワークが仮想DOM脱却に踏み切った例として異例です。

現時点の制約——書けないもの・動かないもの

beta.17 時点で把握しておくべき制約をまとめます。ここを知らずに既存コンポーネントへ機械的に vapor を付けると事故ります。

  • Options API は使えない(script setup 専用。手書きの setup() 関数も対象外)
  • Suspense は Vapor 専用モードでは使えない。Suspense に依存するツリーは仮想DOM側に残す必要がある
  • getCurrentInstance() は Vapor コンポーネント内では null を返すため、これに依存するライブラリは動かない可能性がある
  • カスタムディレクティブはインターフェースが変わる(仮想DOM前提の created/beforeUpdate 等のフック構造がそのままでは使えない)
  • 仮想DOMコンポーネント側から Vapor のスロットを slots.default() のように関数呼び出しすることはできず、renderSlot 経由が必要になる

逆に言えば、script setup + Composition API で書かれた自己完結的なコンポーネントであれば、そのまま Vapor 化できる可能性が高いということです。2020年以降のモダンな書き方に寄せてきたコードベースほど移行が楽になります。

今すぐ試す2つの方法

ローカル環境を汚さずに触るなら公式 Playground、手元のプロジェクトで試すならプレリリース版のインストールです。

  1. 公式の SFC Playground(play.vuejs.org)で Vue のバージョンを 3.6 系のプレリリースに切り替え、script setup に vapor を付けて挙動を確認する
  2. 検証用プロジェクトに beta を直接インストールする(バージョンを固定して入れるのが確実)
# 検証用プロジェクトに Vue 3.6 beta を導入(2026年7月時点の最新 beta)
npm install vue@3.6.0-beta.17

beta はマイナーごとに挙動が変わり得るため、package.json ではキャレット(^)を付けずバージョンを固定し、本番プロジェクトとは別リポジトリまたは別ブランチで検証するのがおすすめです。

まとめ——いつVaporに乗るべきか

Vapor Mode は「Vueの書き味のまま、Solid級の実行性能を手に入れる」ための、Vue史上もっとも大きなランタイム刷新です。しかも既存コードとの互換性を保ったまま、コンポーネント単位で段階導入できます。

  • 今すぐ本番投入:まだ早い。3.6 は beta で、公式も Vapor を unstable と明言している
  • 今やるべきこと:Playground や検証ブランチで触っておく。Options API が残っているなら script setup への移行を進めておくと、Vapor 対応がほぼゼロコストになる
  • 3.6 安定版リリース後:高頻度更新の画面や巨大リストなど、性能がボトルネックのコンポーネントから段階的に vapor を付けていくのが現実的

React が React Compiler で「仮想DOMを賢く使う」方向に進んだのに対し、Vue は「仮想DOMそのものを卒業する」道を選びました。フレームワーク選定の観点でも2026年の大きな分岐点になるはずです。React と Vue の設計思想の違いは、こちらの記事も参考にしてください。

Vue.jsとReactどっち?Vueを選ぶべき会社Top3【2026年版】Vue.jsとReactの技術選定で迷ったら、優劣ではなく会社の体制で決めるのが正解です。Vueを採用すべき会社の特徴Top3を現役エンジニアが解説。「VueはTypeScriptと相性が悪い」が過去の話になった理由もVue 3時代の最新事情で解説します。frontendlab.magicgifted.com