のらねこの気まま暮らし

技術系だけど、Qiita向きではないポエムとかを書くめったに更新されないヤツ

node-scheduleという予定を登録して実行するnpmライブラリの紹介

node.jsを使っていて出会った、使い勝手の良さそうなライブラリ(俺基準)を紹介していくシリーズを初めてみました。

node-schedule

https://www.npmjs.org/package/node-schedule

指定時間に登録したタスクを実行してくれるライブラリです。 Dateオブジェクト、日時指定、時刻指定、CRON形式での指定等に対応し、非常に使い勝手が良いです。

installation

npm install 

usage

scheduleJobメソッドを呼び出すことでタスクが登録されます。

第一引数に実行タイミング、第二引数にジョブ名(省略可)、第三引数に実行したいタスクを登録します。 返り値はJobオブジェクトです。

var schedule = require("node-schedule");
var job = schedule.scheduleJob(timing, name, fn);

JobオブジェクトはEventEmitterを利用しており、いくつかのフックポイントが提供されています。

  • scheduled: タスクの登録時
  • run: タスク実行
  • cahceled: 予定のキャンセル時
job.on("scheduled", function () {
  console.log(this.name + "の予定が登録されました");
});
job.on("run", function () {
  console.log(this.name + "の予定が実行されました");
});
job.on("canceled", function () {
  console.log(this.name + "の予定がキャンセルされました");
});

Dateオブジェクトを使う場合

下記は2014/07/05 22:30:00に処理を実行する場合の例です。

var job = schedule.scheduleJob(new Date(2014, 07, 05, 22, 30, 0), function () {
  console.log("登録されたジョブの実行");
});

日時を指定する場合

以下の項目をオブジェクトで定義します。

  • year
  • month
  • day
  • dayOfWeek
  • hour
  • minute
  • second

下記は毎日18:30に処理を実行する場合の例です。

var job = schedule.scheduleJob({
  hour   : 18
  minute:  30
}, function () {
  console.log("実行");
});

CRON形式

下記は毎日18:30に処理を実行する場合の例です。 -による範囲指定は可能ですが、/による指定はできないようです。(たぶん)

var job = schedule.scheduleJob('30 18 * * *', function () {
  console.log("実行");
}); 

まとめ

node-scheduleはご覧の通り、特定日時や特定時間での繰り返し処理に向いています。 記法が多岐に渡り、様々なタイマー処理に適応できます。

ちなみに僕はIRCBotでミーティングや予定のリマインドに利用しています。 ぜひ使ってみてください