JS圧縮ツールとは?
JS Minifierは、Terserエンジンを使用して、空白・コメントの削除や変数名の短縮によりJavaScriptコードを圧縮します。ファイルサイズを削減してページの読み込みを高速化し、帯域幅コストを下げながら、コードの機能を完全に維持します。
ミニファイアはローカルでTerserを走らせます。空白とコメントを削り、mangle有効時はローカル変数を1文字に置き換え、compress有効時は安全なAST変換を適用し、console.log呼び出しの削除も可能です。元のサイズ、圧縮後サイズ、削減率を表示するので、公開前に効果を確かめられます。
使い方
- JavaScriptコードを入力エディタに貼り付けるか、.jsファイルをアップロードします。
- 圧縮オプションを選びます:変数名の短縮(マングリング)、圧縮、console.logの削除を切り替えます。
- 「Minify」をクリックしてコードを処理します。サイズ削減率を確認し、圧縮済みファイルをダウンロードするかクリップボードにコピーします。
使用するタイミング
- ビルド機構のないCDNに上げる前のJavaScriptバンドルを圧縮するとき。
- CMSテーマに貼り付ける前に、サードパーティライブラリからコメントとconsole文を取り除くとき。
- チャットウィジェット、広告ピクセル、外部スクリプトタグなど、1回限りの圧縮版を作るとき。
結果
豊富なコメントと長い変数名を持つ45KBのユーティリティライブラリがあります。貼り付けてマングリングと圧縮を有効にすると、12KBの出力が得られます——73%の削減でそのまま本番デプロイに使用できます。
よくある質問
- ミニファイでコードが壊れることはありますか?
- Terserは既定で慎重に動作し、意味を保ちます。mangleは公開されていない変数だけを改名し、compressは安全と確認できない変換を行いません。Function.nameに依存したり、ソースをevalする場合は、そのファイルだけmangleを無効にしてください。
- どれくらいの削減が見込めますか?
- JavaScriptはおおむね40〜70%縮みます。長いコメントや冗長な変数名、未使用分岐が多いコードほど縮みます。もともと簡潔だったり、文字列リテラルが大半のコードは縮みにくいです。gzip後の差はもっと小さくなります。
- minify、compress、mangleの違いは何ですか?
- minifyは総称です。compressは定数畳み込みや死分岐削除などコード水準の変換、mangleは識別子を短い名前に置き換えるものです。それぞれ単独でも動きますが、3つ揃えると通常もっとも小さい出力になります。
- サーバーでgzipかbrotliをかけるなら、minifyは省いてもよいですか?
- 省かないでください。gzipは文字列の重複を縮めますが、長い変数名を改名したり、未使用分岐を消したりはしません。ミニファイ済みコードはgzip後でもさらに小さくなり、読み込み後のパースも速くなります。両者は重なるのではなく積み重なります。
- TypeScriptやES2022の新しい構文でも動きますか?
- 純粋なTypeScriptはTerserがJavaScriptしか受け付けないため、先にコンパイルする必要があります。ES2022までの新しい構文(プライベートフィールド、トップレベルawait、オプショナルチェーンなど)はBabel変換なしで直接解析できます。