CSS圧縮・整形ツール

コメントや空白を取り除いてCSSを圧縮したり、逆にきれいなインデントの読みやすいコードへ展開したりできます — どちらもライブ処理。

1,244回閲覧

仕組み

圧縮(Minify)は、機械のパーサーには不要だが人間の読み手には役立つ要素——コメント、改行、インデント、そして閉じ括弧の前の最後のセミコロン——をすべて取り除くことで、ファイルサイズを小さくします。これらはブラウザがスタイルを適用する仕組みにとって何の意味も持ちません。すべてのルールを1行に、空白を一切入れずに書いたスタイルシートも、きれいに整形されたものとまったく同じように動作します。違うのはサイズが小さく、ダウンロードが速いという点だけです。これは本番環境では重要な意味を持ちます。CSSはダウンロードして解析されるまでページの描画をブロックするため、ファイルから数キロバイトを削ることが、特に低速な回線でページの読み込み速度を直接改善するからです。

整形(Beautify)はその逆の処理であり、実際にはこちらのほうが難しい作業です。圧縮された、あるいは乱雑なCSSを受け取り、1行につき1つの宣言、1ブロックにつき1つのルール、コロンや波括弧の周囲に一貫した空白を入れて、再びインデントし直します。これは一種のリバースエンジニアリングです。なぜなら、ファイルが圧縮された瞬間に、元の書式——とりわけコメント——は失われてしまうからです。復元できるのは構造的な書式(どのセレクタがどの宣言と結びついているか)だけであり、著者が元々つけていた改行位置やメモそのものではありません。たとえば.btn{color:red;padding:8px}は、.btn { }の中にcolor: red;padding: 8px;がそれぞれ独立した行として並ぶ、きちんとインデントされたブロックになります。

知っておくべきこと

  • どちらの方向の変換も動作をそのまま保ちます。 セレクタ、プロパティ、値、カスケードの順序は一切変更されません。変わるのは空白とコメントだけなので、詳細度(スペシフィシティ)や継承は変換前後でまったく同じように機能します。
  • これは軽量な正規表現ベースのツールであり、PostCSSのような完全なCSSパーサーではありません。標準的なCSSは正しく処理しますが、引用符の中に文字どおりの{};を含む値(実際には稀で、多くは生成されたcontent:値で見られます)は、完璧には整形されないことがあります。
  • Sass/Lessの構文は処理されません。 ネスト、変数、mixinはそれ単体では有効なCSSではないため、コンパイルされることなく、ほぼそのままの形で通過します。これらをプレーンなCSSに変換するには、依然としてSassやLess自体が必要です。
  • 圧縮によって永久に失われるのはコメントだけです。 コメントがブラウザ固有のハックや「これは削除しないで」という警告を記録している場合は、圧縮されていないソースのコピーをどこかに保管しておいてください。圧縮後の出力からそれを取り戻す方法はありません。

具体的な比較をしてみましょう。.card { border-radius: 8px; box-shadow: 0 1px 3px rgba(0,0,0,.1); }のように整形されたルールは、圧縮すると.card{border-radius:8px;box-shadow:0 1px 3px rgba(0,0,0,.1)}になります——見た目にも明らかに短くなり、数十のルール、コメント、ネストされたメディアクエリを含む完全なスタイルシート全体で見ると、この削減量は通常、元のファイルサイズの20%から40%程度に及びます。

よくある質問

圧縮するとCSSが壊れますか?

いいえ——コメントを取り除き、記号の周りの空白をまとめるだけです。すべてのセレクタ、プロパティ、値、ルールは機能的にまったく同一のまま保たれます。ブラウザは圧縮版と元のバージョンをピクセル単位でまったく同じようにレンダリングします。

圧縮するとなぜサイトが速くなるのですか?

ブラウザは、ページを安全にレンダリングできるようになる前に、CSSファイル全体をダウンロードして解析しなければなりません(これがCSSが「レンダリングをブロックする」と呼ばれる理由です)。ファイルが小さいほどダウンロードは速くなり、特にモバイル回線や低速な接続では効果が大きく、ページが表示されるまでの時間が短縮されます——これはFirst Contentful Paintのような指標を直接改善します。

整形すれば元のソースコードを完全に復元できますか?

完全にはできません。圧縮は、構造以外のあらゆるものにとって一方向の処理です。コメントや開発者が選んだ元の改行位置は、ファイルが圧縮された瞬間に永久に失われます。整形は、圧縮を生き延びる構造的な構文(セレクタ、波括弧、宣言)のみをもとに、きれいで一貫したインデントのバージョンを再構築します。これは通常、スタイルシートを再び読みやすく、差分も取りやすい状態に戻すには十分ですが、著者の元のファイルとまったく同じものにはなりません。

SCSSやLESSの構文にも対応していますか?

このツールは純粋なCSS向けに作られています。Sass/Less特有の構文——ネスト、$colorのような変数、mixin、@include文——は処理されることなく、ほぼそのままの形で通過します。これらの構文はそれ単体では有効なCSSではなく、まずそれぞれのコンパイラ(SassまたはLess)によって標準的なCSSに変換される必要があるためです。

圧縮と整形はそれぞれどんなときに使うべきですか?

圧縮は、本番環境にデプロイする直前、ビルドプロセスの最後のステップとして行いましょう——ユーザーに配信されるべきなのは圧縮済みのファイルであり、サーバー側のgzipやBrotli圧縮と組み合わせれば、さらに容量を削減できます。整形は、サードパーティのライブラリのCSSや、公開中のサイトのDevToolsから取得したファイル、手作業で確認する必要のあるビルド成果物など、圧縮された状態で届いたスタイルシートを読んだり、デバッグしたり、差分を確認したりする必要があるときに使います。

コメント

まだコメントはありません — 最初のコメントを書いてみましょう!

関連ツール