
重複投稿ガードの穴チェック|二度出す条件と止まる条件を出す
重複ガードは、両方向に壊れます
「同じものが2回出た」を直そうとすると、たいてい今度は「1本も出なくなる」ほうに倒れます。逆も同じです。この2つは同じ履歴の作りから同時に生まれるので、片方だけ見て直すと必ず往復します。
そして厄介なのは、どちらもエラーを出さないことです。
- 同じものが2回出ている。なのに履歴には「投稿済み」と1回だけ書いてある
- 逆に1本も出ていない。ログには「重複のため中止」だけが毎日きれいに並んでいる
- 手で1回走らせると正しく通る。無人で回している時だけ結果が違う
- 昨日まで正しく効いていた。判定のコードは何も変えていない
とくに2つ目(恒久停止)は、成功して何もしなかった時とログも終了コードも同じ形になります。気づくのは「そういえば最近1本も出ていない」と人が思った時です。
検査する9項目
上ほど「気づけない」ものです。二度出す側と、一度も出ない側の両方を並べています。
- 履歴の保持期間が切れて「未投稿」に戻る — ガードは正しく動いている。見ているデータのほうが消えている
- ガードが毎回中止し続ける(恒久停止) — 中止の理由が解消されないまま翌日も同じ中止をくり返す
- 失敗した投稿が履歴に残って永久にスキップされる — 通っていないのに「投稿済み」として記録された
- 判定キーに毎回変わる要素が混ざっている — 時刻や連番がキーに入っていて、常に「未投稿」と出る
- 同時実行で両方が「未投稿」を読む — 読み取りと書き込みの間に別の実行が割り込む。再現しない
- 生成物の有無だけで「投稿済み」を判定している — 掃除で消えた瞬間に作り直しが走る
- 配信先ごとに履歴が分かれていて片方しか見ていない — 片方の配信先でだけ重複する
- 下書き・保留のまま残ったものを在庫として数えている — 出せる本数が実際より多く見える
- タイトルの完全一致だけで表記ゆれを拾えない — 空白・記号・全角半角・末尾の連番だけが違う
返ってくるもの
判定サマリーで、まずどちらの方向に穴が空いているかを出します。そのうえで、逆方向のリスクが同時にあるかも書きます。片方だけ直すともう片方が出るためです。
指摘は重い順に並べ、それぞれに「該当箇所 → なぜそうなるか → どう確認するか → どう直すか」を付けます。
再発させないための作り方では、たとえばこう返します。
- 「投稿済み」は、生成物が残っているかではなく投稿が通った事実だけを根拠に書く
- ガードに使うキーからは、毎回変わる要素(時刻・乱数・連番)を外す
- 履歴は配信先ごとに分ける。1つにまとめるなら配信先を含めた複合キーにする
- 履歴を期間で切るなら「一周する日数 + 余裕」を下限にする。件数で切る場合も同じ
- 中止した理由と連続回数を残す。中止は成功と同じ見た目になるので、記録が無いと詰まりが見えない
確認手順は、設定値ではなく起きた事実の側で見る形にします。配信先の一覧を開いて同じものが並んでいないか目で数える、同じ対象をわざと2回流して2回目が中止されるか、新しい対象を1つ足してそれが次の回にちゃんと出るか。重複側とデッドロック側の両方を確認します。
症状から引けます
| 症状 | 最初に疑うもの |
|---|---|
| しばらく前に出したものが、また出た | 1(保持期間) |
| 「重複のため中止」だけが毎日並び、1本も出ていない | 2(恒久停止) |
| 特定の1本だけが、いつまで経っても出てこない | 3(失敗の記録) |
| 何を流しても毎回「未投稿」と判定される | 4(キーが毎回変わる) |
| ごく稀に、ほぼ同時刻に2本出る。再現しない | 5(同時実行) |
| 出したはずのものが作り直されている | 6(生成物の有無で判定) |
| 片方の配信先でだけ重複する | 7(履歴の分離) |
| 見た目がほぼ同じものが2本並んでいる | 9(表記ゆれ) |
貼るもの
**重複判定のロジック(何をキーに見ているか)**と、履歴の保存先と保持期間の2つです。長い場合は判定に関わる部分だけで足ります。
ロジックだけ、履歴の中身の数行だけ(本文や宛先は伏せて構いません)、症状の説明だけでも受け付けます。情報が足りない時は、何を追加で見ればいいかを先に返します。足りないまま原因を断定することはしません。
正直な限界
- あなたの環境を見に行きません。 判定するのは貼られたテキストだけです。処理を実行することも、履歴のファイルを開くことも、配信先にログインすることも、コードを書き換えることもしません
- 実際に投稿されたかどうかは、配信先の一覧でしか確かめられません。 履歴も終了コードも「そう記録された」以上のことは示しません。最後の確認は必ず出た側を見る手順になります
- 原因が1つに絞れないことがあります。 重複と恒久停止は、同じ履歴の作りから両方が同時に出ることがあります。候補を確度順に並べ、どれを先に確認すれば切り分けられるかを返します。断定はしません
- 履歴に残っていないものは復元できません。 掃除や上書きで消えた分は、次回に残すための作りを提案するところまでです
- 配信先ごとの仕様は範囲外です。 何を重複と見なすか、下書きがどう扱われるかは提供元の仕様で変わります
- すでに公開されてしまった重複の後始末は扱いません。 取り下げるべきかは配信先の規定と運用者の判断であり、ここでは「次に出さない作り」までを見ます
断ること
理由を添えて断ります。重複や再投稿の検知を回避するための工夫(キーをわざとずらす、履歴を消して回す等)、同じ内容を装いだけ変えて数を増やすための書き換え、利用規約に反する連続投稿・多重アカウント運用を前提とした履歴設計、認証情報を履歴ファイルやコマンドの引数に平文で置く書き方、他人の環境・共有の履歴を許可の確認なしに前提とする設計。