CSSポストプロセッサーの必要性

PostCSSというかCSSのポストプロセッサーにいろいろ思うところがあったのでツイートしたら、作者のai氏からリプライ来て震えた。

ai氏はベンダープレフィックスを自動で付与するツールAutoprefixerを作ってる人。 Autoprefixerはもともとreworkというプリプロセスを定義するフレームワークを使ってたけど、Autoprefixerがやってることはプリプロセスっていうよりポストプロセスじゃね?って考えてreworkとほぼ同機能のPostCSSを作ってそれに乗り換えた。

PostCSSは、CSSのポストプロセスを定義するためのフレームワーク。 僕はPostCSS自体はCSSをパースしてごにょごにょするための便利なAPIが備わっていて良いものだと思っている。しかしポストプロセスという概念が微妙だと感じている。

PostCSSの登場により、いくつかのポストプロセスのためのプラグインが作られた。 今はまだ数はすくないけど、中にはpostcss-varsのような本来はプリプロセスでするべきものもある。

CSSに対するどのような処理がプリプロセスなのかポストプロセスなのか、境界が曖昧になっている。 個人的には、minifyやconcat、CSScombのようなプロパティの順序を入れ替えるものをポストプロセスと定義すべきだと思う。 いや、ポストプロセスという言葉も使わない方がいいかもしれない。 JavaScriptでもminifyやconcatはするが、それをポストプロセスと呼ぶことはない。 CSSの場合はプリプロセスという言葉があったから、ポストプロセスという名前になっただけだ。

だからAutoprefixerはポストプロセスではないと思うし、現に僕が作ってるCSSプリプロセッサーではコンパイル前にAutoprefixerを使っている。 コンパイルされた結果に何か処理を加えたいと思うのはコンパイラプリプロセッサー)に問題があるので、プリプロセッサーを良い方向に持っていく方が健全だ。

CSSプリプロセッサーとポストプロセッサーについてはもっと考えをまとめられたらまたブログに書こうと思う。


ai氏との会話の続き

せっかくリプライもらったしこれでもかと絡んでみた。 ai氏もプリプロセッサーとポストプロセッサーに分けるのは良くないから新しい説明考えるよって言ってた。

拙い英語に付き合ってくれて、ai氏いい人だった。 日頃から英語勉強しとかないとやばいと思った。