Vite+(vp)で lint・format・型チェック・テスト・Node 管理を1つにまとめる
Vite+ は Vite・Vitest・Oxlint・Oxfmt・Rolldown・tsdown・Vite Task を1つの依存にまとめたツールチェーン(MIT)。vp check で format・lint・型チェックを一度に走らせられ、husky + lint-staged や fnm も置き換えられる。
移行で消せたもの(実例)
oxfmt、oxlint、oxlint-tsgolint、tsgo、lefthook(husky + lint-staged 相当)、fnm(Node のバージョン管理)。npm scripts もかなり減らせた。
主なコマンド
| コマンド | 役割 |
|---|---|
vp migrate | 既存プロジェクトを移行。.oxlintrc* / .oxfmtrc* / lint-staged の設定を vite.config.ts に統合 |
vp check(--fix) | format + lint + 型チェック |
vp test / vp build / vp dev | Vitest / 本番ビルド / dev サーバー |
vp run <task> | package.json scripts とモノレポのタスクをキャッシュ付き・依存順で実行 |
vp env | Node.js とパッケージマネージャーをグローバル・プロジェクト単位で管理 |
vp install / vp add | lockfile と packageManager から pnpm / npm / Yarn / Bun を自動判別して実行 |
vp staged / vp hooks | ステージ済みファイルへのチェックと Git フック |
設定は vite.config.ts 1つ
vite.config.ts 1つts
import { defineConfig } from 'vite-plus'
export default defineConfig({
test: { include: ['src/**/*.test.ts'] }, // Vitest
lint: { ignorePatterns: ['dist/**'] }, // Oxlint
fmt: { semi: true, singleQuote: true }, // Oxfmt
run: { // Vite Task
tasks: {
'generate:icons': {
command: 'node scripts/generate-icons.js',
cache: { env: ['ICON_THEME'] }, // この環境変数もキャッシュキーに含める
},
},
},
staged: { '*': 'vp check --fix' }, // コミット前チェック
})タスクランナー(Vite Task)は、起動したプロセスが実際に読んだファイルを Rust の fspy クレートで捕捉してキャッシュの入力を決めるため、Turborepo のように入力ファイルを手で列挙しなくてよい(仕組みの解説は出典の asa1984 さんの記事)。
CI(GitHub Actions)
yaml
- uses: actions/checkout@v5
- uses: voidzero-dev/[email protected] # 正確なバージョンタグを指定する
with:
node-version-file: ".node-version"
cache: true # lockfile を自動検出して依存をキャッシュ
run-install: true
- run: vp check
- run: vp test注意: setup-vp@v1 のメジャータグは v1.15.0 で凍結されていて更新されない。@v1 のままだと新しいリリースが入らないので、正確なタグ(さらに GitHub Actions: pinact で uses: をコミット SHA に固定する)で指定する。
注意
- インストールは
curl -fsSL https://vite.plus | bash。気になるなら シェル: curl … | bash を | bashka に変えて、実行前にスクリプトを静的検査する してから実行する。 - チーム全員が
vpを使う前提にするなら scripts を削れるが、混在期間は scripts からvpを呼ぶ形にしておくと移行しやすい。
出典
- @shimabu_it 2026-03-14(移行の実例): @shimabu_it · 2026-03-14
- @about_hiroppy 2026-03-13(vite-plus 紹介): @about_hiroppy · 2026-03-13
- @about_hiroppy 2026-03-13(setup-vp 紹介): @about_hiroppy · 2026-03-13
- @asa_high_ost 2026-03-17(vite-task の仕組み解説): @asa_high_ost · 2026-03-17 / zenn.dev
- リポジトリ: github.com / github.com