Gruntをよく使うようになったけど、プロジェクトの中心にどっかと存在していると不自由なことが多い気がするなーと感じている。Gruntべったり、つまりプロジェクトをGruntに強く依存させるとポータブルである保証のあるタスクだけを使う(書く)ことを強いられる。Gruntはその雑な自由度が良い所で、そこに何かしらの制限が加わってしまうのはその良さを低減させてしまうと思う。

Node.js自体にクロスプラットフォームだけどさほど書かれるスクリプトのポータビリティを意識した作りになってないような印象を持っている。そのためその上で動くGruntでポータビリティとかなんの冗談だとか思ってしまう。

Gruntの開発チームが公式にメンテナンスしているgrunt-contrib-*は確かに安定して優秀で、大体のことはポータブルなそれらで事足りたりする。だけど簡単なタスクを書いて使いたい時はもちろんあるし、実績がなく書いた人のことすらよくわからないプラグインをちょっと使いたい時もある。プロジェクトが強くGruntに依存する場合、そんなものにポータビリティを持たせたり、テストを書いたり、場合によってはGruntプラグインとしてパッケージングしなくちゃならなかったり、楽しくない作業を強いられる。

僕はGruntの良さは各プロジェクトとその開発者の環境のそれぞれに特化したタスクを自由に走らせられることだと思っていて、いくつかのタスクに変わるものを自前で用意できる人はそれを使っても良いみたいなゆるい感じで使えたり、最悪使わなくても良かったりするのがキモだと信じてる。悪い言い方をすればその場しのぎできるというか。

環境のすり合わせがきっちりと行われているようなプロジェクトならGruntべったりでも良いのかもしれないけど、多くの場合はそうではないと思う。grunt-contrib-sassを使っても、Gruntでnode-sassを叩くタスクを書いて使っても、素のSassを使っても、Scoutを使っても許されるようなプロジェクトだと開発者にストレスを与えなくて済むんじゃないかなと。


プロジェクトのルートでは好きにやらせるようにGruntfile.jsを作らない。そして特定のサブディレクトリにそのプロジェクトで標準になるポータブルで安定したタスクを定義したGruntfile.jsを置いておく。というのがみんな幸せになれる気がする。逆のルートに標準タスク、サブディレクトリに自分の好きなタスクだと、自分の作業に手間取るので、ルートを残しておいた方が良い。

プロジェクトの定型作業の標準化はGruntでもできないことはないけど、もっと上のレイヤーでやった方が良い。Gruntではそこに至るまでの各人の作業の自動化を目的として、それ以上にもそれ以下にもしないのが小回りがきいて真価を発揮できるのではないか。