matsukaz's blog

Agile, node.js, ruby, AWS, cocos2d-xなどなどいろいろやってます

hubot-scheduleをリリースしました


hubot-scheduleって?

hubotで動作するスケジューラです。
cron形式日時形式の2つの形式でメッセージをスケジュール登録できます。

使い方

コマンド一覧

Hubot> hubot help schedule
Hubot schedule [add|new] "<datetime pattern>" <message> - Schedule a message that runs on a specific date and time
Hubot schedule [add|new] "<cron pattern>" <message> - Schedule a message that runs recurrently
Hubot schedule [cancel|del|delete|remove] <id> - Cancel the schedule
Hubot schedule [upd|update] <id> <message> - Update scheduled message
Hubot schedule list - List all scheduled messages

利用例

Hubot> hubot schedule add "2015-01-16 10:00" スクリプトをリリースするよ!
6738: Schedule created

Hubot> hubot schedule add "0 10 * * 1-5" 朝のコーヒー淹れ忘れないでね :)
9735: Schedule created

Hubot> hubot schedule list
6738: [ Fri Jan 16 2015 10:00:00 GMT+0900 (JST) ] #Shell スクリプトをリリースするよ!
9735: [ 0 10 * * 1-5 ] #Shell 朝のコーヒー淹れ忘れないでね :)

Hubot> hubot schedule update 6738 スクリプトをリリースしてみんなにシェアしよう!
6738: Scheduled message updated

Hubot> hubot schedule list
6738: [ Fri Jan 16 2015 10:00:00 GMT+0900 (JST) ] #Shell スクリプトをリリースしてみんなにシェアしよう!
9735: [ 0 10 * * 1-5 ] #Shell 朝のコーヒー淹れ忘れないでね :)

(2015-01-16 10:00:00になると以下が投稿され、スケジュールから削除される)
スクリプトをリリースしてみんなにシェアしよう!

Hubot> hubot schedule list
9735: [ 0 10 * * 1-5 ] #Shell 朝のコーヒー淹れ忘れないでね :)

Hubot> hubot schedule del 6738
6738: Schedule canceled

Hubot> hubot schedule list
Message is not scheduled

なんで作ったの?

hubotのスケジューラは、探してみた限りだと以下のものがあります。

cronでリピートするかインターバル指定のものしかなくて、指定日時ピッタリに一度だけ動くスケジューラが欲しくて作りました。

hubot-cronとかぶってる?

cron指定の方はもろかぶりです、すみません(;´Д`)
hubot-cronは内部的にはncb000gt/node-cron · GitHubを使っていますが、こちらはmattpat/node-schedule · GitHubを利用しています。
node-scheduleが日時指定だけでなくcron指定にも対応していたので、そちらも合わせて対応してみた感じです。
cron指定と日時指定ができるなら、両方一緒に管理出来た方がいいでしょうし。
内部実装もhubot-cronをものすごく参考にさせて頂きました!><

hubot-cronとの違い

  • 日時指定をサポート
  • コマンドをhubot schedule xxxで統一したので覚えやすい(hubot-cronはhubot list jobsとかhubot new jobみたいに動詞が頭にきてたので覚えづらかった)
  • cron指定時の月は一般的な1〜12(hubot-cronは0〜11指定だった)
  • コマンドを少し追加
    • スケジュールはそのままで、メッセージだけ変更できるupdateコマンド
  • Redis再起動でジョブが重複登録される問題にも対応

あたり。
細かい話だと、hubot-brainの保存にはアクセサメソッドをちゃんと利用してるとか。

逆に、hubot-cronはタイムゾーンをサポートしていますが、こちらはまだしてないです。
なのでcronの時間はサーバが起動している環境に依存してます。
時間指定の方は、2015-01-15 10:00-08:00みたいにISOオフセットも合わせて指定すればいいかと。

というわけで

社内でも使い始めたばかりなので、何か不具合などありましたらぜひぜひ教えて下さい!
ご要望もお待ちしております。




BrainWarsのDL数が1000万超えましたぁ!ヽ(=´▽`=)ノ