先着が始まった瞬間、サイトが順番待ちのページになる:8,000 バイトの関門を、15KB の案内ページがすり抜けた

English version

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

iOS アプリ「トレカダッシュ」は、通販サイトの販売ページを定期的に読んで、先着や抽選の情報を集めています。前に書いたとおり、「取れた」の判定に穴があり、案内ページを成功と読んでいた事件がありました。その判定を直したのと同じ日(2026 年 9 月 7 日)のうちに、同じ種類の穴が、別の形でもう 1 つ見つかりました。

しかも、それは、いちばん取りこぼしてはいけない瞬間に起きていました。

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

先着が始まった瞬間に、サイトが順番待ちのページになる

報告が来ました。「イオンスタイルオンラインにも、先着があるみたいだよ」「14 時ちょうどに、販売が始まったみたい」。そこで、その時刻に、実際に取得を試しました。

取得の方法結果
素のリクエスト403(ボット対策で拒否)
取得サービスの安い設定200、15,188 バイト、題名「アクセス集中によるお知らせ」
取得サービスの super200、15,188 バイト、同じ
取得サービスの super + render200、15,459 バイト、同じ

先着が始まった瞬間、サイト全体が、順番待ちのページになります。どの設定で取っても、返ってくるのは、同じ案内ページです。

8,000 バイトの関門を、15KB の案内ページがすり抜けた

この日の先に入れた「取れていない」の判定は、8,000 バイト未満の短いページの中の、JavaScript を求める案内を見るものでした。大きなページには、まっとうなページにも、同じ一文が常に入っているからです。

ところが、この順番待ちのページは約 15KB あります。関門をすり抜けて、「取得は成功。商品は 0 件」と読まれていました。いちばん取りこぼしてはいけない瞬間に、静かに取りこぼす状態です。

直し方は、ページの大きさではなく、題名(title)を見ることでした。題名に「アクセス集中」や「順番にご案内」が出ているときは、失敗として扱います。本文の一部に、その言葉が出ているだけの、まっとうなページを巻き込まないよう、見る場所を題名に限りました。

あわせて、頻度を 3 時間おきから 15 分おきにしました。1 回約 21 クレジットと高めですが、1 日に約 6,000 クレジットで、残量の 92% に収まります。

同じ日に見つけた、もう 2 つの「遅さ」

先着の速さを測っていて、別の原因も見つかりました。

Amazon の 13 分は、「取得」ではなく、「AI の審査」だった。Amazon の監視は 30 分おきで、1 回のスキャンに 13 分かかり、最悪で約 43 分の遅れがありました。計器で見ると、時間の使い道は、新しい出品の AI による審査(1 日 421 回、約 10 円)でした。取得そのものは、1 日 1,047 クレジットで安い。原因は、15 のジャンルを、1 つずつ直列に処理していたことでした。ジャンルどうしは独立なので、4 本を並列にして、間隔を 10 分、1 回を 8 分にしました。AI の審査は、新しい出品だけに走るので、巡回の回数が増えても、費用は増えません。

速く見つけても、17% は通知していなかった。見つけることが速くなっても、その先の通知が止まっていれば、意味がありません。通知が届いた数を数えたら、まだ穴がありました(通知の数を数えた話は、別の記事に書いています)。

分かったこと

判定の穴は、いちばん大事な瞬間に、いちばん広がる。

この話に出てくるもの

ほかの記録

コメント

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

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