AutoprefixerMyth経由で話題になったRework。そしてAutoprefixerが乗り換えたPostCSS。両者はどのようなことに主眼を置いているライブラリなのか、SassやLESSとの関係はどうなのか、そしてどのようなツールを書く時にそれらを使うべきなのだろうか。

Rework

ReworkはCSSをプリプロセスするためのライブラリということになっている。サポートされているかどうかよくわからない最先端の標準仕様のドラフトに従って書かれたCSSをブラウザーがちゃんと解釈できるようにするとか、特殊な記法を展開するとか、だ。こういった現実世界ではうまく動かないCSSをプリプロセスしてちゃんと動くCSSに変換するツールを作るためのものということになる。

SassやLESSと同じ立ち位置のものを作るためのものなので、共存させることにはあまり意味が無い(まったく無いわけではない)。現状のSassやLESSは安定しており、高機能で、開発も活発なので、これらと並ぶ機能性のものをReworkを使って作るのは無理がある。ウェブ標準の変化に左右されやすいという点でも、独自に実装していけば良いSassやLESSに小回りという点で劣る。

つまり、SassやLESSのようにCSSに大きなレイヤーを付け加えるのではなく、Mythのようなウェブ標準と実装のギャップを埋めるような形のツールを作るのに向いているということだ。ウェブ標準と実装のギャップが少なくなればなるほど、CSSから乖離しつつあるSassやLESSよりもMyth (のようなReworkを使ったCSSプリプロセッサー)の方がより快適なCSSプリプロセッサーと成っていくはずだ。

PostCSS

PostCSSは反対に、既にCSSとしてはほとんど問題のないものをポストプロセスして、より効果的なCSSに変換するためのライブラリだ。SassやLESS、またはMythでざっと書いて、PostCSSを使ったツールに機械的に行っても問題のないような作業を任せるということになる。

SassやLESSは拡張性という点でかなりの難点がある。Sassはちょっと難しいことをしようとしたらRubyに触らなければならないし、その利用を汎用化させるのは難しい。Compassを利用することによりある程度解消されるが、必ずしも自分の必要な物があるとは限らない。LESSはJavaScriptで書けるので敷居は大幅に下がるが、利用の汎用化が難しいのは同じだ。

PostCSSならばパーサーに便利機能が付いたという形のものなので、単機能のツールに限れば実装はストレートに行える可能性が高い。SassやLESSに欠けている機能をPostCSSを使って単機能のツールとして作り、Gruntを始めとしたタスク・ランナーやビルド・ツールでまとめて実行させるというのは、コスト(作成時及び実行時)はそこそこかかるものの、そこそこ賢い選択肢と言える。


SassやLESSが浸透した現在、Rework印のCSSプリプロセッサーが支持を確保するのは難しい。ただ複雑化し、し続けるであろうCSSプリプロセッサーに対する反発は少なからずあるので、今後は存在感を増していくだろう。今のSassのように幅広い人々に支持されるかは未知だが、コンパクトで愛される良いプリプロセッサー言語が出てくる可能性は高い。

一方PostCSSは、それを使った単機能のツールが数多く出て来ないと広まる可能性は低い。理由は単純で、無くても力技や運用でどうにかなることが多い辺りを改善しようというものだからだ。もし様々な単機能ツールが提供されるような状況になったら、プロジェクトに必要そうな物を必要なだけ導入し、そのプロジェクトに最適化されたCSSを提供しやすくなる。Source Mapへの柔軟な対応など生態系の充実へのカギになりそうな機能はあるので、期待はできる。

ReworkやMythにおいてはあまりやれることはなさそうだが、PostCSSにおいては色々なツールを書くことで、比較的手軽に貢献できそうな気がする。様子を見つつ、PostCSSを使っていくつかポストプロセッサーを書いていこうと思う。