18
26

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

node.js で定時に処理を実行する

Last updated at Posted at 2019-06-21

この1年、トーク bot のコードばかり書いていた私。
なので、http request がトリガーのプログラムばかり作っておりました。

しかし!この度めでたく、定時アナウンスする bot を作ることになりました!ヾ(´∀`)ノ ワーイ
総務の方が取りまとめている、宅配弁当の受付をもう bot で自動化しちゃおうよ!ってな流れです。
完成したらこちらも記事にしようと思っておりますが、まずは定時処理について。

node.js で定時処理をするには、Node Cron を使います。

Node Cron を使う準備

まずは Node Cron をインストールします。

> npm install node-cron

プログラム内で cronrequire します。

app.js
const cron = require('node-cron');

これで準備完了です!かんたーん('ω')

使い方は本当に簡単!

強いて言えば、時間の設定が逆なことだけ注意ですね。
'秒 分 時 日 月 曜日' の6段階になります。

例えば、毎日9時に実行する場合は…

app.js
cron.schedule('0 0 9 * * *', () => {
    console.log("おはよう!朝ご飯、ちゃんと食べた?( ゚Д゚)");
});

10時と17時に実行する場合は…

app.js
cron.schedule('0 0 10,17 * * *', () => {
    console.log("お茶の時間だよ!適度に休憩しよう( ^^) _旦~~");
});

15時と20時でそれぞれ別の処理を実行する場合は…

app.js
cron.schedule('0 0 15 * * *', () => {
    console.log("おやつの時間だよ!カレー屋さんへ今すぐダッシュ!(*'▽')");
});
cron.schedule('0 0 20 * * *', () => {
    console.log("おやつの時間だよ!屋台のラーメン食べに行こうよ!(*'▽')");
});

定時処理をテストするときに楽な方法

その時間まで待つのはいくらなんでも馬鹿らしいし、前の時間の処理と連動するようなプログラムの場合には単体で動かすわけにもいかないですよね。

そこで!テストする場合には変数を使って現在時刻の1分後を入れるようにしました!(^^)/

app.js
const now = new Date();
let hour = now.getHours();
let min = now.getMinutes() + 1;
if(min == 59){
    min = 0;
    hour++;
}
let eat = false;
//cron.schedule('0 0 7 * * *', () => {
cron.schedule('00 ' + min + ' ' + hour + ' * * *', () => {
    console.log("もう我慢できない!ばくばくばくばく…( ・`д・´)");
    eat = true;
});
//cron.schedule('0 30 7 * * *', () => {
cron.schedule('00 ' + min + ' ' + hour + ' * * *', () => {
    if(eat) console.log("ケ■ッグコーンフ■スティ!ぐぅーれいとぉ!( ゚Д゚)");
});

別に1秒後とかでも良かったのですが、ちょっとくらいのんびりする時間も大事じゃないですか。
始まるまで、肩のストレッチでもしましょう。健康第一♪

なお、本来の動きはコメントアウトしときます。
書き直すの、面倒ですからね!(`・ω・´)キリッ

他にも使い方は色々!

cron.schedule の設定はこちらの記事で、とてもわかりやすくまとめてくれています。
Node.jsで定期実行メモ

私の解説などよりとても見やすいですね。
ほんと、先輩方には頭が下がります。感謝。

#おわりに
ここまでお付き合いいただきありがとうございました。
cron さんと少し仲良くなれて嬉しいです。
もっと仲良くなりたいですね。

でも、時間で動いてくれると『プログラム』って感じで凄くいいですね!
・・・そんなことないですかね?私だけですかね。

ではまた!(^^)/

#参考にさせていただきましたm(_ _)m
LINEWORKS Developers
Node Cron
Node.jsで定期実行メモ

18
26
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
18
26

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?