- 技術 💻
Vite+とは|1.0の使い方と素のViteとの違いを実測
結論
Vite+(ヴィートプラス)は、Vite・Vitest・Oxlint・Oxfmt・tsdown・タスクランナーを、1つの vp コマンドと1つの vite.config.ts にまとめた Web 開発用のツールチェーンです。2026年9月28日に初の安定版 1.0 が出て、MIT ライセンスで無料です。Vite の代わりではなく、Vite の上にテスト・リント・フォーマット・ライブラリのビルドまで載せたものです。
この記事でわかること
- vp create から dev・check・test・build・run・pack まで、全部を動かした出力
- 素の Vite+ESLint+Prettier と比べた設定ファイル・依存の数・速さの実測
- vp migrate で既存プロジェクトを移したときの差分と、出たエラーの原文
この記事で実際に動かしたもの:npm で入れた vite-plus 1.5.0 で新規プロジェクトを作り、vp の主なコマンドをすべて実行しました。同じソースを素の Vite 8.3.6+Vitest 5.1.0+ESLint 10.14.0+Prettier 3.9.10 でも動かし、300ファイル(約2万9千行)の TypeScript で時間を比べています。
flowchart LR
B[vite.config.ts<br>設定は1つ] --> C[vp dev・build<br>Vite 8+Rolldown]
B --> D[vp check<br>Oxfmt+Oxlint]
B --> E[vp test<br>Vitest 5]
B --> F[vp pack<br>tsdown]
B --> G[vp run<br>Vite Task]
よく調べられることの答えを先にまとめます。
| 知りたいこと | 答え | 詳しい節 |
|---|---|---|
| Vite+ とは? | Vite・Vitest・Oxlint・Oxfmt・tsdown を vp コマンド1つで使う統合ツールチェーン | Vite+とは |
| Vite+ 1.0 はいつ出た? | 2026年9月28日。2026年11月6日時点の最新は 1.5.0(11月4日) | Vite+とは |
| Vite+ は有料? | 無料。MIT ライセンスのオープンソース | Vite+とは |
| Vite+ の使い方(最初の1回) | vp create → vp install → vp dev |
vp create |
| 素の Vite との違いは? | テスト・リント・整形・型チェックが同梱。設定ファイルは2つ、devDependencies は3つ | 素のViteとの違いを実測 |
| 速くなる? | 300ファイルで「整形確認+リント+型チェック」が 16.9秒 → 1.6秒(手元の実測) | 素のViteとの違いを実測 |
| 既存の Vite プロジェクトを移すには? | vp migrate。ESLint・Prettier の設定も vite.config.ts に移る |
vp migrate |
| 使うべき? | 新規は試す価値が高い。ESLint の独自プラグインに頼る既存案件は移行を見極めてから | 判断表 |
確認環境:Ubuntu 24.04(x86-64・2 CPU。ほかの作業と同時に動く共有マシンで、計測中のロードアベレージは3〜5)、Node.js 22.23.4、npm 10.9.9、pnpm 10.34.9。Vite+ は公式のインストールスクリプト(curl -fsSL https://vite.plus | bash)ではなく、npm レジストリから vite-plus@1.5.0 をプロジェクトに入れて node_modules/.bin/vp を使いました。プロジェクトは vp create vite:application(npm)で作り、サーバーはすべて 127.0.0.1 で起動しています。比較用の素の構成は create-vite 9.3.4 の vanilla-ts に Vitest 5.1.0・ESLint 10.14.0・typescript-eslint 8.72.1・Prettier 3.9.10・TypeScript 6.0.3 を入れたものです。vp migrate は作業場所の容量の都合で、依存のインストールだけ npm の dry-run にして実行し、移行後の確認は同じ vite-plus 1.5.0 の node_modules で行いました。グローバル CLI のインストール(シェル・PowerShell・Homebrew・Windows のインストーラー)、vp env による Node.js の管理、GitHub Actions・GitLab CI の連携は公式ドキュメントの範囲です。リリース日・同梱ツールの版・ライセンスは VoidZero の公式ブログ、viteplus.dev の公式ドキュメント、GitHub のリリースノート、npm レジストリの公開日時で確かめました(確認日 2026年11月6日)。
本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。
(記載例)出典:株式会社RJC「Vite+とは|1.0の使い方と素のViteとの違いを実測」
Vite+とは(何が・いつ・誰に・いくらで)
この節では、Vite+ が何で、1.0 がいつ出て、誰がどの条件で使えるのかが1枚の表で分かります。
Vite+ は、Vite・Vitest・Rolldown・Oxc を作っている VoidZero が出した「Web 開発の統合ツールチェーン」です。 公式の発表では「フレームワークでもパッケージマネージャーでもなく、Vite の置き換えでもない」と説明されています。React のアプリ、Vue のコンポーネントライブラリ、Node.js の CLI、モノレポのどれにも使えます。
| 項目 | 内容 |
|---|---|
| 何が | vp コマンド(npm パッケージ名は vite-plus)。dev・build・test・lint・fmt・check・pack・run・env などを1つにまとめたもの |
| いつ | アルファ:2026年3月13日/ベータ:2026年7月/1.0:2026年9月28日/最新 1.5.0:2026年11月4日 |
| 誰に | Node.js(^22.18.0・^24.11.0・26 以上)で Web アプリやライブラリを作る人。npm・pnpm・Yarn・Bun に対応 |
| いくらで | 無料。MIT ライセンス |
| 開発元 | VoidZero(2026年6月4日に Cloudflare への合流を発表。Vite・Vitest・Rolldown・Oxc・Vite+ は MIT のまま続くと明記) |
| 利用の広がり | 公式発表で、npm の週間ダウンロードが約200万、依存する公開リポジトリが2,600以上 |
アルファの発表では、当初は企業向けの有料ライセンスも検討していたものの、「どの機能を有料にするかの議論に疲れた」として MIT で完全にオープンソースにした、と書かれています。1.0 の GitHub リリースノートには「v1.0.0-rc.1 をコードの変更なしで安定版にした」とあり、Node.js の要件(^22.18.0 || ^24.11.0 || >=26.0.0)と、vp test が Vitest 5 に上がったことが破壊的変更として挙がっています。
1コマンドが1つ
vite・vitest・eslint・prettier・tsup・turbo を別々に入れて呼ぶ代わりに、vp dev・vp test・vp check のように vp から呼ぶ。
2設定が1つ
リント(lint)・整形(fmt)・テスト(test)・タスク(run)・ライブラリのビルド(pack)・コミット前チェック(staged)を vite.config.ts に書く。
3Rust 製の道具が中心
リントは Oxlint、整形は Oxfmt、型を使うリントは tsgolint、バンドルは Rolldown。公式は「Oxlint は ESLint の50〜100倍、Oxfmt は Prettier の最大30倍速い」と公表。
Vite+に入っているツールとvpコマンド一覧
この節では、vp の各コマンドの中身が何のツールかと、手元の 1.5.0 に入っていた版が分かります。
vp のコマンドは「中で動くツール」が決まっています。 下の表は公式発表の9コマンドに、手元の vp help で出たコマンドを加えたものです。
| コマンド | すること | 中で動くもの |
|---|---|---|
vp create | アプリ・ライブラリ・モノレポを作る | Vite+ と各フレームワークのテンプレート |
vp migrate | 既存プロジェクトを Vite+ に移す | Vite+(ESLint 設定は @oxlint/migrate) |
vp install | 依存を入れる | 選んだパッケージマネージャー |
vp dev・vp build・vp preview | 開発サーバー・本番ビルド・ビルドの確認 | Vite 8 と Rolldown |
vp check | 整形・リント・型チェックをまとめて | Oxfmt・Oxlint・tsgolint |
vp lint・vp fmt | リントだけ・整形だけ | Oxlint・Oxfmt |
vp test | 単体・コンポーネント・ブラウザーのテスト | Vitest |
vp pack | ライブラリのビルド・単体の実行ファイル | tsdown |
vp run | キャッシュつきのタスク実行(モノレポ対応) | Vite Task |
vp env | Node.js の版の管理 | Vite+(グローバル CLI) |
vp staged・vp hooks | ステージしたファイルだけ検査・Git フックの管理 | Vite+ |
どの版が入っているかは vp --version か vp toolchain で分かります。手元の 1.5.0 では次のとおりでした。
$ vp --version
vp v1.5.0
Local vite-plus:
vite-plus v1.5.0
Tools:
vite v8.3.5
rolldown v1.2.16
vitest v5.1.0
oxfmt v0.76.0
oxlint v1.91.0
oxlint-tsgolint v7.0.2005
tsdown v0.23.4
1.0.0 のリリースノートに載っていた版(vite 8.3.1・rolldown 1.2.11・vitest 5.0.1・oxlint 1.85.0・oxfmt 0.70.0・tsdown 0.23.0)から、5週間で全部が上がっています。vite-plus を上げると中のリンターと整形ツールも一緒に上がるので、1.5.0 のリリースノートにも「以前は通ったコードに指摘が出ることがある」と注意書きがあります。 CI で vp check を使うなら、版を固定して上げるときに vp fmt をかけ直す運用にします。
Vite+のインストール(グローバルCLIとプロジェクト単位)
この節では、Vite+ の2通りの入れ方と、この記事で npm から入れた手順・かかった時間・容量が分かります。
グローバル CLI(公式の推奨)
macOS・Linux:curl -fsSL https://vite.plus | bash
Windows:irm https://vite.plus/ps1 | iex か vp-setup.exe
1.5.0 から Homebrew の公式 tap、Docker イメージもある
Node.js とパッケージマネージャーの管理(vp env)も入る
プロジェクト単位(この記事の方法)
npm install -D vite-plus
npx vp … か npm exec -- vp check で呼ぶ
版が package.json に固定され、CI と手元で同じになる
vp env・vp upgrade・vp implode はグローバル CLI の機能
公式ドキュメントでは、インストール後に新しいシェルを開いて vp help を実行する流れです。Windows のインストーラーは「まだコード署名されていない」ため SmartScreen の警告が出ることがある、Alpine Linux では先に apk add libstdc++ が要る、と書かれています。グローバル CLI をやめるときは vp implode です。
この記事では、空のフォルダーで次を実行しました。
$ npm init -y
$ npm install vite-plus@1.5.0
added 85 packages in 34s
$ ls node_modules/.bin
lz-string nanoid oxfmt oxlint rolldown tsgolint vite vitest vp vpr vpx why-is-node-running
大きいのは、OS ごとに分かれたネイティブバイナリです(Linux x64 では vite-plus 本体のバイナリ 37MB、tsgolint 22MB、Rolldown 21MB、Oxlint 16MB)。npm のキャッシュは、このインストールだけで 200MB を超えました。 容量の小さい CI やコンテナでは、キャッシュの置き場所と掃除を先に決めておきます。
vp createで新規プロジェクトを作る(生成されるファイル)
この節では、vp create のテンプレートの選び方と、作られるファイルの中身が分かります。
テンプレートは vp create --list で一覧が出ます。 Vite+ 自身のテンプレート4つと、よく使われるフレームワークの作成コマンドへの近道が並びます。
$ vp create --list
Vite+ Built-in Templates:
vite:monorepo Create a new monorepo
vite:application Create a new application
vite:library Create a new library
vite:generator Scaffold a new code generator (monorepo only)
Popular Templates (shorthand):
vite Official Vite templates (create-vite)
@tanstack/start TanStack applications (@tanstack/cli create)
next-app Next.js application (create-next-app)
nuxt Nuxt application (create-nuxt)
react-router React Router application (create-react-router)
svelte Svelte application (sv create)
vue Vue application (create-vue)
対話なしで、npm・Git なし・エージェント用ファイルなしにして作りました。
$ vp create vite:application --directory app --package-manager npm \
--no-git --no-agent --no-editor --no-hooks --no-interactive
● npm@latest installing...
● npm@12.2.2 installed
● Running: npx create-vite@latest app --no-interactive --no-immediate --no-rolldown
◆ ✔ Created vite.config.ts in app/vite.config.ts
● Installing dependencies...
◇ Scaffolded app with Vite application
• Node 22.23.4 npm 12.2.2
→ Next: cd app && vp run
中では create-vite が動き、そのあと Vite+ 用に書き換えています。注目したいのは、手元の npm(10.9.9)ではなく、vp が npm 12.2.2 を自分で取ってきて使っている点です。 作られた package.json は次のとおりです。
{
"name": "app",
"private": true,
"version": "0.0.0",
"type": "module",
"scripts": {
"dev": "vp dev",
"build": "tsc && vp build",
"preview": "vp preview"
},
"devDependencies": {
"typescript": "~7.0.2",
"vite": "npm:@voidzero-dev/vite-plus-core@1.5.0",
"vite-plus": "1.5.0"
},
"overrides": {
"vite": "npm:@voidzero-dev/vite-plus-core@1.5.0"
},
"devEngines": {
"packageManager": {
"name": "npm",
"version": "12.2.2",
"onFail": "download"
}
}
}
- 1vite は別名で入る"vite" という名前で Vite+ 版のコア(vite-plus-core)が入り、overrides で依存先の vite もそろえる
- 2TypeScript は 7 系テンプレートは typescript ~7.0.2(Go で書き直された版)。tsc --noEmit は手元で 0.14秒
- 3パッケージマネージャーの版が固定されるdevEngines に npm 12.2.2。手元の npm が違う版だと npm install が止まる(エラーの節)
- 4vitest・eslint・prettier は入らないテストもリントも整形も vite-plus の中に入っている
vite.config.ts は、整形(fmt)とリント(lint)の設定だけが入った短いものです。typeAware と typeCheck が最初から有効なので、リントのときに型エラーも出ます。
import { defineConfig } from "vite-plus";
export default defineConfig({
fmt: {},
lint: {
jsPlugins: [{ name: "vite-plus", specifier: "vite-plus/oxlint-plugin" }],
rules: { "vite-plus/prefer-vite-plus-imports": "error" },
options: { typeAware: true, typeCheck: true },
},
});
vp dev・vp build・vp previewの使い方
この節では、開発サーバー・本番ビルド・ビルドの確認を vp で動かしたときの出力と、素の Vite との出力の違いが分かります。
vp dev は Vite の開発サーバーそのものです。 起動してから最初の応答が返るまで 0.35秒、表示は「VITE+ v1.5.0 ready in 152 ms」でした。
$ vp dev --host 127.0.0.1 --port 53011 --strictPort
note: You are running `vp dev` as a Vite+ built-in command. If you meant to run the dev npm script, use `vpr dev` instead.
VITE+ v1.5.0 ready in 152 ms
➜ Local: http://127.0.0.1:53011/
$ curl -s http://127.0.0.1:53011/src/counter.ts | head -3
export function setupCounter(element) {
let counter = 0;
const setCounter = (count) => {
TypeScript の型注釈が外れた JavaScript が返り、HTML には /@vite/client が差し込まれていました。ここまでは素の Vite と同じ動きです。
本番ビルドも同じです。同じソースを vp build と素の vite build(8.3.6)でビルドすると、出力ファイルの名前(ハッシュ)と大きさが完全に一致しました。
$ vp build
transforming...
✓ 9 modules transformed.
rendering chunks...
computing gzip size...
dist/index.html 0.45 kB │ gzip: 0.29 kB
dist/assets/vite-BF8QNONU.svg 8.70 kB │ gzip: 1.60 kB
dist/assets/hero-CLDdwZDr.png 13.05 kB
dist/assets/index-CsUDhMuy.css 4.10 kB │ gzip: 1.46 kB
dist/assets/index-wktXvZw9.js 4.49 kB │ gzip: 2.02 kB
✓ built in 62ms
vp preview で dist を 127.0.0.1:53012 に出し、index-wktXvZw9.js が 200 OK・Content-Length 4496 で返ることも確かめました。
vp build と vpr build は別物
組み込みコマンドと同じ名前のスクリプトがあると、vp が「vpr build を使うつもりでは?」と注意を出す
開発サーバーを止めるときは、ターミナルで Ctrl+C を押します。手元では、親の vp プロセスにだけ終了シグナル(SIGTERM)を送ると、子の node(vite.js dev)が残ってポートを使い続けました。スクリプトから止めるときは、プロセスグループごと止めます。
vp check・vp lint・vp fmtの使い方(エラー表示の実物)
この節では、整形・リント・型チェックを vp check で一度に行う使い方と、エラーがどう表示されるかが分かります。
vp check は「整形の確認 → リント → 型チェック」を1回で行い、--fix で直せるものは直します。 作った直後のテンプレートは整形されておらず、最初の check は失敗しました。
$ vp check
error: Formatting issues found
package.json (0ms)
src/counter.ts (0ms)
src/main.ts (0ms)
src/price.test.ts (0ms)
src/price.ts (0ms)
src/style.css (0ms)
vite.config.ts (0ms)
Found formatting issues in 7 files (253ms, 2 threads). Run `vp check --fix` to fix them.
(終了コード 1)
$ vp check --fix
pass: Formatting completed for checked files (1.1s)
pass: Found no warnings, lint errors, or type errors in 5 files (488ms, 2 threads)
Oxfmt の既定は Prettier に近く、文末にセミコロンが付き、文字列は二重引用符になりました(return Math.round(price * (1 + rate)) → 末尾に ;)。
わざと誤りを入れたファイルで、どこまで見つかるかを確かめます。
import { expect } from "vitest";
const total: number = "100";
export function f() {
const unused = 1;
if (total == 100) debugger;
return expect;
}
$ vp check
pass: All 10 files are correctly formatted (263ms, 2 threads)
error: Lint or type issues found
⚠ eslint(no-unused-vars): Variable 'unused' is declared but never used. Unused variables should start with a '_'.
⚠ eslint(no-debugger): `debugger` statement is not allowed
× vite-plus(prefer-vite-plus-imports): Use 'vite-plus/test' instead of 'vitest' in Vite+ projects.
× typescript(TS2322): Type 'string' is not assignable to type 'number'.
╭─[src/bad.ts:2:7]
1 │ import { expect } from "vitest";
2 │ const total: number = "100";
· ─────
╰────
× typescript(TS6133): 'unused' is declared but its value is never read.
Found 3 errors and 2 warnings in 6 files (1.1s, 2 threads)
型エラー(TS2322・TS6133)が tsc を動かさずに出ている点が、素の構成との大きな違いです。 素の構成では、同じファイルに対して ESLint(no-unused-vars・no-debugger の2件)と tsc(TS2322・TS6133 の2件)を別々に動かす必要がありました。一方、== は既定のルールでは指摘されませんでした。厳しくしたいルールは vite.config.ts の lint.rules に足します。
| やりたいこと | コマンド | 手元の結果 |
|---|---|---|
| CI で整形・リント・型をまとめて確かめる | vp check | 問題があれば終了コード 1 |
| 直せるものを直す | vp check --fix | 整形とリントの自動修正 |
| リントだけ | vp lint | 112ルール・5ファイルで 0.5秒 |
| 整形の確認だけ | vp fmt --check | 9ファイルで 185ms |
| 整形をかける | vp fmt | 310ファイルで 283ms |
vp testの使い方(vite-plus/testから読み込む)
この節では、vp test でテストを書いて動かす方法と、素の Vitest との書き方の違いが分かります。
vp test の中身は Vitest 5.1.0 で、テストの書き方は Vitest と同じです。違いは import 元だけで、vitest ではなく vite-plus/test から読み込みます。 テンプレートのリント設定には prefer-vite-plus-imports ルールが入っていて、vitest から読み込むとエラーになります(前の節の出力)。
// src/price.ts
export function withTax(price: number, rate = 0.1): number {
return Math.round(price * (1 + rate));
}
// src/price.test.ts
import { describe, expect, test } from "vite-plus/test";
import { withTax } from "./price";
describe("withTax", () => {
test("10%の税込み", () => {
expect(withTax(1000)).toBe(1100);
});
test("8%の税込み", () => {
expect(withTax(980, 0.08)).toBe(1058);
});
});
$ vp test
RUN v5.1.0 /dev/shm/t301/w/app
✓ src/price.test.ts (2 tests) 4ms
Test Files 1 passed (1)
Tests 2 passed (2)
Start at 04:22:34
Duration 166ms (transform 45%, import 36%, tests 10%, worker 9%)
テスト用の設定ファイル(vitest.config.ts)は作っていません。必要になったら vite.config.ts の test に書きます。vi.fn・vi.mock などのモックの書き方は Vitest と同じで、関連記事「Vitestモックの使い方|vi.mock・vi.fn・vi.spyOnの使い分け表」で扱っています。1.5.0 のリリースノートによると、Vitest のブラウザーモードの既定のポートは 23315 に変わりました。
vp runとタスクキャッシュの使い方
この節では、vp run で package.json のスクリプトを動かす方法と、キャッシュが効く条件・外れる条件が実測で分かります。
package.json のスクリプトは、既定ではキャッシュされません。 1回だけキャッシュを使うなら --cache を付け、いつも使うなら vite.config.ts の run.tasks に書きます(公式ドキュメントでは run.tasks のタスクは既定でキャッシュされる)。
$ vp run build
$ tsc ⊘ cache disabled
$ vp build ⊘ cache disabled
…
vp run: 2/2 successful.
$ vp run --cache build ← 1回目
vp run: 0/2 cache hit (0%), 2/2 successful.
$ vp run --cache build ← 2回目(何も変えずに)
$ tsc ◉ cache hit, replaying
$ vp build ◉ cache hit, replaying
…
vp run: 2/2 cache hit (100%), 2/2 successful, 401ms saved.
tsc && vp build は2つのタスクに分けて記録されます。2回目は全体で 84ms(1回目は 501ms)で、出力はそのまま再生されました。次に、画面からは読み込んでいない src/price.ts だけを書き換えて実行し、理由を --last-details で見ました。
$ vp run --last-details
Statistics: 2 tasks • 1 cache hit • 1 cache miss
Performance: 50% cache hit rate, 218ms saved in total
Task Details:
[1] app#build: $ tsc ✓
→ Cache miss: 'src/price.ts' modified
[2] app#build: $ vp build ✓
→ Cache hit - output replayed - 218ms saved
tsc は src の全ファイルを読むので外れ、vp build は price.ts を読まないので当たりました。 入力ファイルを手で並べなくても、実際に読んだファイルで判定していることが分かります。環境変数で結果が変わるタスクは、cache: { env: ["NODE_ENV"] } のように書きます。
import { defineConfig } from "vite-plus";
export default defineConfig({
run: {
tasks: {
build: {
command: "vp build",
dependsOn: ["lint"],
cache: { env: ["NODE_ENV"] },
},
deploy: {
command: "deploy-script --prod",
cache: false,
dependsOn: ["build", "test"],
},
},
},
});
上は公式ドキュメントの例です。同じタスク名を vite.config.ts と package.json の両方に書くことはできません。
vp staged・vp hooks・vp packの使い方
この節では、コミット前に変更ファイルだけ検査する設定と、ライブラリをビルドする vp pack の出力が分かります。
husky と lint-staged の役目は、vp hooks と vp staged が受け持ちます。 手順は次の4つで、手元のリポジトリで試しました。
staged の設定を書く
vite.config.ts に、どのファイルに何をするかを書く。
フックのスクリプトを自分で置く
.vite-hooks/pre-commit に1行 vp staged と書く。このファイルはコミットする。
ディスパッチャーを入れる
vp config --hooks で .vite-hooks/_ が作られ、Git の core.hooksPath がそこを向く。
コミットする
整形されていないファイルをステージしてコミットすると、整形してからコミットされる。
$ vp hooks status
Preference: enabled
Hooks dir: .vite-hooks
core.hooksPath: .vite-hooks/_ (Vite+ dispatcher)
Dispatcher: installed (.vite-hooks/_)
Project hooks: pre-commit
$ printf 'export const a=1\n' > src/ugly.ts
$ git add -A && git commit -m init
✔ vp check --fix
$ git show HEAD:src/ugly.ts
export const a = 1;
コミットには 4.4秒かかりました(最初のコミットのため、退避用の stash は作られないという警告つき)。husky からの移り方を考えるときは、関連記事「Git hooks・husky v9の設定方法|実行結果とlefthook比較」の構成と見比べると違いがつかめます。公式の移行ガイドによると、husky・lefthook・simple-git-hooks・yorkie は vp migrate で自動では移されず、警告が出るだけです。
vp pack は tsdown でライブラリを作ります。 1ファイルを型定義つきで出力しました。
$ vp pack src/price.ts --dts
ℹ entry: src/price.ts
ℹ Cleaning 8 files
warn: TypeScript 7.0 does not yet have a stable API and is experimental. Some options will be unavailable.
ℹ Emit types with typescript@7.0.2
ℹ dist/price.mjs 0.12 kB │ gzip: 0.12 kB
ℹ dist/price.d.mts 0.07 kB │ gzip: 0.08 kB
✔ Build complete in 270ms
$ cat dist/price.d.mts
export declare function withTax(price: number, rate?: number): number;
「Cleaning 8 files」は、直前に vp build で作った dist の中身を消したという意味です。アプリとライブラリを同じプロジェクトで出すなら、出力先を分けます。
素のViteとの違いを実測(設定ファイル・依存の数・速さ)
この節では、Vite+ と「素の Vite+Vitest+ESLint+Prettier」を同じソースで比べた、設定ファイル・依存・時間の実測が分かります。
素の構成は create-vite の vanilla-ts に、Vitest・ESLint(@eslint/js と typescript-eslint の型を使う推奨設定)・Prettier を足しました。ESLint の設定の書き方は関連記事「ESLint flat config設定|v10対応の完成形コピペ集」と同じ flat config です。
| 比べたもの | Vite+ 1.5.0 | 素の構成 |
|---|---|---|
| 設定ファイル | vite.config.ts・tsconfig.json の2つ | eslint.config.js・.prettierrc・tsconfig.json の3つ(Vite の設定を変えるなら vite.config.ts も) |
| devDependencies | 3(typescript・vite・vite-plus) | 8(vite・vitest・eslint・@eslint/js・typescript-eslint・globals・prettier・typescript) |
| 入ったパッケージの数 | 82 | 129 |
| node_modules の大きさ | 161MB | 95MB |
| npm での初回インストール | 34秒(vite-plus のみ) | 28秒 |
| TypeScript | 7.0.2 のまま使えた | 7.0.2 では typescript-eslint が入らず、6.0.3 に下げた |
依存の数と設定ファイルは減りますが、容量は Vite+ の方が大きくなりました。 Rust 製のネイティブバイナリが入るためです。
時間は、生成した300ファイル(306ファイル・29,099行)の TypeScript で、各3回の中央値を取りました。共有マシンでの計測なので、差の大きさの目安として見てください。
| すること | 素の構成 | Vite+ | 差 |
|---|---|---|---|
| 整形の確認 | prettier --check:3.67秒 | vp fmt --check:0.44秒 | 約8倍 |
| リント(型情報あり) | eslint:9.94秒 | vp lint:1.78秒(146ルール・型チェック込み) | 約5.6倍 |
| リント(型情報なし) | eslint:4.78秒 | (参考) | - |
| 型チェック | tsc --noEmit(TS 6.0.3):3.33秒 | vp lint に含まれる | - |
| 3つまとめて | 合計 16.9秒 | vp check:1.64秒 | 約10倍 |
リントの比較は、ルールの中身がそろっていない点に注意が要ります。ESLint 側は recommendedTypeChecked、Vite+ 側は vp migrate がその設定から移した146ルールです。型チェックも、素の構成は TypeScript 6 の tsc、Vite+ は Go で書かれた tsgolint で、この差の多くは TypeScript 7 世代の速さによるものです(Vite+ のテンプレートの tsc 7.0.2 は小さなプロジェクトで 0.14秒)。TypeScript 7 自体の変更点は関連記事「TypeScript 7の新機能と変更点|6から7への移行と破壊的変更一覧」で扱っています。
小さなテンプレート(数ファイル)では差がほとんど出ませんでした。5回の中央値で、vp test 0.55秒・vitest run 0.52秒、vp build 0.30秒・vite build 0.24秒、vp lint 1.5秒・eslint 1.7秒です。ファイル数が増えるほど差が開く、と考えるのが実態に合っています。
既存のViteプロジェクトからvp migrateで移行する
この節では、vp migrate が既存のプロジェクトの何をどう書き換えるかが、実際の差分で分かります。
公式の移行ガイドでは、先に Vite 7 以上・Vitest 4 以上に上げておき、移行後に vp install → vp check → vp test → vp build の順で確かめる流れです。モノレポではワークスペースのルートで実行します(メンバー1つだけは移せない)。ガイドには「ほとんどのプロジェクトで、vp migrate のあとに手での調整が要る」とも書かれています。
- 1Git にコミットしてから始める元に戻す公式の手順は無い。ロックファイルと設定を Git で戻せるようにする
- 2今の依存を入れておくESLint の設定を読むため、@eslint/js などが node_modules に要る
- 3vp migrate --no-interactiveプロジェクトの外の vp(グローバル CLI)で実行する
- 4差分を読む移せなかったルール・import の書き換え・scripts を確かめる
- 5vp install → check → test → buildCI の手順も vp check などに置き換える
前の節の素の構成に対して実行した結果です。
$ vp migrate --no-interactive --no-agent --no-editor --no-hooks
▲ No package manager is declared in package.json; using npm for this migration
without adding a pin. Run `vp env pin` to declare it explicitly.
● Prettier configuration detected. Auto-migrating to Oxfmt...
◇ Migrated . to Vite+ 1.5.0
• Node 22.23.4 npm 10.9.9
• 3 config updates applied, 1 file had imports rewritten
• ESLint rules migrated to Oxlint
• Prettier migrated to Oxfmt
! Warnings:
- Skipped 2 rules:
- 2 Unsupported
- no-dupe-args: Superseded by strict mode.
- no-octal: Superseded by strict mode.
$ git status --short
M .gitignore
D .prettierrc
D eslint.config.js
M package-lock.json
M package.json
M src/price.test.ts
?? vite.config.ts
eslint.config.js と .prettierrc が消え、その中身が vite.config.ts の lint と fmt に移りました。 移せなかった2ルールは、ES モジュールでは strict モードで同じ誤りが構文エラーになるもので、実害はありません。package.json は次のように変わりました。
"scripts": {
- "dev": "vite",
- "build": "tsc && vite build",
- "preview": "vite preview"
+ "dev": "vp dev",
+ "build": "tsc && vp build",
+ "preview": "vp preview"
},
"devDependencies": {
- "@eslint/js": "^10.0.1",
- "eslint": "^10.14.0",
"globals": "^17.14.0",
- "prettier": "^3.9.10",
"typescript": "~6.0",
- "typescript-eslint": "^8.72.1",
- "vite": "^8.3.6",
- "vitest": "^5.1.0"
+ "vite": "npm:@voidzero-dev/vite-plus-core@1.5.0",
+ "vite-plus": "1.5.0"
+ },
+ "overrides": {
+ "vite": "npm:@voidzero-dev/vite-plus-core@1.5.0"
}
テストの import … from "vitest" は "vite-plus/test" に書き換わり、.gitignore には .vitest/ が足されました。vite.config.ts の lint には、元の設定にあった無視パターン(dist・eslint.config.js)、ブラウザーの環境、typescript/no-unsafe-assignment などの型を使うルールが JSON の形で並びます。fmt には printWidth: 80 と sortPackageJson: false が入り、Prettier の既定に合わせてありました。移行後、vp fmt で 310ファイルを整形し、vp check が「306 files」でエラーなしになったことを確かめています。不要になった globals は残ったので、手で消します。
既存の vite.config.ts の書き方(エイリアス・プロキシ・環境変数など)はそのまま使えます。設定項目は関連記事「vite.configの書き方|用途別コピペ一覧とVite 8の変更点」にまとめています。
Vite+のよくあるエラーとつまずき
この節では、Vite+ を動かして実際に出たエラーの原文と、原因・直し方が分かります。
| 表示(原文) | 原因 | 直し方 |
|---|---|---|
npm error code EBADDEVENGINES … Invalid semver version "12.2.2" does not match "10.9.9" | vp create が package.json の devEngines に npm 12.2.2 を書き、手元の npm 10.9.9 で npm install した | vp install を使う(vp が npm 12.2.2 を取ってくる)。npm を上げるか、devEngines を手元の版に合わせる |
Cannot find package 'vite-plus' imported from …vite.config.ts | node_modules が無い状態で vp fmt などが設定を読んだ | 先に vp install |
vite-plus(prefer-vite-plus-imports): Use 'vite-plus/test' instead of 'vitest' | テストを vitest から読み込んでいる | import 元を vite-plus/test にする(vp migrate なら自動) |
Found formatting issues in 7 files … Run `vp check --fix` | 整形されていないファイルがある(作った直後のテンプレートも) | vp check --fix か vp fmt |
note: You are running `vp build` as a Vite+ built-in command | 組み込みの vp build と同名の npm スクリプトがある | スクリプトを動かすなら vpr build |
/usr/bin/env: 'node': No such file or directory と VITE+ - pre-commit script failed (code 127) | git commit を実行した環境の PATH に node が無い(GUI の Git クライアントなど) | その環境の PATH に Node.js を通す。急ぐときは VP_GIT_HOOKS=0 git commit |
Cannot find package '@eslint/js' imported from …eslint.config.js(vp migrate 中) | 依存を入れていない状態で移行し、ESLint の設定が読めない | 元の依存を入れてから vp migrate をやり直す |
ERR_PNPM_MINIMUM_RELEASE_AGE_ VIOLATION(実際は1語)… vite@8.3.6 was published at 2026-11-05T05:39:32.000Z, within the minimumReleaseAge cutoff | pnpm のプロジェクトで移行したとき、使われた pnpm が公開から1日たっていない版を拒んだ | 1日待つ、版を1つ前にする、または内容を確かめたうえで pnpm の minimumReleaseAge を緩める |
Cleaning 8 files(vp pack) | vp pack が dist を消してから出力する | アプリのビルドと出力先を分ける |
素の構成側でも、比べる途中で次の2つが出ました。どちらも Vite+ に移ると出なくなる種類のものです。
$ npm install -D vitest eslint @eslint/js typescript-eslint globals prettier
While resolving: plain@0.0.0
Found: typescript@7.0.2
Could not resolve dependency:
peer typescript@">=4.8.4 <6.1.0" from typescript-eslint@8.72.1
$ npx eslint .
/dev/shm/t301/w/plain/eslint.config.js
0:0 error Parsing error: /dev/shm/t301/w/plain/eslint.config.js was not found by the project service. Consider either including it in the tsconfig.json or including it in allowDefaultProject
1つめは、2026年11月6日時点の typescript-eslint 8.72.1 が TypeScript 7 に対応していないため、2つめは型を使うリントで、tsconfig.json の対象外の設定ファイルまで読もうとしたためです。後者は ignores に eslint.config.js を足して直しました。
Vite+を使うかの判断表
この節では、プロジェクトの状況から、Vite+ を入れるか、いつ入れるかを1行で選べます。
| 状況 | おすすめ | 理由 |
|---|---|---|
| 新しく Vite のアプリを作る | Vite+ で始める | 設定2つ・依存3つで、テスト・リント・整形・型チェックがそろう |
| TypeScript 7 を使いたい | Vite+ が向く | typescript-eslint が TS 7 に未対応の間も、型を使うリントが動く |
| CI の lint・format・tsc に時間がかかる | vp check を試す | 300ファイルで 16.9秒 → 1.6秒(手元) |
| ESLint の独自プラグイン・独自ルールが多い | 移行は見極めてから | 移せないルールが出る。jsPlugins で動くかを1つずつ確かめる |
| husky・lefthook で細かいフックを組んでいる | フックは手で移す | vp migrate は警告を出すだけで移さない |
| Vite 6 以前・Vitest 3 以前 | 先に上げる | 公式は Vite 7 以上・Vitest 4 以上を求めている |
| webpack のプロジェクト | 先に Vite へ移す | Vite+ は Vite が前提。1.5.0 の migrate は Rollup・Jest などの依存に案内を出す |
| ディスク・CI キャッシュの容量が厳しい | 容量を見積もってから | node_modules が 161MB、npm キャッシュは 200MB 超(手元) |
React の環境を Vite で作る手順そのものは、関連記事「React環境構築をViteで行う手順|create viteの使い方」で扱っています。Vite+ でも vp create vite -- --template react-ts で同じテンプレートを使えます。
よくある質問
この節では、Vite+ について検索されることの多い疑問に短く答えます。
Q. Vite+ と Vite の違いは何ですか?
Vite はビルドと開発サーバーのツールで、Vite+ はその Vite に、テスト(Vitest)・リント(Oxlint)・整形(Oxfmt)・ライブラリのビルド(tsdown)・タスクランナー・Node.js の管理を足したものです。vp build の出力は素の Vite と同じでした。
Q. Vite+ は有料ですか?
無料です。MIT ライセンスのオープンソースで、公式発表に有料プランの記載はありません。当初は企業向けの有料ライセンスも検討されていましたが、アルファの時点で取りやめています。
Q. Vite+ を入れると Vite は使えなくなりますか?
使えます。公式は「Vite の置き換えではない」と説明しており、node_modules の中では vite の名前で Vite+ 版のコアが入ります。vite.config.ts の server・build などの設定もそのまま書けます。
Q. vp と vpr と vpx の違いは?
vp は組み込みコマンド(dev・build など)、vpr は package.json のスクリプトの実行(vp run と同じ)、vpx はパッケージのコマンドを取ってきて実行するもの(npx に相当)です。
Q. pnpm・Yarn・Bun でも使えますか?
使えます。vp create --package-manager で pnpm・npm・yarn・bun を選べ、vp install は選んだパッケージマネージャーで依存を入れます。手元では vp が npm 12.2.2 を自分で取ってきて使いました。
Q. Node.js はどの版が要りますか?
^22.18.0・^24.11.0・26 以上です(1.0 から)。Node.js 22.23.4 で動きました。
Q. Windows で使えますか?
使えます。公式ドキュメントでは PowerShell の irm https://vite.plus/ps1 | iex か、vp-setup.exe で入れます。インストーラーはまだコード署名されていないため、SmartScreen の警告が出ることがあると書かれています。
Q. ESLint のプラグインはそのまま使えますか?
そのままではありません。vp migrate は対応するルールを Oxlint に移し、移せないものを一覧で出します。Oxlint には JavaScript のプラグインを読む jsPlugins の仕組みがあり、Vite+ 自身のルールもこれで入っています。
Q. CI ではどう使いますか?
公式発表によると、GitHub Actions 用と GitLab CI/CD 用の setup-vp があります。手順は「vp install → vp check → vp test → vp build」の4つにまとまります。
Q. Cloudflare に入ったことで何か変わりますか?
VoidZero は2026年6月4日の発表で、Vite・Vitest・Rolldown・Oxc・Vite+ はオープンソースで MIT のまま続くと明記しています。
Q. モノレポでも使えますか?
使えます。vp create vite:monorepo で作れ、vp run がワークスペースをまたいでタスクを実行・キャッシュします。移行はワークスペースのルートで行います。
まとめ
この節では、Vite+ 1.0 について押さえておく5点が分かります。
- Vite+ は vp コマンド1つと vite.config.ts 1つにまとめた統合ツールチェーンで、1.0 は2026年9月28日、2026年11月6日時点の最新は 1.5.0。MIT で無料です。
- dev・build は素の Vite と同じ動きで、ビルドの出力ファイルは完全に一致しました。
- vp check は整形・リント・型チェックを1回で行い、300ファイルで素の構成の 16.9秒に対して 1.6秒でした(ルールと TypeScript の版の違いも含んだ手元の値)。
- 依存は8つから3つ、設定ファイルは3つから2つに減る一方、node_modules は 95MB から 161MB に増えました。
- 既存プロジェクトは vp migrate で ESLint・Prettier の設定まで移せますが、Git フックや移せないルールは手で確かめます。
参考・出典
この節では、この記事で確かめた公式の情報源が分かります(確認日 2026年11月6日)。
- VoidZero「Announcing Vite+ 1.0」(2026年9月28日):https://voidzero.dev/posts/announcing-vite-plus-1-0
- VoidZero「Announcing Vite+ Alpha」(2026年3月13日):https://voidzero.dev/posts/announcing-vite-plus-alpha
- VoidZero「VoidZero is joining Cloudflare」(2026年6月4日):https://voidzero.dev/posts/voidzero-cloudflare
- Vite+ 公式ドキュメント Getting Started:https://viteplus.dev/guide/
- Vite+ 公式ドキュメント(Run・Commit Hooks・Migrate・Config):https://viteplus.dev/guide/run / https://viteplus.dev/guide/commit-hooks / https://viteplus.dev/guide/migrate / https://viteplus.dev/config/
- GitHub voidzero-dev/vite-plus リリースノート v1.0.0・v1.5.0:https://github.com/voidzero-dev/vite-plus/releases
- npm レジストリ vite-plus(各版の公開日時・依存):https://www.npmjs.com/package/vite-plus
本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。
(記載例)出典:株式会社RJC「Vite+とは|1.0の使い方と素のViteとの違いを実測」
株式会社RJC ― SI事業・SES事業・AI駆動開発。RJCは一緒に成長を楽しめる会社です。
WE ARE HIRING
RJCで一緒に開発しながら、
成長を楽しみませんか?
RJCは、Web・モバイル・AIを活用した開発プロジェクトで、テックリードやPM・PMOも活躍するシステム開発会社です。会社を知る、待遇を確かめる、話を聞いてみる。気になるところ見てみてください!
- 127日年間休日
- 12時間平均残業時間
- 毎日ガチャ遊びココロも大切にする福利厚生。アマギフなどの賞品ラインナップ!
ほかにも、チケットレストラン、書籍読み放題、2年ごとの慰労報奨(休暇 or 金一封)、11期連続の黒字決算。