# 通知は取り消せない：直近 72 時間の通知の 19% が誤通知で、関門が通知の「後」に効いていた

> 直近 72 時間に通知した 644 件のうち 122 件（19%）が誤通知だった。記事の関門は後から記事を下げるが、通知は保存の約 0.6 秒後に飛ぶ。下げた 30 件のうち 25 件はもう通知済みだった。通知を送る側の入口に同じ関門を通した記録。

- URL: https://koshinstudio.com/notes/notify-gate/
- 公開: 2026-10-17
- 書いた人: Koshin（https://koshinstudio.com/about/）
- サイト: Koshin Studio

  English version (https://koshinstudio.com/en/notes/notify-gate/)

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

  iOS アプリ「トレカダッシュ (https://koshinstudio.com/works/torecadash/)」は、トレカの抽選販売の情報を集めて、新しい情報が見つかると、利用者のスマートフォンに通知します。集めた記事には、「本当に応募できる抽選か」を確かめる関門（フィルター）があります。当選者の発表、買取の告知、カード以外の商品、などを出さないための仕組みです。

  ところが、2026 年 9 月 20 日の点検で、通知した記事の約 5 件に 1 件が、関門を通るべきではない記事だったと分かりました。関門はあったのに、通知は止まっていませんでした。

  この記事は、2026 年 9 月 20 日の再点検の記録から書いています。

## 直近 72 時間の通知を、全部数えた

  点検の方法は、単純です。直近 72 時間に通知した記事を全部取り出して、1 件ずつ「通知してよかったか」を判定し直しました。

    通知した件数 | 誤通知 | 割合

    644 件 | 122 件 | 19%

  誤通知の内訳は、次のとおりです。

    誤通知の理由 | 件数

      当選者向けの案内（応募できない） | 30

      古い投稿（何日も前の投稿が、新着のように通知された） | 27

      期限切れ | 11

      応募する手段が無い | 14

      カード以外の商品 | 10

      参加条件のある抽選 | 8

      そのほか | 22

## 関門は、「出すか」を後から決めていた

  記事の関門は、あとから記事を「非表示」に下げる形でも働いていました。ところが、通知は、記事を保存した約 0.6 秒後に飛びます。関門が後から記事を下げても、通知は、もう送られています。

  実際に、関門が後から非表示にした記事 30 件のうち、25 件は、すでにプッシュ通知が届いた後でした。画面からは消えても、スマートフォンに届いた通知は、取り消せません。

## もう 1 つの原因：取り戻しで、古い投稿が新着になった

  X の監視が止まっていた期間がありました。9 月 19 日 12:44 から、その分を取り戻す処理が動きました。このとき、9 月 13 日から 18 日の投稿が、新着として 367 件まとめて通知されました。

  止まっていた間の投稿を取り込むのは正しいことです。しかし、「いつ見つけたか」ではなく、投稿の日付で見ないと、何日も前の投稿が、いま出たばかりの情報に見えてしまいます。

## 直し方：通知を送る側で、同じ関門を通す

  直し方は、「保存のときに効く関門」を増やすだけでは足りない、という点にありました。通知は取り消せないので、通知を送る関数の入口に、記事の関門と同じ判定を通すようにしました。

- 判定は、記事を保存する前の関門（screenArticleBeforeSave）に足す。通知を送る関数の入口も、同じ関数を通る。判定が 2 か所に別々に書かれて、食い違うことがない。

- 古い投稿は、保存した日ではなく、投稿日で見る。

- 取り戻しや再起動のあとは、通知を見送った理由の内訳を、必ず確認する。

## 分かったこと

> 取り消せないものは、出す前に止める。

- 関門は、取り消せない出口の手前に置く。画面に出す関門は、あとから下げられます。通知は、下げられません。

- 保存時の判定と、出口の判定は、同じものを使う。片方にだけ足すと、すり抜ける道が残ります。

- 「新しい」は、日付で決める。見つけた日ではなく、投稿された日です。

- 全件を数える。通知した 644 件を 1 件ずつ判定し直して、はじめて 19% と分かりました。

  この話に出てくるもの

- トレカダッシュ (https://koshinstudio.com/works/torecadash/) — トレカの抽選・予約・先着の情報を集める iPhone アプリ

- 確認できなかったときに、通していた (https://koshinstudio.com/notes/fail-open/) — 関門が「通す」側に倒れていた失敗

- 一度だけ生まれた誤字が、店ごとに増えていった (https://koshinstudio.com/notes/typo-catalog/) — 入口の関門と、保険のチェックの限界
