CSSポストプロセッサーの必要性
(postcss嫌いだけど)
— CSSきれいに書くマン (@m0rishitter) 2014, 7月 8
@m0rishitter why you hates PostCSS? :)
— Andrey Sitnik (@andreysitnik) 2014, 7月 8
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氏との会話の続き
@andreysitnik I think PostCSS is very useful for parsing CSS because its nice API :) But, I think PostCSS caused confusion.
— CSSきれいに書くマン (@m0rishitter) 2014, 7月 8
@m0rishitter what confusion do you mean?
— Andrey Sitnik (@andreysitnik) 2014, 7月 8
@andreysitnik maybe, PostCSS made concept of "css postprocess". i think this is good idea, but i think this definition is ambiguous too.
— CSSきれいに書くマン (@m0rishitter) 2014, 7月 8
@andreysitnik for example, i think postcss-vars is not domain of postprocess.
— CSSきれいに書くマン (@m0rishitter) 2014, 7月 8
@m0rishitter yeap, maybe separation between preprocessors and postprocessors is not good idea :). I will think about new description.
— Andrey Sitnik (@andreysitnik) 2014, 7月 8
@andreysitnik i think we don't have to do any process (without minify, concat, etc..) after compiling if preprocessor is perfect.
— CSSきれいに書くマン (@m0rishitter) 2014, 7月 8
@andreysitnik why do you think css postprocessor is nesessary? for easy to reviewing?
— CSSきれいに書くマン (@m0rishitter) 2014, 7月 8
@m0rishitter to make Autoprefixer or Pleeease Filters. Some of task is difficult to write by Sass mixin, but easy to do with JS
— Andrey Sitnik (@andreysitnik) 2014, 7月 8
せっかくリプライもらったしこれでもかと絡んでみた。 ai氏もプリプロセッサーとポストプロセッサーに分けるのは良くないから新しい説明考えるよって言ってた。
拙い英語に付き合ってくれて、ai氏いい人だった。 日頃から英語勉強しとかないとやばいと思った。