【要約】自動投稿botが同じツイートを2回投げかけた話 — YAML重複keyとlast-write-winsの罠 [Zenn_Python] | Summary by TechDistill
> Source: Zenn_Python
Execute Primary Source
// Problem
- ・YAML内に同一キーが複数存在。
- ・PyYAMLの
safe_loadは、重複キーを警告なく最後の値で上書きする。 - ・
grepでは両方のエントリが見えるが、プログラム上では「未投稿」が優先される。 - ・これにより、投稿済みのコンテンツが再度投稿される二重投稿のリスクが発生した。
// Approach
1.重複キーの検出: Pythonの
reとCounterを用いたスクリプトで、重複キーを特定。2.データの修正: 重複エントリを手動で削除し、一意な状態へ復元。
3.再発防止策の策定:
- ・投稿成功時にステータスを更新し、古いエントリを物理的に削除する。
- ・月次の監査スクリプトを導入し、定期的に重複をチェックする。
// Result
- ・重複キーの検出に成功。
- ・291個のキーすべてをユニークな状態に復元。
- ・自動投稿パイプラインにおける、マニフェストファイルの整合性管理の重要性を再認識。
Senior Engineer Insight
> 「設定ファイルが正しく読み込めている」という前提は危険である。YAMLのような柔軟なフォーマットは、静的なバリデーションが不可欠。単一ファイルに状態(State)を持たせる設計は、ファイル破損や重複時に致命的な挙動を招く。大規模運用では、Linterの導入や、JSON Schema等による厳格なスキーマ検証をパイプラインに組み込むべきである。また、外部APIによる重複チェックなど、多層防御の設計が実戦では求められる。