---
title: スケジュールジョブ
description: スケジュールジョブは、Google Cloud Scheduler のように、決まった時刻に組織のアプリへ HTTP 呼び出しを 1 回行います。
url: https://agentlab.cresclab.com/docs/ja/deploy/scheduled-jobs
language: ja
updated: 2026-10-06
---

# スケジュールジョブ

スケジュールジョブは、Google Cloud Scheduler のように、決まった時刻に組織のアプリへ HTTP 呼び出しを 1 回行います。

## ジョブの構成

呼び出しは、その時点で公開中のバージョンに届きます。

| 項目         | 説明                                                                                                          |
| ------------ | ------------------------------------------------------------------------------------------------------------- |
| アプリ       | 呼び出すコンテナアプリ。                                                                                      |
| パス         | アプリのアドレスの後ろに付けます。`/` で始まり、クエリ文字列も使えます。例：`/tasks/daily`                    |
| メソッド     | `GET`、`POST`、`PUT`、`PATCH`、`DELETE`。既定は `POST` です。本文を送るのは `POST`、`PUT`、`PATCH` だけです。 |
| スケジュール | 5 つのフィールドの cron 式（分、時、日、月、曜日）。最短で 1 分に 1 回です。                                  |
| タイムゾーン | 既定は `Asia/Taipei` です。                                                                                   |

cron 式の例：

| 式             | 実行タイミング |
| -------------- | -------------- |
| `0 9 * * *`    | 毎日 9:00      |
| `*/15 * * * *` | 15 分ごと      |
| `0 8 * * 1`    | 毎週月曜 8:00  |
| `0 0 1 * *`    | 毎月 1 日 0:00 |

## ジョブを作成する

1. **アプリにエンドポイントを追加する** 例：`POST /tasks/daily` に定期処理を実装し、デプロイして公開します。
2. **ジョブを作成する** 「デプロイ › スケジュールジョブ」を開き、アプリ、パス、スケジュールを指定します。
3. **手動で 1 回実行する** 「今すぐ実行」で試し、実行履歴でレスポンスコードとログを確認します。

## 呼び出し元を確認する

既定では、呼び出しに送信元を証明する情報は付きません。次のどちらかを選びます。

- ジョブに `X-Cron-Secret` などの独自ヘッダーを設定し、値をアプリのシークレットとして保存して、コードで照合します。
- 署名付きトークンを有効にします。呼び出しに `Authorization: Bearer <JWT>` が付くので、`https://api.agentlab.cresclab.com/.well-known/jwks.json` で検証します。`aud` は `franky:app:<アプリ ID>` です。

## 実行の動作

| 項目     | 動作                                                                                                   |
| -------- | ------------------------------------------------------------------------------------------------------ |
| 重複実行 | 重なりません。前回の実行中に予定時刻が来た回はスキップされます。                                       |
| 配信     | 少なくとも 1 回。同じ実行が 2 回届くことがあるので、`X-Franky-Run-Id` ヘッダーで重複を除いてください。 |
| 再試行   | 既定は 0 回、最大 5 回です。                                                                           |
| 期限     | 15 秒〜30 分。既定は 3 分です。                                                                        |

```js server.js
const runId = req.headers["x-franky-run-id"];
if (await alreadyHandled(runId)) {
  res.writeHead(200).end();
  return;
}
```
