「次回へ」と出続けていた 25 本の点検は、一度も走っていなかった:3 つの時間予算を、同じ開始時刻から数えていた

English version

トレカダッシュ 開発の記録 / 2026年9月

iOS アプリ「トレカダッシュ」の裏側には、記事の「販売の形式」を点検して直す処理があります。この処理の中に、「持ち回りで 25 本の点検を順に走らせる」部分がありました。

2026 年 9 月 11 日に、処理の各段の所要時間を測る計器をつけると、その 25 本は、一度も走っていなかったことが分かりました。ログには、「時間予算のため 18 件を次回へ」と出続けていました。この「18 件」は、一部ではなく、全部という意味でした。

数字は、2026 年 9 月 11 日の作業の記録から書いています。

3 つの予算が、同じ開始時刻から数えられていた

この処理は、3 段構えでした。それぞれに、時間の予算があります。

段予算実測
① 本体のループ420 秒425 秒を使い切る
② 毎回走る枠780 秒(通算)実際に使えるのは 360 秒。861 秒で終了
③ 持ち回りの 25 本700 秒(通算)②が 700 秒を超えるので、毎回 0 本

3 つの予算は、同じ開始時刻から数えられていました。①が 420 秒、②は通算で 780 秒、③は通算で 700 秒。一見、段ごとに余裕があるように見えます。しかし、②は「通算 780 秒」のうち、①が 425 秒を使ったあとの 360 秒しか使えません。そして、②が終わった時点(861 秒)で、③の「通算 700 秒」は、とうに過ぎています。③は、毎回、始まる前に、「予算切れ」と判断されて、0 本でした。

ログの「時間予算のため 18 件を次回へ」は、毎回、全部を次回へ回していました。「次回」は、永久に来ません。

直し方:勘で広げず、制限時間から割り付ける

予算の数字を、勘で広げるのは、やめました。代わりに、ジョブそのものの制限時間から、割り付ける形にしました。制限時間は 1 か所(REPAIR_SALE_TYPES_TIMEOUT_SEC)にだけ書き、各段の締め切りは、それに割合を掛けて出します。

段締め切り(制限時間に対する割合)
① 本体23%
② 毎回走る枠67%
③ 持ち回り93%

制限時間は、1,800 秒にしました。段の締め切りは、前の段の続きでなく、全体に対する割合なので、前の段が使い切っても、後ろの段の予算は残ります。

計器を足す:どの段が重いか、見えていなかった

もう 1 つの原因は、「12 本のうち、どれが重いのか」が分からないまま、上限だけを広げていたことです。そこで、1 ステップごとの所要秒数を、ログに出すようにしました。実測の、重い順です。

ステップ所要
通知済みの非表示記事に、代わりの記事を付ける119 秒
告知画像の QR から、応募先を探す102 秒
定価の目安の、単位を直す48 秒
定価の目安を、写す46 秒
応募先も応募方法も無い記事を直す41 秒

分かったこと

「次回へ」は、次回が来ると決まっているときだけ、意味がある。

この話に出てくるもの

ほかの記録

コメント

感想や、記事の間違いの指摘は、ここへ。書くには、GitHub のアカウントが要ります。

押すと、giscus(giscus.app)と GitHub に接続します。押さなければ、接続しません。詳しくはあつかいに書いています。