Takazudolog

Takazudo's blog on GitHub

RSS Takazudo

Grunt v0.4.0 での変更点

| Comments

  • [ JavaScript ]
  • [ grunt ]
  • [ build ]

Grunt がめでたく version 0.4.0 になりました。version 0.3.xからの変更点をざっくり。自分で昔書いたタスクを書きなおす上で必要だったことのみですけど。

箇条書きで書くとこんなかんじでした。

  • ドキュメントがめっちゃ親切になった
  • Grunt本体はグローバルにインストールされなくなった
  • grunt-cliのみをグローバルにインストールすればOK
  • ビルトインのタスクは全てnpm moduleになった
  • Grunt本家がビルトインで存在していたタスクをnpm moduleとして用意した
  • コンフィグのファイルはgrunt.jsではなく、Gruntfile.js及びGruntfile.coffeeになった
  • コンフィグのファイル及びタスクはCoffeeScriptで書いても良くなった
  • タスク内でイベントが使えるようになった
  • テンプレート機能が改善
  • registerHelperが無くなった

ドキュメントが整備された件

今までは頑張ってソースを読んだりなどもしなければ細かくはわかりませんでしたけど、かなり親切にドキュメントが用意されました。順に読んでいけば分かる感じになってます。cool

Grunt本体はグローバルにインストールされなくなった件

今まで、Grunt本体は、npm install -g gruntで、グローバルにインストールしなければなりませんでした。しかし、これには問題がありました。その大きな理由は、異なるGruntのバージョンがインストールされている環境では、動かない可能性があるということです。私のマシンには v0.3.2 だけど あなたのマシンには v0.3.4 が入っていて、このプロジェクト、こっちの環境ではは動くけどあなたの環境では動かない。あーしかし複数のプロジェクトでGrunt使ってるのでアップデートも難しいなー…。ということがありましたが、これからはこれが無くなります。

Gruntは、grunt-cli というものを用意しました。これは、npm install -g grunt-cliでグローバルにインストールします。これをやらないと、Gruntは使えません。grunt-cliをインストールすると、gruntコマンドが使えるようになります。

ありゃ?それって変わってなくない?と思いきやそうではないのです。grunt-cli自体は、ローカルにインストールされたGruntを実行するということをだけをやる、非常に小さいコマンドです。Grunt本体はどうするかというと、そのプロジェクトのディレクトリに、ローカルにインストールします。

今まで、ローカルにインストールするのは、npm taskだけでした。しかし、v0.4からは、Grunt自身もpackage.jsondevDependenciesとしてバージョンとともに指定し、ローカルにインストールする必要があります。で、gruntコマンドである、grunt-cliは、そのローカルのGruntを実行するだけのコマンドになので、プロジェクトごとに、異なるバージョンのGruntを使い分けることができるようになった - ってことみたいです。

ビルトインのタスクは全てnpm moduleになった件

今まで、watchとかconcatとかminとか、最初っから存在していたタスクは、全て無くなりました。その代わりに、これらは、独立したnpm moduleとして存在することとなりました。これらのタスクは、以下のプラグインのページより探すことができます。

contrib-で始まるものは全て、Grunt Teamが用意したタスクのようです。今までビルトインで存在していたタスクは、全て存在しています。今までのGruntプロジェクトをアップデートする場合は、使っていたビルトインのタスクを、loadNpmTasksで読み込む必要があります。コンフィグファイルの書き方は、ほとんど変わっていないので、比較的スムーズに移行できる感じです。

このようにビルトインのタスクが独立したため、Grunt自体が担う機能は、Gruntのベースとなる部分に絞られました。こうしないと、ビルトインのタスクが無限に増えてGrunt自体がどんどんでかくなってしまうため、将来性を考慮した設計と言えそうです。

ついでに、npm taskは、どこの誰が作ったか分からない、動作するか、将来的にもメンテされていくのか不安があるものでした(個人の感想)。Grunt Teamが作った公式のnpm taskが用意されることで、これらのnpm taskの動作は、かなり信頼性のあるものであると思っていいんじゃないでしょうか。

Gruntfile.js / Gruntfile.coffee

今までコンフィグのファイルはgrunt.jsでしたが、これからはGruntfile.jsGruntfile.coffeeです。RakeFileMakeFileと合わせたんじゃないでしょうか多分。

CoffeeScript

Gruntfile.coffeeの拡張子から分かるように、CoffeeScriptも利用可能になりました。タスクのファイルも同様です。こういうコンフィグを書く分には、CoffeeScriptはシンプルに書けるというメリットしかなさそうなので、いい感じなんじゃないでしょうか。

タスク内でイベントが使えるようになった

今まで、タスクをまたいだ処理は書きづらいものとなっていました。ですがv0.4.0からは、イベントが実装されたので、かなり自由に処理を書くことができます。

テンプレート機能が改善

今まで、コンフィグ内の他のプロパティを読む場合、'<config:taskName.src>'とかいう書き方でしたが、これは'<%= taskName.src %>'と、Gruntのテンプレート機能を使うようになりました。よりテンプレート機能が汎用的なものとなったようです。

registerHelperが無くなった

今まで、タスク間をまたぐ処理は、grunt.registerHelperを経由して行なっていました。ですが、このregisterHelperは、Gruntの名前空間に自前のヘルパー関数を登録するような感じです。これを使うと、タスク同士でヘルパー名が競合する可能性がありました。よって、この機能は無くなりました。

複数のタスクで共有される機能を使う場合は、その共通機能自体をタスクとして別立てにするか、普通にrequireして読み込ませるかのどちらかの方法を取る必要があります。

という感じで、Grunt v0.4.0はイケてるなーと思いました。
今まで使ってた人は、「アップデートせなーーー!」と思うでしょうが、そこまで大変じゃないかと思います。自分でタスク書いてた人は諸々変える必要がありますけど。

私自身は、ちょっとしたタスクを自分で書いていたため、これを機に、v0.4.0に合わせて書き直しました。自分でタスク書きたいけどどう書くのか分からんという人は覗いてみると参考になる部分があるかもしれないです。

自分のタスクを整理していて思いましたが、Gruntがリリースされて日がそんなに経っていない頃と比べると、npm taskの数と品質がずっと上がっており、たぶん、普通のことをしたいのであれば、自分でタスクを書く必要はもうあんまりないかと思います。いやーGruntすごいなー。

Comments