Skip to content
Latchkey

ミニファイとは? 本番向けにコードを縮小する

ミニファイは、空白やコメントを取り除き名前を短縮することで、何をするかを変えずにコードを可能な限り小さく書き換えます。

あなたが書くコードは、空白やコメント、説明的な名前を伴い、人間向けに整形されています。そのどれもブラウザには関係ありません。ミニファイは非本質的なものをすべて取り除き、識別子を短い名前に書き換えることで、ファイルがより速くダウンロードされるようにします。これはあらゆる本番フロントエンド build の標準ステップであり、source map が存在する主な理由です。

ミニファイが取り除き書き換えるもの

  • 空白、改行、コメント。
  • 数文字に短縮された長いローカル変数名。
  • より短い等価物へ畳み込まれた冗長な構文。
  • 到達不能だと証明できるデッドブランチ。

ミニファイ vs 圧縮

ミニファイはソースそのものに対する build 時の変換です。gzip や brotli のような圧縮は、サーバーや CDN 上での転送時に行われます。両者は重なります。ミニファイされたコードはさらに圧縮され、どちらもユーザーがダウンロードする量を減らします。

一般的なミニファイア

Terser は標準的な JavaScript ミニファイアです。esbuild と SWC は bundling の一部として高速にミニファイします。CSS には cssnano のような独自のミニファイアがあります。ほとんどのバンドラーは本番モードで自動的にミニファイを有効にします。

なぜ source map と対になるのか

ミニファイされたコードは読めないため、スタックトレースはノイズを指すことになります。ミニファイされた出力とともに source map を生成すると、デバッグやエラー追跡のために元のソースへのリンクが復元されます。

CI/CD でのミニファイ

ミニファイは本番 build でのみ実行され、bundling の最後に CPU 時間を加えます。与えられた入力に対して決定的であるため、build 出力を cache しておけば、変更のないコードは再ミニファイをスキップできます。ミニファイされハッシュされたファイルこそが、pipeline が deploy するものです。

重要なポイント

  • ミニファイは空白を取り除き名前を短縮することで、挙動を変えずにコードを縮小します。
  • gzip や brotli のようなサーバーサイドの圧縮と重ねて効きます。
  • ミニファイされた出力が本番でデバッグ可能であり続けるには source map が必要です。

関連ガイド