【要約】毎朝、無人でレポートが届く——Windowsタスクスケジューラ+Pythonで作る「壊れたら気づく」自動化 [Zenn_Python] | Summary by TechDistill
> Source: Zenn_Python
Execute Primary Source
// Problem
事務担当者が、自動化スクリプトの運用において、エラーが出ずに処理が止まる「サイレント失敗」に直面している。スクリプトが正常に動いているように見えて、実際には誤ったデータが生成され続けるリスクがある。具体的には以下の問題が発生する。
- ・入力CSVの列名変更により、集計対象が0件になってもレポートが生成され続ける。
- ・共有フォルダの権限変更により、古いデータを読み込み続けて数値が変化しない。
- ・Windows Update等の影響でタスク自体が起動せず、ログすら残らない。
// Approach
著者は、処理を行う「本体」と、成果物を外から検査する「見張り役」を分離する設計を採用した。本体に検査機能を内蔵せず、別プロセスとして独立させることで、本体の死を検知可能にしている。具体的な手法は以下の通りである。
- ・本体(daily_report.py)は、入力検証と検算を行い、不整合があれば非0終了で停止する。
- ・見張り役(watchdog.py)は、成果物(HTML)の存在、更新時刻、サイズ、必須セクションを検査する。
- ・通知は、異常時のみWindowsトースト通知を用いてユーザーに知らせる。
- ・タスク登録には、コンソール窓が出ない pythonw.exe を直接指定する。
// Result
この設計により、自動化の失敗を翌朝には確実に検知できる体制が構築された。異常発生時には、見張り役が即座に検知して通知を行う。具体的な改善点は以下の通りである。
- ・列名変更時:本体が即座にエラー終了し、見張り役が「レポートの更新なし」を検知する。
- ・ロジックミス時:本体内の検算機能により、誤ったレポートの生成を未然に防ぐ。
- ・運用負荷:成功通知を廃止し、異常時のみ通知することで、通知の形骸化を防ぐ。
Senior Engineer Insight
> 監視の分離は、分散システムにおけるオブザーバビリティの基本原則に忠実である。本体の例外処理に依存せず、成果物という「事実」を外部から検証する設計は、極めて堅牢だ。pythonw.exe 使用時の sys.stdout None 対策など、Windows特有の挙動への深い理解も示されている。ただし、見張り役の死活監視を人間が担う点は、運用の継続性に課題を残す。大規模環境では、この設計思想を維持しつつ、監視対象をクラウドネイティブな監視基盤へ昇華させる必要がある。