gulp.task

Orchestratorを使用してタスク(task)を定義します。

gulp.task(name[, deps], fn)

gulp.task('somename', function() {
  // タスクの処理をここに書きます
});
引数 説明
name タスク名を指定します。 コマンドライン上から実行したいタスクの場合は、空白を含めないでください。
deps

型:Array

このタスクを実行する前に、実行して完了させるタスクを配列で指定します。

gulp.task('mytask', ['array', 'of', 'task', 'names'], function() {
  // タスクの処理をここに書きます
});

注意:
依存しているタスクが完了する前に、タスクが実行していますか? 依存しているタスクの非同期実行が正しいことを確認してください。

ヒント:
コールバックを受け取るか、promiseまたはイベントストリームを返してください。

fn

実行するタスク処理の関数を指定します。 一般的に、このタスクはgulp.src().pipe(someplugin())の形式になります。

非同期タスクのサポート

fnが下記のいずれかを行う場合、タスクは非同期になります。

コールバックを受け付け
// シェル内のコマンドを実行
var exec = require('child_process').exec;
gulp.task('jekyll', function(cb) {
  // Jekyllのbuild
  exec('jekyll build', function(err) {
    if (err) return cb(err); // エラーを返す
    cb(); // タスク完了
  });
});
ストリームを返す
gulp.task('somename', function() {
  var stream = gulp.src('client/**/*.js')
    .pipe(minify())
    .pipe(gulp.dest('build'));
  return stream;
});
promiseを返す
var Q = require('q');

gulp.task('somename', function() {
  var deferred = Q.defer();

  // do async stuff
  setTimeout(function() {
    deferred.resolve();
  }, 1);

  return deferred.promise;
});

注意:
デフォルトでは、タスクは最大限並列処理されます。 例えば、全てのタスクが待機することなく一斉に実行されます。 もし、特定の順番で実行するタスクの種類分けをしたいのであれば、2つのことを行う必要があります。

  • タスク完了時にそれを知らせ、
  • 他のタスクの完了に依存するタスクの情報を与えます。

例をもとに確認するために、2つのタスクがあると仮定し、 "one"と"two"のタスクを下記の順に実行したいとします。

  1. タスク"one"では、タスクが完了した際にそれを通知する処理を追加します。 コールバックを取得して完了時にそのコールバックを呼び出すか、 解決(resovle)または終了を待つ必要のあるエンジンであるpromiseまたはstreamを返します。
  2. タスク"two"では、ひとつ目のタスクの完了に依存することを伝えます。

まとめると、この例は次のようになります。

var gulp = require('gulp');

// コールバックを受け取るため、エンジンは完了時にそれを知ることができます
gulp.task('one', function(cb) {
    // 非同期または何かの処理
    cb(err); // errがnullでもundefinedでもない場合、
             // 実行は停止され、失敗したことが通知されます
});

// 開始前に完了していなければならない依存タスクを指定します
gulp.task('two', ['one'], function() {
    // ここでは、タスク'one'は完了済み
});

gulp.task('default', ['one', 'two']);

 Back to top

© 2010 - 2017 STUDIO KINGDOM