Scheduler
服屋のショッピングモールを運営していると考えてみてください。お客さんが最後の一つを買っていくと、その商品の在庫は0になります。また売るには、取引先に発注を入れなければなりません。取引先には、発注を受け付ける窓口がインターネットに開かれていて、決められたアドレスを呼び出すと発注が通るとします。在庫が0の商品を探して、その窓口を呼び出す処理は、Script で作っておいたとします。それでも、問題が一つ残ります。1日に一度、その Script を押してくれる人が必要です。
Scheduler が、その人の代わりをします。「この Script を毎日同じ時刻に実行せよ」と一度決めておけば、その時刻になるたびに WEEGLOO がひとりでに実行します。誰も画面を開く必要はありません。
目覚まし時計を合わせておくことにたとえられます。何時に鳴らすかを一度決めておけば、その後は毎日その時刻にひとりでに鳴ります。このページでは、Scheduler に何を決めておくのか、時刻をどう書くのか、そしてそれが誰の権限で実行されるのかを、服屋の「在庫発注」の例で見ていきます。
決めておくのは三つ
Scheduler 一つに決めておくことは、多くありません。
- 名前: 後で一覧から見分けるためのものです。例:
在庫発注。 - 実行する Script: その時刻になったら実行する Script を一つ選びます。一つの Scheduler は一つの Script だけを実行します。
- いつ実行するか: 下の いつ実行するかの書き方 で扱います。
ここに、オン・オフを切り替えるスイッチがもう一つあります。オフにしておくと、保存はそのまま残り、実行だけがされません。取引先が休む期間のように、しばらく止めておきたいときも、消さずに済みます。
実行する Script は、後から変更できません。 別の Script を実行するには、Scheduler を新しく作ります。名前と時刻、オン・オフは、いつでも直せます。
いつ実行するかの書き方
時刻は五つの欄で書きます。左から 分・時・日・月・曜日 で、* は「すべて」という意味です。
分 時 日 月 曜日
0 9 * * * → 毎日9時ちょうどよく使う形は、次のとおりです。
| 書く値 | いつ実行されるか |
|---|---|
0 0 * * * | 毎日0時ちょうど |
30 9 * * * | 毎日9時30分 |
0 * * * * | 毎時ちょうど |
*/10 * * * * | 10分ごと |
0 0 * * 1 | 毎週月曜日0時ちょうど |
0 0 1 * * | 毎月1日0時ちょうど |
時刻は標準時(UTC)で読み取られます。 地域時間ではないので、地域時間で何時に実行するかを決めたうえで、その差の分だけ計算して書きます。標準時より9時間進んだ地域であれば、そこの朝9時が 0 0 * * * です。在庫発注はこの値、つまり標準時の0時に実行されます。
日付や曜日が入った時刻は、この計算で日付までずれることがあるので、もう一度確認してください。
一度も実行されない値は、保存できません。 たとえば 0 0 30 2 * は2月30日を指しますが、そんな日は来ないので、保存しようとすると値を確認し直すよう求める応答が返ります。
誰の権限で実行されるか
Scheduler が Script を実行するとき、その実行は その Scheduler を作った人 が行ったものとして扱われます。在庫発注 Script が商品を読み、取引先を呼ぶことも、作った人の資格で起こります。
そのため、作ったり直したりするには、二つの権限が一緒に必要です。
- ロール(SpaceRole)に Scheduler の設定権限がなければなりません。
- その Scheduler が実行する Script を実行する権限がなければなりません。
二つ目は、作るときだけでなく、直すときにも確認されます。実行する時刻を変えることは、その Script をいつ実行するかを決めることであり、オフになっているものをオンにすることは、実行を始めることだからです。
作った人が後でその権限を失うと、Scheduler はオフになります。 担当者がチームから外れたり、ロールが狭まったりすると、次の実行時刻に WEEGLOO がそれを確認し、実行しないままスイッチをオフにします。権限が戻ってもスイッチは自動ではオンにならないので、自分でもう一度オンにしなければなりません。
実行履歴を確認する
Scheduler が実行されるたびに、記録が一つずつ残ります。その回が成功したのか失敗したのかが、ここに残ります。昨夜の発注が実際に出たかどうかは、この記録で確認します。
一覧には、各回の実行時刻と結果が表示されます。実行の途中で失敗した回を押すと、その理由を詳細画面のエラー領域でそのまま見ることができます。 かかった時間と一緒に表示されるので、取引先の窓口が応答しなかったせいなのか、別の問題なのかを、この文面で見分けられます。
成功した実行の記録は1時間、失敗した実行の記録は3日後に消えます。 失敗した側が長く残るのは、後で見に行くことになる記録がそちらだからです。発注の記録のように、それより長く残しておきたい値であれば、Script の中で Content として保存してください。
失敗しても、Scheduler は止まりません。取引先の窓口がしばらく応答せず失敗したなら、その回だけが失敗として記録され、次の時刻にまた実行されます。
Webhook と何が違うか
どちらも、人が押さなくても Script を実行するという点は同じです。分かれるのは 何が実行を呼び起こすかです。
- Webhook は 出来事が起きたときに実行します。商品が登録されると、コンテンツが発行されると。
- Scheduler は 時刻になると実行します。何も起きなくても、毎日その時刻に。
在庫発注は、一見すると Webhook が合っているように見えます。在庫が0になるその瞬間に発注すればよいからです。ところが、同じ商品の在庫が一日のうちに0になり、返品で戻ってきて、また0になると、そのたびに発注が出ます。一日に一度まとめて見れば、商品一つに発注も一つです。「起きるたび」ではなく「まとめて一度」であるべき処理が、Scheduler の出番です。
逆に、商品が登録される瞬間に説明を埋める処理は、遅らせる理由がないので Webhook です。
知っておくこと
- 数に上限があります。 一つの Organization が持てる Scheduler の数が、料金プランごとに決まって います(Free 1個、Basic 5個、Pro 30個、Enterprise 無制限)。上限に達すると新しく作れなくなり、使っていない ものを消すと、一枠がまた空きます。
- 実行回数は Script と分け合います。 Scheduler がすることは Script の実行なので、一度実行する たびに、料金プランの Script 実行回数を一つ使います。Scheduler だけの別の上限はありません。その回数を 使い切ると、以降に到来する Scheduler は実行されずにオフになります。この場合は、なぜ始められなかったのか が実行履歴に残ります。翌月になっても自動ではオンにならないので、自分でもう一度オンにしなければなりません。
- 逃した実行は、あとから埋め合わせません。 点検などで一日抜けたからといって、翌日に二度実行することは ありません。次の時刻からまた実行します。
- ある Scheduler が使っている Script は消せません。 その Scheduler をオフにしてあっても 同じです。その Scheduler を先に消してから、Script を消してください。
コンテンツスタジオで管理する
Scheduler は、コンテンツスタジオの Scheduler 画面で作って管理します。一覧には、作っておいた Scheduler が、名前、実行する Script の名前、cron 式、次回の実行、状態、更新日時、更新者と一緒に一行ずつ表示されます。

画面は、二つの欄がそれぞれどの時計なのかも一緒に知らせてくれます。cron 式がある欄の見出しには UTC が、次回の実行 欄の見出しには見ている人のタイムゾーンが UTC±N のように付きます。そのため、保存された値と、それが自分の時間で何時なのかを、同じ行で見ることができます。標準時より遅れたタイムゾーンでは、次回の実行 が前日に見えることがあります。
新しい Scheduler は、一覧の右上の 作成 ボタンで作ります。
- 一覧の右上の 作成 ボタンを押してください。
- 名前の欄に
在庫発注を入力してください。 - 有効 をオンにしておいてください。オフにしておくと、保存はされても実行されません。
- 実行する Script で、在庫発注の Script を選んでください。
- 実行周期 で 直接入力 を選んでください。
- 五つの欄に
0 0 * * *を入力してください。 - 右上の 作成 ボタンを押して保存してください。
画面は、入力した式が実際にいつ実行されるのかも、すぐに見せてくれます。直接入力した式は標準時(UTC)で保存されるという案内と一緒に、保存される cron 値と次回の実行時刻のプレビューが表示されます。

一覧から Scheduler を一つ押すと、その Scheduler の詳細画面が開きます。詳細画面は 実行ログ と 設定 の二つのタブに分かれ、最初に開くと 実行ログ が表示されます。実行ログ タブには、これまで実行された回が一行ずつ表示され、一行ごとに 実行時刻・結果・その回を指す リクエスト ID が表示されます。結果 の欄で、成功した回だけ、または失敗した回だけを選んで見ることができ、ログを更新 を押すと、たった今実行された回まで読み込み直します。

一つの回を押すと、その回の詳細が開きます。ここでは 結果 と一緒に ステータスコード、かかった時間(所要時間)、その回が誰の資格で実行されたか(Run as)が表示され、失敗した回であれば、その理由が エラー 領域にそのまま表示されます。上部には、この回がどの Scheduler のもので、どの Script を実行したのかを知らせるバッジがあり、その Script へのリンクと、同じ回を Script 側の記録で見る Script ログで見る リンクが一緒にあります。

