CSSの圧縮を行うCLIツール兼モジュール、CSSWringをPostCSSを使って書いた。PostCSSの内蔵機能+正規表現でゴリ押しみたいな感じなので、テストあるけど不安しか無い……。CLIに至ってはテスト書いてない。意義的にはPostCSSを使った最適化の一角を担える圧縮ツールというもの。CLIの方は少し前にちょっと書いたminimistを使ってる。
/*!
と/*#
で始まるコメント以外の削除0
の値から単位の削除0
の削除@charset
を最初のひとつに制限以上を行っている。空白文字とコメント、セミコロン、空のルールセットの削除のみをデフォルトにして、それ以外はオプションにしても良い気がする。
CSSに限らずJavaScriptも含めて最終的にgzipするという前提ならば、圧縮する作業コストが無駄だという論理は成り立つ。デメリットはあまりないが、Gruntやgulp.jsがある今はメリットもあまりない。一方少しでも配信サイズを小さくするというのはフロントエンドにおいては絶対とも言われてきたルールのひとつだ。デメリットは圧縮された時に混入したバグを探査しづらいこと。僕は圧縮時にバグが混入する可能性は低いと考えているので、できるかぎり圧縮した方が良いと考えていた。
JavaScriptにおいてはGoogle Closure Compilerがあり、CSSにはgrunt-combine-media-queriesやgrunt-uncssがある。こういったminify (圧縮)ではなくoptimize (最適化)を主眼において、空白の削除を始めとした圧縮それ自体は補助的なものと捉え直した方が良いのかなと今は考えている。
CSSにおいてそういった最適化ツール(達)がPostCSSで提供されたと仮定し、その補助を目的としてCSSWringは作った。