Closed14

next.jsでバックグラウンド処理を実行する方法を整理する

TakagishiTakagishi

シンプルなジョブはvercelのEdge Functionsで良さそう

https://x.com/jrsyo/status/1633513329678491648
https://vercel.com/docs/functions/functions-api-reference#waituntil

とてもシンプル
https://vercel.com/guides/how-to-setup-cron-jobs-on-vercel
https://vercel.com/blog/cron-jobs

app routerでもapiルートで使うのがデフォな感じする(cronでスケジューリングして外から処理を行うんだからそうか)
https://vercel.com/docs/cron-jobs/quickstart

TakagishiTakagishi

cron(読:クロン、クーロン、クローン)とは
UNIX系のOS(Linuxとか)に入っているプログラムのひとつ
であり
事前に「いついつになったら、このプログラムを動かしてね」と指示を出しておくと、その時間になったときに指定しておいたプログラムを動かしてくれるやつ
です。
https://wa3.i-3-i.info/word11748.html

cronだとunix系の話で、該当手法がunixかは不明なら
・スケジュールドタスク
・スケジューラー
・スケジューリングタスク
・定期バッチ処理
など呼ぶのが良さそう。バッチ処理を定期実行の処理として呼ぶのはどうなのかといった記事を見た気がするが忘れた。

バッチ処理(バッチしょり)とは、コンピュータで1つの流れのプログラム群(ジョブ)を順次に実行すること。あらかじめ定めた処理を一度に行うことを示すコンピュータ用語。反対語は対話処理・インタラクティブ処理またはリアルタイム処理。
引用: Wikipedia - バッチ処理
つまりWebアクセスのようなリアルタイム処理ではなく、毎時とか日次とか月次とかでまとめて処理を行う方式です。
https://qiita.com/koduki/items/e90ee1fea5aa75071d95

TakagishiTakagishi

参考:
https://vercel.com/templates/next.js/vercel-cron

デモ:
https://cron-template.vercel.app/

下記のようにapiを呼び出してスケジューリングできる。

solutions/cron/vercel.json

{
  "buildCommand": "pnpm turbo build",
  "ignoreCommand": "pnpm dlx turbo-ignore",
  "crons": [
    {
      "path": "/api/cron/1m",
      "schedule": "* * * * *"
    },
    {
      "path": "/api/cron/10m",
      "schedule": "*/10 * * * *"
    },
    {
      "path": "/api/cron/1h",
      "schedule": "0 * * * *"
    },
    {
      "path": "/api/cron/12h",
      "schedule": "0 */12 * * *"
    },
    {
      "path": "/api/cron/1d",
      "schedule": "0 0 * * *"
    },
    {
      "path": "/api/cron/1w",
      "schedule": "0 0 * * 0"
    },
    {
      "path": "/api/cron/1mo",
      "schedule": "0 0 1 * *"
    }
  ]
}
このスクラップは2024/07/03にクローズされました