LoginSignup
54
54

More than 5 years have passed since last update.

gruntからgulpに乗り換えることにした

Last updated at Posted at 2014-06-07

久々にnodeを書くことがあり、grunt.jsじゃなくてgulp.jsを使ってみた結果gulpの方が圧倒的に良かったので、その素晴らしさの片鱗を味わってもらおうと思う。

jadeファイルをhtmlに変換するタスク

まず、src/jade ディレクトリにあるjadeファイルをhtmlに変換するタスクはこんな風に書ける。既にめっちゃ短い。

gulpfile.js
var gulp = require('gulp'),
    jade = require('gulp-jade');

gulp.task('jade', function () {
  gulp.src('src/jade/*.jade')      // gulp.src でファイルを指定
    .pipe(jade())                  // jade plugin に通して
    .pipe(gulp.dest('./static/'))  // gulp.dest で書きだす
});

gulp jade コマンドを実行するとタスクが走る。

watchする

重要なのはここ

ファイルを監視して変更があったら自動的にコンパイルするようにしたくなったとする。
gruntだと新しいタスクを追加してから既存のタスクと結合する、みたいなことを書かないといけないが、 gulpの場合、なんと実質 たった一行追加するだけ で完了する。

gulpfile.js
var gulp = require('gulp'),
    jade = require('gulp-jade'),
    watch = require('gulp-watch'); // plugin 追加

gulp.task('jade', function () {
  gulp.src('src/jade/*.jade')
    .pipe(watch())  // ここを追加しただけ!
    .pipe(jade())
    .pipe(gulp.dest('./static/'))
});

直列に並んだタスクに新しいものを追加する場合は、今見たように .pipe() で追加したいタスクを間に挟み込めば完了する。いかにもUNIX的で分かりやすい。

Webサーバも立てる

では並列化したい場合はどうするかというと、 gulp.task の依存関係を使って記述する。例えば、さっきのjadeタスクと同時にWebサーバを起動したい場合

gulpfile.js
// サーバを起動するタスク
gulp.task('server', function () { /* .. */ });
// さっきのjadeタスク
gulp.task('jade',   function () { /* .. */ });

// server と jade を並列でつなぐ
gulp.task('default', ['server', 'jade']);

do one thing wellな機能をpipeで直列につなぎ、出来上がったタスクをさらに前後に並べることができる。もうgruntを使うのはやめることにする。

54
54
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
54
54