「変な記事がめっちゃ増えてる」:作られた経路ごとに数えて入口を塞いだ。数え方も 2 回、間違えた

English version

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

iOS アプリ「トレカダッシュ」について、ユーザーから、こういう指示が来ました。「変な記事が、めっちゃ増えてる。締切も入っていないし、おかしい記事ばかり。恒久的に解決して。ほかの経路で作った記事も、徹底的に調べて」。

この記事は、記事を作られた経路ごとに数えて、入口を塞いだ記録です。そして、数え方を、2 回間違えた記録でもあります。

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

経路ごとに、数えた

記事は、いくつかの経路(X の店の公式の投稿、店のサイト、まとめサイト、AI による探索など)で作られます。経路ごとに、どんな「変な記事」があるかを、数えました。

経路抽選締切なし検索結果が行き先トップページが行き先まとめ自身が行き先
X(店の公式)11811010
店のサイト(直接)631100
まとめサイト A3933328
まとめサイト B2811015
AI による探索42000
合計252584413

数え方を、2 回、訂正した

  1. 最初は、全記事で数えて、「1,398 件中 1,204 件が、締切なし(86%)」と出しました。締切は、抽選だけの概念です。先着の販売(1,055 件)と予約(91 件)には、元々ありません。項目の意味を、確かめずに数えました。
  2. 「保存された塊が、別の店(98%)」と書きましたが、実際は、投稿の全文が保存されていて、先頭がたまたま Amazon だっただけでした。先頭のマーカーだけを見て、断定しました。

見つけた穴と、直し

1. まとめの表に残る「終わった回」を、毎日取り込んでいた(33 件)

相手のまとめサイトは、過去の回も、表に残します。実データでは、あるお店の「7 月 13 日〜14 日」を、8 月 27 日に取り込み、締切は過去なので採用されず、締切が空の記事になっていました。締切が無いと、「締切が過ぎたら消す」仕組みが働かず、永久に残ります。

入口を、3 段で塞ぎました。

実地で確かめました。印を消して、取り込みを再実行し、24 店を読んで、新規は 0 件でした。

2. 応募リンクが、応募ページでなかった(報告 5 件)

検索結果のページ(?keywords=)や、サイトのトップページが、行き先として採用されていました。応募リンクを採用する、唯一の関門に、「検索結果の URL らしさ」と「トップページの URL らしさ」の判定を足しました。全部の経路が、この関門 1 本を通るので、ここだけで効きます。

3. 記事が投稿の全文を持ち、読む側が切り忘れると、先頭の店を読む(39 件)

記事の元の文(sourceText)には、その店の塊だけを入れるようにしました。全文は、検証用に、別の項目へ。読む側が何をしても、別の店の値を拾えない形にしました。

4. 締切が、自分の店の行と食い違っていた(6 件中 5 件)

締切は、「本文の塊、応募リンク先、添付の画像」の順に探します。しかし、あとの 2 つは、その店の情報とは限りません。実データでは、保存された締切と、その店の行が、53 日、18 日、20 日ずれていました。どれも、終わった抽選が、受付中として並ぶ状態です。

「終わりが明示されたときだけ返す」関数を作り、締切を確定させる最後に、行と食い違ったら、行を信じる関門を入れました。注意点は、「6 月 19 日〜」のような、始まりだけの行でも、その日を返す関数を、そのまま上書きに使ってはいけないことです。

掃除は、ドライランから

どちらの修復も、毎日 4 時 20 分と 4 時 30 分に、自動で実行するようにしました(190 個から 192 個)。

結果

対応前対応後
表示中の抽選252 件199 件
締切なし58 件25 件
まとめ A 由来の締切なし33 件0 件
締切が過ぎたまま表示5 件0 件
「相手は終了、こちらは受付中」12 件7 件

残る 7 件は、こちらが新しい回をつかんでいる側の可能性が高いものです(相手の表が古い)。

分かったこと

経路ごとに数える。そして、数え方そのものを疑う。

この話に出てくるもの

ほかの記録

コメント

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

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