gulpタスク実行中にエラーが出たらデスクトップ通知を出す

  • 143
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

watchしながら作業してるときにコンパイルエラーなんかが起こってたときに、ターミナルにエラーメッセージが出てるけど気づけないときがあったので通知を導入した。

gulp-notifyを使う

エラーが出たときにgulpを終了させないgulp-plumberと、通知を出すgulp-notifyを使う。

gulp-plumberはタスク実行中にerrorイベントが発生したときに実行するerrorHandlerを指定することができる。errorHandlerにnotifyを指定すれば通知を出せる。

gulpfile

CoffeeScriptのコンパイルを例に。

var gulp = require('gulp');
var plumber = require('gulp-plumber');
var notify = require('gulp-notify');
var coffee = require('gulp-coffee');

gulp.task('coffee', function() {
    return gulp.src('src/coffee/**/*.coffee')
        .pipe(plumber({errorHandler: notify.onError('<%= error.message %>')})
        .pipe(coffee())
        .pipe(gulp.dest('app/assets/js');
});

plumber()を挟むときに一緒に{errorHandler: notify.onError('<%= error.message %>')}を引数にしておく。

エラーが出ると通知

watchしつつ上記タスクが実行されたときにコンパイルエラーが出ると通知が出る。

2014-08-13 06_50_51.gif

簡単便利。


node-notifierを使う

node-notifierを使う。こっちはerrorじゃないときでも好きなとこで通知を出せる。

gulpfile

var gulp = require('gulp');
var plumber = require('gulp-plumber');
var coffee = require('gulp-coffee');
var Notifier = require('node-notifier');
var notifier = new Notifier();

var errorHandler = function(error) {
        notifier.notify({
            message: error.message,
            title: error.plugin,
            sound: 'Glass'
        });
    };

gulp.task('coffee', function() {
    return gulp.src('src/coffee/**/*.coffee')
        .pipe(plumber({errorHandler: errorHandler)})
        .pipe(coffee())
        .pipe(gulp.dest('app/assets/js');
});

タスク実行してエラーが出ると チーン♪ という音とともに通知が出る。soundに指定出来る音は

ls /System/Library/Sounds

で出てくるファイル名が指定できる。指定できるオプションは他にも色々あってnode-notifierのページで確認できる。

notifier.notify({
"title": "Phil Coulson",
"subtitle": "Agent of S.H.I.E.L.D.",
"message": "If I come out, will you shoot me? 'Cause then I won't come out.",
"sound": "Funk", // case sensitive
"contentImage": _dirname + "/coulson.jpg",
"appIcon": __dirname + "/coulson.jpg",
"open": "file://" + _
dirname + "/coulson.jpg"
});

node-notifierの場合はエラーハンドリングに限らず、タスクが終わったときに通知出したり色々とカスタマイズできる。