Salesforceで毎晩ステータスを自動更新する定期処理の作り方
期限を過ぎたレコードのステータスを毎朝手で直している場合、決まった時刻に動く定期処理に任せる方法があります。このページでは、スケジュールトリガーフローと、スケジュール済み Apex・Apex 一括処理の違い、作業の流れ、2026年10月時点の制限と注意点をまとめます。
このページは、ご依頼いただける開発の例の解説です。実際の導入事例ではありません。機能の説明は、末尾の Salesforce 公式の資料で確かめた内容です。
この内容で相談するこんなことで困っていませんか
- 決まった時刻に起動毎日・毎週などの頻度で動く
- 条件で対象を選ぶ期限を過ぎたレコードなど
- ステータスを更新フローかApex一括処理で
- 結果を確かめるApexジョブで成否と処理件数
本文の説明を図にしたものです。実際の構成は、組織の設定によって変わります。
なぜ起きるのか
日付が過ぎたことに合わせてステータスを変えるには、誰かがレコードを開かなくても、決まった時刻に動く仕組みが要ります。Salesforce では、スケジュールトリガーフローか、スケジュール済み Apex でこれを用意します。[1][3]
スケジュールトリガーフローは、指定した時刻と頻度で、条件に合うレコードのまとまりに対して動きます。頻度は 1 回、毎日、毎週から選びます。[1]
Apex スケジューラーは、Schedulable インターフェースを実装したクラスを決まった時刻に動かします。Trailhead では、Apex 一括処理を使った日次・週次の保守作業に向く仕組みとして紹介されています。[3][9]
対象が数千件から数百万件になると、通常の処理の制限を超えるおそれがあります。Apex 一括処理は、レコードをバッチに分けて非同期で処理するための仕組みです。[6]
直し方の選択肢
処理の中身と対象の件数で、向く方法が変わります。[1][5][6]
- 方法 1スケジュールトリガーフロー条件に合うレコードの項目を書き換える処理なら、フローで組めます。自動起動フローの開始要素でスケジュールトリガーを設定し、オブジェクト、検索条件、開始時刻、頻度を指定します[1][2]
- 方法 2Apex 一括処理件数が多い処理に向きます。既定では 200 件ずつのトランザクションに分かれ、ガバナ制限はトランザクションごとにリセットされます。すべてのバッチの後に、メール送信などの後処理も組めます[5][6]
- 方法 3スケジュール済み Apex との組み合わせApex スケジューラーから Apex 一括処理を動かし、毎晩決まった時刻に一括処理を始める形です。スケジュールは設定画面からも登録できます[3][9]
作業の流れ
- 対象を決める:どのオブジェクトの、どの条件のレコードを、どの値に変えるかを書き出します[1]
- 件数を見積もる:1 日あたりの対象件数を確かめ、フローの制限に収まるか、Apex 一括処理が要るかを判断します[2][5]
- 作る:フローなら開始要素でスケジュールを設定します。Apex なら Database.Batchable と Schedulable を実装したクラスを書きます[1][4][5]
- テストする:Apex のテストでは、Test.startTest と Test.stopTest の間でジョブを動かし、終わってから結果を確かめます。リリースには最小コードカバー率の要件があります[4][8]
- スケジュールを登録する:[設定] の [クイック検索] に「Apex クラス」と入力し、[Apex クラス] の [Apex をスケジュール] で頻度、開始日、終了日、希望開始時刻を指定します[3]
- 動きを見守る:[スケジュール済みジョブ] で予定を、[Apex ジョブ] で成否や処理件数を確かめます[3][4][7]
気をつけること
- 実行は指定した時刻より遅れる場合があります。Salesforce は、サービスの状況によって遅れると案内しています[3]
- 時刻の基準が違います。スケジュールトリガーフローの開始時刻は組織の既定のタイムゾーン、System.schedule メソッドはユーザーのタイムゾーンが基準です[2][4]
- 2026年10月時点の制限では、同時にスケジュールできる Apex ジョブは 100 件、同時にキューに入れるか実行できる一括処理ジョブは 5 件です。フロー、Apex とも、24 時間あたりの実行数に上限があります[2][4][5]
- 失敗時の戻り方が違います。Apex 一括処理では、後のバッチが失敗しても、先に成功したバッチの更新は戻りません。スケジュールトリガーフローでは、要素の一部のレコードが失敗すると全件がロールバックされ、成功したレコードが再試行されます[2][5]
- 実行する主体を確かめます。スケジューラーはシステムとして動き、ユーザーの権限に関係なくクラスを実行します。スケジュールトリガーフローは、デフォルトのワークフローユーザーが実行します[2][4]
- 有効なスケジュール済みジョブがあるクラスは、画面からは更新できません。メタデータ API を使ったリリースで更新します[4]
想定工数の目安
毎晩の定期処理で、ステータスを自動で更新6〜12時間
想定工数は、要件の確認から動作確認・本番反映の手順までを含む実働時間です。※Salesforce の環境(構築済みの仕組みや設定など、さまざまな要素)や、要件によって工数は大幅に前後するため、あくまでも目安です。
質問と答え
フローと Apex、どちらで作ればよいですか?
条件に合うレコードの値を書き換えるだけなら、スケジュールトリガーフローで組めます。Trailhead では、数千件から数百万件のような大規模な処理には Apex 一括処理を使うよう案内しています。その場合は、スケジュール済み Apex から一括処理を動かす形が候補になります。[1][6][9]
指定した時刻ちょうどに動きますか?
遅れる場合があります。Salesforce は、実際の実行はサービスの状況によって遅れることがあると案内しています。また、1 回だけ実行するよう指定したフローは、その日時が過ぎていると実行されません。[2][3]
処理が失敗したことには、どう気づけますか?
Apex 一括処理では、[Apex ジョブ] ページの [状況の詳細] 列に最初のエラーの説明が表示され、詳細は一括処理クラスを最後に変更したユーザーにメールで届きます。スケジュールトリガーフローでは、組織が制限に達した場合にフローエラーメールが送信されます。[2][7]
Sandbox を更新すると、スケジュール済みフローはどうなりますか?
Sandbox の更新が完了すると、Sandbox で有効だったスケジュール済みフローは、更新後の Sandbox で実行できる状態になります。更新の後は、どのフローが有効になっているかを確かめます。[2]
出典
- スケジュールトリガーフローhelp.salesforce.com/s/articleView?language=ja&type=5&id=platform.flow_concepts_trigger_schedule.htm(2026-10-23 確認)
- スケジュールトリガーフローに関する考慮事項help.salesforce.com/s/articleView?language=ja&type=5&id=platform.flow_considerations_trigger_schedule.htm(2026-10-23 確認)
- Apex ジョブのスケジュールhelp.salesforce.com/s/articleView?language=ja&type=5&id=platform.code_schedule_batch_apex.htm(2026-10-23 確認)
- Apex スケジューラー(Apex 開発者ガイド)developer.salesforce.com/docs/atlas.ja-jp.apexcode.meta/apexcode/apex_scheduler.htm(2026-10-23 確認)
- Apex の一括処理の使用(Apex 開発者ガイド)developer.salesforce.com/docs/atlas.ja-jp.apexcode.meta/apexcode/apex_batch_interface.htm(2026-10-23 確認)
- Apex 一括処理の使用(Trailhead:非同期 Apex)trailhead.salesforce.com/ja/content/learn/modules/asynchronous_apex/async_apex_batch(2026-10-23 確認)
- Apex ジョブキューの監視help.salesforce.com/s/articleView?language=ja&type=5&id=platform.code_apex_job.htm(2026-10-23 確認)
- テストとコードカバー率(Apex 開発者ガイド)developer.salesforce.com/docs/atlas.ja-jp.apexcode.meta/apexcode/apex_code_coverage_intro.htm(2026-10-23 確認)
- Apex スケジューラーを使用したジョブのスケジュール(Trailhead:非同期 Apex)trailhead.salesforce.com/ja/content/learn/modules/asynchronous_apex/async_apex_scheduled(2026-10-23 確認)