競合相手のプロモーションのため、公式プラグイン一覧からの削除されたこと

全世界的にPostCSSが盛り上がってきたので、他の最小化ツールなどは出てるのかなと公式のプラグイン一覧を参照したところ、全然関係のないことに気付いてしまった。確か以前はCSSWringがちゃんと載っていたように思ったが、消されていた。なんかやらかしたとか出来が悪いとかならばしょうがないというところだが、どうもcssnanoのプロモートのために消されたようだ。おっと。

こういう独自のプラグイン・エコシステムを持つツールでは、様々な理由でプラグインが粛清されることがある。ここのところだとgulpがブラックリストを作っていることが有名だろう。そういうスタンス自体にそもそも賛成することはできないけれども、ツールにもそれぞれ哲学のようなものがあるはずなので、それから外れていたらしょうがないのかなとは考えている。

今回のケースもそうであるのかもしれないが、後出しで消されるとなかなかショックは大きい。それなりに機能していたとも思うのでなおさらだ。


さて、僕があまり競合相手であるところのcssnanoに興味を持っていないのは、プラグインのプラグインとでも言うような世界観がどうも理解できないからだ。npmというレイヤーも含めればプラグイン(npmパッケージ)のプラグインのプラグインとも言える。整理されているように見えるが、僕には無駄な複雑さを追加しているように感じる。

確かにCSSの最小化のような様々なアプローチを組み合わせる仕組みでは小さい単位でモジュール化することが重要だろう。でもそれらをひとつひとつプラグインとして作って、それらをまとめて走らせるランナーをプラグインとして用意するというのはどうなのだろうか。よく言われる「Do One Thing」は正しい言葉なのだけど、ことツールに関してはその単位は機能ではない。ユーザーがやりたいことが単位になっているべきだろう。

ここでは多くの人々はCSSの最小化をやりたいわけで、そのための機能が分離している必要はほとんどない。常にできうる限り最小化した結果が必要だからだ。時と場合と人によってやりたいことが変わってしまうLinter(例えばESLint)のような仕組みとはかなり違う。メンテナンス性という点では意味はあるだろうが、それはNode.jsのモジュール・システムでも十分にカバーできるだろう。

となるとcssnanoで使われているPostCSSプラグインには、存在価値がほとんどないのではないかと思う。単体で使われることがほとんどないことになるからだ。cssnanoそのものにはもちろん存在価値はあるが、その構成はちょっと理解できない。PostCSSのメジャー・バージョンアップ時にとんでもない手間になりそうという点も保守するのが辛そうで理解に苦しむ。もし開発が投げられたらこれを引き継ぐのはかなりの苦行だろう。


必要な機能を必要なだけ揃えるというような観点でCSSWringは作っている。その必要というのは僕がユーザーとして、でそれ以上でもそれ以下でもない。そういった開発姿勢がPostCSSの開発者の哲学とかみ合わないということなのだろう。

revertしてプルリクエストしてみたい気もするが、そこまでの気力はなかった。気力を消費しても得るものがなさそうという方が近いだろうか。