定期的なジョブのスケジュール設定を管理するためのコマンドとして unix系では crontab が良く使われますが、スケジュール設定を Elysia で使えるようにしたのが
Bun > Cron Plugin です
このプラグインは、npm の croner を Elysia へ拡張したという事で、基本的には同様の動作をします。
インストール
cron のプラグインをインストールします。Elysia自体のインストールはこちらなどをご参照ください(https://qiita.com/toshirot/items/579d6f7cf7dfa787f291)
$ bun add @elysiajs/cron
生成ファイルはこうなりました。
./mycrons/
│ ├─bun.lockb
│ └─node_modules
│ ├─@elysiajs
│ ├─@sinclair
│ ├─cookie
│ ├─croner
│ ├─elysia
│ ├─eventemitter3
│ ├─ast-decode-uri-component
│ ├─fast-querystring
│ ├─memoirist
│ ├─moment
│ └─openapi-types
└─package.json
この node_modules は、もしもこの cron を Bun のみで使いNode.js を使わないなら、キャッシュは「~/.bun/install/cache」にあるので、削除しても大丈夫というか、無い方が Bun の恩恵にあずかれるかも。
$ rm -rf node_modules
サンプル
では、cronのサンプルを書いてみます。
$ vi cron-1.js
2秒ごとに現在時間を5回出力するというcronです。
mport { Elysia } from 'elysia'
import { cron } from '@elysiajs/cron'
new Elysia()
.use(
cron({
name: 'time is',
pattern: '*/2 * * * * *',
maxRuns: 5, //最大実行数
run() {
// 現在時間を出力する
// ja-JPの場合は月日が2桁ではなく1桁になるので
// 参考 ja-JP 2023/1/8 14:37:31
// ここではスウェーデンのsv-SEを利用した
// 参考 sv-SE 2023-01-08 14:37:31
// xh-ZA 2023-01-08 14:37:31
// lt-LT 2023-01-08 14:37:31
// https://mseeeen.msen.jp/sql-format-datetime-string-with-javascript-without-library/
const date = new Date()
.toLocaleString('sv-SE')
console.log('now is ', date)
}
})
)
実行する
$ bun cron-1.js
実行結果
$ bun cron-1.js
now is 2023-12-02 15:54:42
now is 2023-12-02 15:54:44
now is 2023-12-02 15:54:46
now is 2023-12-02 15:54:48
now is 2023-12-02 15:54:50
まぁ「pattern: '*/2 * * * * *'」の部分がスケジュールする時間という事で、crontabと同様に次のような設定になります。
構文パターン
// ┌──────────────── (optional) second (0 - 59)
// │ ┌────────────── minute (0 - 59)
// │ │ ┌──────────── hour (0 - 23)
// │ │ │ ┌────────── day of month (1 - 31)
// │ │ │ │ ┌──────── month (1 - 12, JAN-DEC)
// │ │ │ │ │ ┌────── day of week (0 - 6, SUN-Mon)
// │ │ │ │ │ │ (0 to 6 are Sunday to Saturday; 7 is Sunday, the same as 0)
// │ │ │ │ │ │
// * * * * * *
ドキュメントについてはcronnercronと同じ構文を使用するため、 cronner のドキュメント(https://github.com/hexagon/croner) を参照してくださいとのことです。
※でもこのサンプルは5回実行したら終わりなので、あとでもっと crontab らしいサンプルを追加しょうかな。
最近 Qiita に書いた Bun 関連の記事