小学生でもわかる AI図鑑
速報
  1. ホーム
  2. 小学生でもわかるConvex
  3. 第8話

Convex 第8話

【小学生でもわかる】Convexを時間で動かす!数秒後の予約と、日本の朝7時台に毎日動く仕組み

毎朝7時に動くように書いたつもりの処理が、なぜか夕方の4時に動いている。決まった時刻にアプリを動かそうとすると、起こりやすいずれです。Convex の「5秒後に1回だけ動く予約」と「決まった時刻のくり返し」を、自分のパソコンで動かします。日本の朝7時台にするには数字をどう書くのか、予約は失敗したらやり直されるのか、止めたいときはどこを消すのかを確かめます。

  • 予約とくり返し(cron)は無料(Free)で使える。手元だけの置き場ではプランの量は減らないが、クラウドの置き場では、動いた1回ごとに関数の呼び出し(Free は月100万回。チーム単位の合計)に数えられる
Xで記事を読む シェア
時間で動かすのカバー

どんな話?

外の API を呼ぶ命令と、5秒後に自分から消えるメッセージをチャットに足し、1分ごとのくり返しで動きを見てから、日本の朝7時台に毎日動く形を書きました。時刻は UTC なので、朝7時台は hourUTC: 22(前の日)。公式が「ちょうど1回」と約束するのは予約された書く命令だけで、外に出る命令は失敗したままやり直されませんでした。練習の1分ごとは消し、にせの鍵を環境変数に入れて読み、「時刻の早見」を1枚作ります。

この記事でわかること

  • 予約(Scheduled Functions)は、命令の中から入れる「あとで1回だけ」の約束で、runAfter と runAt がある。くり返し(Cron Jobs)は、convex/crons.ts に書く時間割。どちらも、読む命令は動かせない
  • 5秒と頼んだ予約は、制作の6回で 5.2〜5.5秒後に動いた。時刻ぴったりに動くという約束は、公式の説明書にない
  • 公式の約束は、予約された書く命令が「ちょうど1回(exactly once)」、外に出る命令が「多くて1回(at most once)」。存在しないページを渡した外に出る命令は、state が failed のまま、やり直されなかった
  • 時刻は UTC。日本の朝7時台は hourUTC: 22(前の日)で、7 と書くと日本の16時に動く(エラーは出ない)。minuteUTC を省くと分は Convex が決め、置き場ごとにちがった(10:03・10:43・10:05)
  • 予約やくり返しで動いた1回は、関数の呼び出しに数える。1分ごとなら、30日の月で無料の量の約4.3%。1秒ごとは、それだけで無料の量をこえる
  • npx convex env list は、値まで画面に出る(名前だけなら --names-only)。PowerShell で縦棒(|)でつなぐ形は、値の最後に、目に見えない改行の文字が1つ付いた(4回とも)

やることチェックリスト

0/6

記事を読みながら、できたものにチェックを付けていけます。チェックはこの端末に残ります。

くわしい手順と画面の図は、Xの記事にあります。

こんな人に

  • 毎朝7時に動くように書いたつもりの処理が、なぜか夕方の4時に動いている人
  • 予約した処理は、失敗したらやり直されるのかを知りたい人
  • 外の API の鍵を、コードに書かずにどこへ置くのかを知りたい人

この話のTIPS

  • 注意crons.daily の hourUTC は、名前のとおり UTC の「時」。日本時間に直す設定は、公式の説明書に見当たりません。計算は、日本の時刻から9を引くだけ。答えがマイナスになったら24を足し、「前の日」と読みます。朝7時なら、7−9=−2、24を足して22(前の日の夜10時)。hourUTC: 7 と書くと、日本の16時に動きます。エラーは出ません。
  • 注意公式が「ちょうど1回動かす」と約束しているのは、予約された書く命令まで。それも、自分のコードのまちがいで失敗したぶんは、やり直されません。外の API を呼ぶ、メールを送る、といった仕事は外に出る命令なので、「予約したから必ず届く」とは考えないでおきます。
すべてのTIPS