Python + cronで実現する週次自動化の設計パターン

「毎週やるタスク」って、忘れがちですよね。

カレンダーにリマインダー入れても、忙しいと後回しになって結局やらない…。

そこで、Python + cronで完全自動化しました。週次タスクを人間が意識しなくても勝手に回る仕組みです。

週次自動化に向いているタスク

すべてのタスクが自動化できるわけではありません。

週次自動化に向いているのは:
定型作業(判断が不要)
失敗してもリカバリー可能
深夜実行でOK

例:
– Downloadsフォルダの整理
– バックアップの作成
– ログのローテーション
– レポートの生成

設計パターン

週次自動化スクリプトの基本構造はこんな感じ。

#!/usr/bin/env python3
import sys
import logging
from datetime import datetime

def setup_logging():
    """ログ設定"""
    log_file = f"/path/to/logs/weekly_{datetime.now().strftime('%Y%m%d')}.log"
    logging.basicConfig(
        level=logging.INFO,
        format='%(asctime)s [%(levelname)s] %(message)s',
        handlers=[
            logging.FileHandler(log_file),
            logging.StreamHandler()
        ]
    )

def main():
    """メイン処理"""
    try:
        logging.info("週次タスク開始")

        # 処理1
        # 処理2
        # 処理3

        logging.info("週次タスク完了")
        return 0
    except Exception as e:
        logging.error(f"エラー発生: {e}")
        return 1

if __name__ == "__main__":
    setup_logging()
    sys.exit(main())

ポイント1: ログを必ず残す

自動化スクリプトは、実行結果が見えないのが怖いところ。

だから、ログは必須です。

  • 何時に実行されたか
  • 何を処理したか
  • エラーが出たか

これらを全部ログに残しておけば、後で確認できます。

ポイント2: ドライランモードを用意する

いきなり本番実行は危険です。

--dry-run フラグを用意して、「実際には何もしないけど、何をするか表示する」モードを作りましょう。

import argparse

parser = argparse.ArgumentParser()
parser.add_argument('--dry-run', action='store_true')
args = parser.parse_args()

if args.dry_run:
    print("ドライラン: ファイルを移動 (実際には移動しない)")
else:
    shutil.move(src, dst)

テストが捗ります。

ポイント3: cronの設定

毎週日曜の朝4時に実行する例:

# crontab -e で編集
0 4 * * 0 /usr/bin/python3 /path/to/weekly_task.py --mode production >> /path/to/cron.log 2>&1

ポイント:
/usr/bin/python3 のようにフルパス指定
– 標準出力・エラー出力をログファイルにリダイレクト
– 実行権限を付与(chmod +x weekly_task.py

ポイント4: エラー通知

エラーが起きたときに気づけないと意味がないので、通知機能も入れます。

  • メール送信
  • Slack通知
  • Telegram通知

お好みで。

まとめ

Python + cronで週次タスクを自動化すれば、「忘れてた!」がなくなります。

重要なのは:
– ログを残す
– ドライランモードを用意する
– エラー通知を入れる

この3つを守れば、安心して自動化できます。

あなたの「毎週やるタスク」、自動化してみませんか?