定期実行の第一歩—Macで自動通知を回す


手動で動くスクリプトができても、自動化はまだ半分です。次に必要なのは、決まった間隔で起動し、失敗した時に原因を追える仕組みです。メール通知の試作では、macOS標準のlaunchdを使う例を用意しました。

定期実行ファイルに書くもの

LaunchAgentの設定には、実行するPython、スクリプトの絶対パス、作業フォルダ、実行間隔、標準出力と標準エラーの保存先を記載します。

重要なのは、対話シェルと自動実行の環境が違うことです。ターミナルでは動くのにlaunchdでは動かない場合、PATH、Python環境、作業フォルダ、外付けディスクのマウント状態を疑います。

30分ごとの実行から始める

最初は「30分ごと」のような分かりやすい間隔にし、同じメールを二重通知しないことを確認します。ジョブを登録した直後に一度手動実行し、ログとDiscordの両方を見ます。

本番化の前に、次の失敗も意図的に試します。

  • ネットワークを切る
  • 認証情報を一時的に無効なダミーへ変える
  • Discord投稿先を無効にする
  • 外付けディスクを外す

失敗時に再試行し続けて通知を連打する設計は避けます。指数バックオフや次回実行への持ち越しを検討します。

Macのスリープは重要な前提

ユーザー用LaunchAgentは、Macがスリープ中なら期待した時刻に処理されないことがあります。スリープ解除後の次回タイミングから再開する設計なら、その前提を明記します。厳密な時刻保証が必要なら、常時稼働機やサーバー、クラウド実行へ移す方が適切です。

私はここで「自動化の成功条件」を、予定時刻に起動することだけではなく、次の三点に広げました。

  1. 処理の最終成功時刻が分かる
  2. 失敗理由がログに残る
  3. 一定時間成功していなければ別経路で気づける

再現チェック

  • [ ] 実行ファイルと作業フォルダを明示した
  • [ ] 標準出力と標準エラーの保存先がある
  • [ ] 手動実行と自動実行の両方を試した
  • [ ] スリープ中の挙動を確認した
  • [ ] 二重通知を防いだ
  • [ ] 最終成功時刻を確認できる

次回からは外部サービス連携を一段深め、freee会計APIを読み取り専用からつなぎます。

参考にした一次情報


Back to top