1. はじめに
Pythonで「定期実行」処理を手軽に行いたいときに便利なのが、schedule
モジュールです。本記事では、Python|定期実行する:scheduleモジュールというテーマのもと、Python初心者〜中級者の方に向けて、schedule
モジュールの使い方や実践例を丁寧に解説していきます。
バックアップの自動実行、定時アラート、APIの定期呼び出しなど、プログラムを時間指定で繰り返し動かしたい場面は多くあります。そうした処理も、schedule
モジュールを使えば簡単に実装可能です。
2. scheduleモジュールの基本解説
2-1. scheduleとは?
schedule
は、Pythonのサードパーティ製モジュールで、指定した時間間隔で処理を定期実行できるシンプルなツールです。
Python標準ライブラリのtime
やthreading
を用いるよりも、直感的なコードで実装できるのが魅力です。
2-2. インストール方法
まずはschedule
モジュールをインストールしましょう。
pip install schedule
2-3. 毎秒処理を実行する基本コード
以下は、1秒ごとに「Hello, World!」と表示する簡単なコード例です。
import schedule
import time
# 実行したい処理
def job():
print("Hello, World!")
# 1秒ごとに実行
schedule.every(1).seconds.do(job)
# 常にスケジュールを監視するループ
while True:
schedule.run_pending()
time.sleep(1)
実行結果:
Hello, World!
Hello, World!
Hello, World!
...
このように、関数を登録し、schedule.run_pending()
で定期実行できます。
3. よくある使い方・応用例
3-1. 毎日決まった時間に処理を実行する
毎朝9時にメールを送る処理など、決まった時間に実行したい場合は以下のように記述します。
import schedule
import time
def send_mail():
print("メールを送信しました")
# 毎日9時に実行
schedule.every().day.at("09:00").do(send_mail)
while True:
schedule.run_pending()
time.sleep(1)
実行結果:
(毎日9:00に)
メールを送信しました
3-2. 曜日を指定して定期実行
毎週月曜日の朝10時にレポート生成など、曜日指定も可能です。
def generate_report():
print("レポートを作成しました")
schedule.every().monday.at("10:00").do(generate_report)
while True:
schedule.run_pending()
time.sleep(1)
実行結果:
(月曜日 10:00 に)
レポートを作成しました
3-3. 複数のスケジュールを並行して実行
複数の関数を異なるスケジュールで実行することもできます。
def task1():
print("1分ごとのタスク")
def task2():
print("毎日12時のタスク")
schedule.every(1).minutes.do(task1)
schedule.every().day.at("12:00").do(task2)
while True:
schedule.run_pending()
time.sleep(1)
実行結果:
1分ごとのタスク
(12:00に)毎日12時のタスク
4. 注意点・エラー対策
4-1. スクリプトは常に動作させておく必要がある
schedule
はバックグラウンドで実行してくれるわけではありません。
while True
ループを止めずに動かしておく必要があります。プロダクション環境では、systemd や cron + nohup などと併用することが多いです。
4-2. 時刻指定は24時間表記
.at("09:00")
のように、24時間表記で記述します。12時間表記(AM/PM)では動作しないため注意してください。
4-3. タイムゾーンに注意
schedule
はローカル時刻を基準にします。サーバーがUTCの場合は実行タイミングがずれることもあるため、タイムゾーンを明示するか、datetime
との連携を検討してください。
5. まとめ
schedule
モジュールを使えば、Pythonで簡単に定期実行処理を作成できる- 時間指定、曜日指定、複数スケジュールなど柔軟な運用が可能
- ただし、常時スクリプトを実行し続ける必要がある点には注意
定期的な処理は業務自動化に欠かせない機能です。
schedule
モジュールを使って、バックアップ処理や定時連絡などの自動化にぜひ活用してみてください。
学習のコツとしては、まずは1分ごとの簡単なスケジュールから試して、少しずつ実用的なタイマー処理に応用していくのがおすすめです。