gulpでdeploy作業を行なっているのですが、処理に時間がかかるので、なんか通知みたいなのできないかなと思い、調べてみると良いモジュールがあったのでそのメモ。
#node-notifier
node-notifierを使うとNode.jsでデスクトップ通知ができるようです。
https://github.com/mikaelbr/node-notifier
さっそくインストールしてみます。
$npm install --save-dev node-notifier
package.jsonに追加されます。
"devDependencies": {
"node-notifier": "5.3.0",
}
#node-notifierを使用する
使用するときは以下のように使います。
const notifier = require('node-notifier');
notifier.notify({
title: 'タイトル',
message: 'メッセージ',
});
アイコンやサウンドも設定できるようです。
const notifier = require('node-notifier');
const path = require('path');
notifier.notify({
title: 'タイトル',
message: 'メッセージ',
icon: path.join(__dirname, '/images/hogehoge.png'), // 画像
sound: 'Funk', // Basso, Blow, Bottle, Frog, Funk, Glass, Hero, Morse, Ping, Pop, Purr, Sosumi, Submarine, Tinkから選択
// trueだとデフォルトのBottle
});
他にも色々オプションがあるようです。
#gulpと組み合わせる
gulpで完了したときとエラー発生したときに通知送りたいなと思いまして、組み合わせてみました。
#成功時の通知
まずはタスクが成功したときの処理。
そのままでは使えないっぽいので、gulp-notifyを使用します。
$npm install --save-dev gulp-notify
gulp-notifyがインストールされました。
"devDependencies": {
"gulp-notify": "^3.2.0",
}
成功したときの通知はタスクの最後にpipeで繋げることにします。
const gulp = require("gulp");
const gulpnotify = require('gulp-notify');
const path = require('path');
gulp.task('deploy', (cb) => {
gulp.src(['src/**'], { base: '.' })
// 本処理
.pipe(hogehoge())
// 処理の最後に通知する
.pipe(gulpnotify({
title: 'deploy完了しました',
icon: path.join(__dirname, '/images/hogehoge.png'),
sound: 'Funk',
}));
});
これで処理が完了した時に通知されるようになりました。
#失敗時の通知
失敗したときは通知はgulp-plumberと組み合わせます。
gulp-plumberを使用すればgulpのエラーハンドリングができます。
$npm install --save-dev gulp-plumber
"devDependencies": {
"gulp-plumber": "^1.2.1",
}
エラー処理を記述し、gulp-plumberでエラー時に実行させます。
const gulp = require("gulp");
const gulpnotify = require('gulp-notify');
const path = require('path');
const plumber = require("gulp-plumber");
gulp.task('deploy', (cb) => {
gulp.src(['src/**'], { base: '.' })
// gulp-plumberでエラーハンドリング
.pipe(plumber({errorHandler: (error) => { // エラー処理
// エラー処理を記述
hogehogeError();
// エラー通知
notifier.notify({
title: '実行エラー',
message: error.message,
icon: path.join(__dirname, '/images/hogehoge.png'),
sound: 'Funk',
});
cb(error);
}}))
// 本処理
.pipe(hogehoge())
// 処理の最後に通知する
.pipe(gulpnotify({
title: 'deploy完了しました',
icon: path.join(__dirname, '/images/hogehoge.png'),
sound: 'Funk',
}));
});
これでエラー時にも通知が届くようになり、deploy中に他の作業が気兼ねなくできるようになりました!