Next.jsいいよね
エンジニアのわくてかです。最近 Next.jsとfirestoreできもちよく開発しています。
一緒にサービス開発したい人募集してます
https://wktq.me/hackable
今まではユーザーに定期タスクを登録してもらい、タスクで指定した日時にcronジョブを走らせるという実装をしたく調べてみたら、Cron s a Serviceみたいなのが結構あるようで、easycronがジョブ登録APIもあり一番シンプルだったので使ってみました。
ほとんどNext.js関係ないです。タグは釣りです。すみません。
easycronに登録してアクセストークンを取得
↑からメールアドレスとパスワードを登録します(WEBからジョブ登録するだけなら登録しなくても使える)
easycon APIの叩き方
めちゃくちゃシンプルなAPIとなっており、methodを指定してメタデータをparamsで渡すだけです。アクセストークンもparamsに含めます。
https://www.easycron.com/rest/[method]?token=[token]&name=value
以下のようなmethodが用意されています。
- list
- add
- detail
- edit
- enable
- disable
- delete
- logs
- log
- timezone
jobを作成する
今回は新規のタスクを登録したいので、addのドキュメントを見てみます。
https://www.easycron.com/document/add
必須パラメータは、先ほど取得したトークン、叩くURL、cron表記の3つです。
対応しているcronの書き方は↓にまとまっています。
https://www.easycron.com/faq/What-cron-expression-does-easycron-support
タイムゾーンはデフォルトでeasycronに登録した際のユーザーのタイムゾーンを使うようになっています。
const data = {
token: process.env.EASYCRON_TOKEN,
url: "http://google.com",
cron_expression: "00 14 * * 3", // 毎週水曜日の午後2時に実行
// auth_user: 'hoge', // basic認証も対応
// auth_password: 'password',
};
const param = {
method: "POST",
headers: {
"Content-Type": "application/json",
},
body: JSON.stringify(data),
};
const res = await fetch("https://www.easycron.com/rest/add", param);
成功したらcron_jobのidが帰ってきます。
{"status":"success","cron_job_id":"3291692"}
jobを削除する
完全な削除と、無効化・有効化があります。全て形式は同じです。
- 完全に削除する場合
https://www.easycron.com/rest/delete?token=[token]&id=2107
- disableする場合
https://www.easycron.com/rest/disable?token=[token]&id=2107
- disableしたものを再度有効化したい場合
https://www.easycron.com/rest/enable?token=[token]&id=2107
おまけ
ユーザーにcron記法を教えるのは大変なので、cron用のinputがあります。Reactも対応してます。
価格
https://www.easycron.com/user/plan
個人利用だったら無料で使えます。
APIからジョブを登録する場合は年間契約が必要です。
$12 / 年のプランに登録すると、一日4,000ジョブまで、分ごとの日時指定ができます。
参考記事