


スポンサーするくらいには好き。会場では扇子にVite+と入れてもらってAlexとツーショ撮った。
そもそも Vite+ って?
vp ひとつに束ねる統合ツールチェインBefore: ツールごとに設定が散らばる
turbo.json
vitest.config.ts
oxlint / oxfmt の設定
lefthook.yml
...
After: vite.config.ts に寄せられた
vite.config.ts ← test / lint / fmt / build / taskvite.config.ts に寄せるどこに導入した?
爆速(当社比)で移行
マネージャー
「ビルドできればいいんじゃない?」
ほな導入したろか!
爆速!!(当社比)

vp migrate で Vite / Vitest / Oxlint / Oxfmt / Turborepo を統合turbo.json ほか各種設定ファイルを まとめて削除vitest → vite-plus/test に変更voidzero-dev/setup-vp ベースに変更実際どうだった?
// vite.config.ts (実物)
export default defineConfig({
test: { … }, // Vitest
staged: { … }, // git hooks(pre-commit)
fmt: { … }, // Oxfmt
run: { … }, // タスク実行(キャッシュ付き)
lint: { … }, // Oxlint
});vite.config.ts の defineConfig に 設定が全部同居vp lint だけで type linting(oxlint-tsgolint)まで実行// package.json
"build": "vp run -r build"
// -r = 全 workspace を依存順に実行(既定で最大4並列)
// vite.config.ts
run: {
cache: { scripts: true }, // 使ったファイルを自動追跡してキャッシュ
}-r で 全 workspace を依存順に実行$ vp run -r build # 2回目(変更なし)
~/packages/hoge$ vp pack ◉ cache hit, replaying
~/packages/fuga$ tsc ... ◉ cache hit, replaying
~/packages/piyo$ vp pack ◉ cache hit, replaying
──────────────────────────────────────
vp run: 4/5 cache hit (80%), 27.38s saved
↑ ui-preview(Astro) だけは入力を書き換えるので非キャッシュ// packages/hoge/vite.config.ts
pack: {
entry: ["./src/index.ts"],
format: ["esm", "cjs"],
dts: true, // 型定義も出力
sourcemap: true,
minify: true,
deps: {
// react 系は peer で external、それ以外はバンドル
alwaysBundle: ["clsx", "tailwind-merge", "dayjs"],
},
} Before After
vp build(Vite/lib) vp pack(tsdown)
ESM gzip 117KB → 36KB (459KB→144KB)
CJS gzip 102KB → 36KB (340KB→148KB)
build ~1.59s → ~1.0s
型定義 vite-plugin-dts → tsdown 内蔵dts: true の1行で型定義(vite-plugin-dts 不要)、React 系は external 扱い// vite.config.ts ← lefthook.yml を置き換え
staged: {
"*.{ts,tsx,js,jsx,mjs}": "vp lint --fix",
"*.{ts,tsx,css,md,json,yml}": "vp fmt",
}
// vp config が hooks を生成 → .vite-hooks/pre-commit の中身は1行
vp stagedvp 同梱(staged に書くだけ)→ husky / lefthook 不要.vite-hooks/ で対応.node-version だけ(今回の用途では mise / volta 不要)もちろん辛みもあった
vp migrate 時、lefthook は自動移行されず警告のみ直後に Astro 6 へ手動移行(#198)
core@0.1.14 で Astro 互換リグレッション → 0.1.15 で解消
overrides.vite が Astro 内部の Vite まで置換 → Release 失敗
→AstroV7でVite8がデフォになったり、同じCloudflareになったことで上手いこと行くことに期待
Vite+ / vp を知らないことが多いnpx で実行しがち→AGENTS.md / CLAUDE.md / Cursor rules などに vp 前提の運用を書く
導入しやすい
注意したい
framework 側の Vite 依存
α版の破壊的変更を追えない
余談:このスライドも Vite+ です

opengraph-image.tsx で組みたくて採用)、ビルドは Next のままvp は lint / fmt / task / staged 担当 → 名前は Vite+ でも中身は バンドラ非依存
[悪循環画像ジェネレータで作成]
vite.config.ts 一つに集約できるのが最高ご清聴ありがとうございました