---
title: performance/minify-disabled · Minification disabled
description: vite.config に build.minify:false が残っていると、ミニファイされていない JS/CSS がそのまま本番に配信されます。
---

**重大度:** warning · **カテゴリ:** performance

## チェック内容

本番ビルドのミニファイを `build.minify: false` で無効化している Vite 設定を検出します。

CLI は `vite.config.*`（Vite 自身の解決順で最初のファイル）を静的解析し、`satisfies` や `as` を外したうえで次のリテラル形式を検出します。

- `export default { … }`
- `defineConfig({ … })`（同一ファイル内の識別子を引数に渡す形も含む）
- 同一ファイル内のエイリアスエクスポート
- CommonJS の `module.exports = { … }`

Vite プラグインは `vite build` 中に**解決済み**の設定値を読むため、関数形式や条件分岐の設定も検出でき、実際のビルドに適用されないオーバーライドを誤検知することもありません。

検出しないもの: `minify: 'oxc' | 'esbuild' | 'terser' | true`、`build` オブジェクト外の `minify` キー。Vite 設定を持たないプロジェクトは **CLI では**検出しません（解析対象がないため）。プラグイン側は解決済みの値で判定するので、設定ファイルを介さないインラインの設定も対象です。

リテラルの後にオブジェクトスプレッドがあり `minify` を上書きしうる場合（`{ minify: false, ...prod }`）、CLI からは値を判定できないため保守的に見送ります。プラグインチャネルは解決済みの値で判定するため、この場合も検出できます。

## なぜ重要か

Vite はデフォルトでミニファイを行います（Vite 8 以降は oxc）。これを無効化する設定は、本番の問題をデバッグした際の消し忘れであることがほとんどです。ミニファイされていないバンドルは数倍のサイズになり、すべてのルートでダウンロードとパースに余計な時間がかかります。しかもツールチェーンは何も警告しません。ビルドは成功し、開発時の挙動も変わらないためです。

## 修正方法

オーバーライドを削除する（デフォルトでミニファイされます）か、本番ではミニファイが維持されるようにスコープを限定します。

```ts vite.config.ts
import { defineConfig } from 'vite';

export default defineConfig(({ mode }) => ({
  build: {
    minify: mode === 'production'
  }
}));
```

CLI の静的解析はこの条件分岐形式を意図的にスキップします。実際のビルドがどちらの分岐を通るかを検証できるのは、解決済みの値を見るプラグインチャネルだけです。

## モードによる違い

2つのチャネルには検出力の差があります。CLI はリテラルの `build.minify: false` だけを検出し、`false` に評価される動的な式は見えません。

Vite プラグインは解決済みの値で判定するため、実行されたビルドに対する判定は正確です。ただし設定が動的な場合やオーバーライドが別プラグイン由来の場合は行を特定できないため、行番号は付かず、実際のビルドから解決した値である旨がメッセージに出ます。設定ファイルを介さないインラインの設定では、ファイル名も付きません。

## 無効化

意図してミニファイせずに本番へ出している場合は、設定でルールを無効化してください。

```js svelte-vitals.config.js
export default {
  rules: {
    'performance/minify-disabled': 'off'
  }
};
```
