Menu

Cron Job Configuration Guide

cronジョブは自動運用に欠かせない要素であり、データ同期、キャッシュ更新、レポート生成などの反復的なタスクを定期的に実行するのに役立ちます。

このガイドでは、主流のデプロイプラットフォームであるVercelとDokployでcronジョブを設定する方法を紹介し、ナビゲーションサイトの自動管理を可能にします。

準備

cronジョブの設定を開始する前に、以下の準備手順を完了してください:

  1. CRON_SECRETの生成

CRON_SECRETは、cronジョブリクエストの正当性を検証し、不正なアクセスを防ぐために使用されるセキュリティキーです。

生成方法(いずれかを選択):

方法A:オンラインツールを使用

  1. https://generate-secret.vercel.app/32にアクセス
  2. 生成されたランダム文字列をコピー

方法B:コマンドライン(Mac/Linux)を使用

openssl rand -base64 32

生成後、この文字列をプロジェクトの環境変数CRON_SECRETに追加してください。

  1. cronジョブエンドポイントの実装を完了

cronジョブの動作原理は、システムが定期的にアプリケーションへHTTPリクエストを送信し、特定のタスク処理ロジックを含む事前に作成されたエンドポイントをトリガーすることです。そのため、cronジョブを設定する前に以下が必要です:

  • プロジェクト内にcronジョブエンドポイントを作成(例:/api/cron/task1
  • エンドポイントに具体的なビジネスロジックを実装
  • 正当なリクエストのみがタスクをトリガーできるようCRON_SECRET検証を追加

Vercelプラットフォームの設定

注目すべき点

Vercelの無料アカウントでは、cronジョブを1つのみ作成できます。

VercelはVercel Cron Jobs機能を使用してスケジュールタスクを実行します。設定手順は以下の通りです:

プロジェクトのルートディレクトリにvercel.jsonファイルを作成または編集してください:

vercel.json
{
  "crons": [
    {
      "path": "/api/cron/task1",
      "schedule": "0 0 * * *"
    },
    {
      "path": "/api/cron/task2",
      "schedule": "0 2 * * 1"
    }
  ]
}

cron式の説明

  • 0 0 * * * - 毎日午前0時(UTC時間)
  • 0 2 * * 1 - 毎週月曜日午前2時(UTC時間)

タイムゾーンに関する注意:Vercel CronはUTC時間を使用します。

デプロイ後、VercelプロジェクトのSettings > Cron Jobsで設定されたcronジョブを確認できます。

Dokployプラットフォームの設定

Dokployは、管理パネルで直接作成および管理できる、より柔軟なcronジョブ設定方法を提供しています。

設定手順:

  1. cronジョブを作成する必要があるサービス管理パネルに入る
  2. Schedulesタブを見つける
  3. 新しいcronジョブを作成するためクリック
dokploy schedules
dokploy schedules

フォームに以下のように入力してください:

  • Task Name:任意のタスク名
  • Schedule:cron式、例:0 0 * * *(毎日深夜0時に実行)
  • Shell Type:Shを選択
  • Commandwget --header="Authorization: Bearer <前の手順で生成したCRON_SECRET>" --post-data="" -O- https://<あなたのドメイン>/api/<cronジョブエンドポイントのパス>

コードのデプロイ後、cronジョブをテストしたい場合は、パネル上の実行ボタンをクリックして即座に実行できます。

dokploy schedules

cron式リファレンス

┌───────────── 分(0 - 59)
│ ┌───────────── 時(0 - 23)
│ │ ┌───────────── 日(1 - 31)
│ │ │ ┌───────────── 月(1 - 12)
│ │ │ │ ┌───────────── 曜日(0 - 6)(日曜日=0)
│ │ │ │ │
* * * * *

例:

  • 0 2 * * * - 毎日午前2時
  • 0 2 * * 1 - 毎週月曜日午前2時
  • 0 */6 * * * - 6時間ごと
  • 0 0 1 * * - 毎月1日午前0時