2
1

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 1 year has passed since last update.

BunAdvent Calendar 2023

Day 15

【Bun】ElysiaのCron Pluginを使ってみる

Last updated at Posted at 2023-12-02

定期的なジョブのスケジュール設定を管理するためのコマンドとして 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 の恩恵にあずかれるかも。

bun node_modules は削除しても大丈夫
$ rm -rf node_modules

サンプル

では、cronのサンプルを書いてみます。

cron-1.js ファイルを書く
$ vi cron-1.js

2秒ごとに現在時間を5回出力するというcronです。

cron-1.js
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

実行結果

結果
$ 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 関連の記事

2
1
0

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
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?