「毎日決まった時間にデータを収集したい」「1時間おきに特定の処理を自動で走らせたい」と感じたことはありませんか?
Pythonを使って便利なツールを作ったとしても、毎回手動でプログラムを起動して実行ボタンを押しているのでは、本当の意味での「自動化」とは言えません。そこで重要になるのが、プログラムを「定期実行」させる仕組みです。
Pythonのプログラムを定期的に動かす方法は、大きく分けて「プログラムの中で制御する方法」と「OS(WindowsやMac/Linux)の標準機能を使う方法」の2種類があります。
この記事では、それぞれのメリット・デメリットと、初心者の方でも迷わず設定できる具体的な手順について詳しく解説します。
Pythonの定期実行には2つのアプローチがある
Pythonプログラムを継続的に定期実行させるには、大きく分けて以下の2つのアプローチがあります。まずは自分にどちらの方法が合っているかを確認しましょう。
1. プログラム内部で時間を制御する方法
Pythonのコードの中で「〇〇分待機して実行」という命令を書く方法です。`schedule`などの外部モジュールを利用すると、比較的簡単に実装できます。
メリット:
- Pythonのコードだけで完結するため、OSを問わず動作する。
- 「〇〇分ごと」といった柔軟なスケジュールをコードで管理しやすい。
デメリット:
- プログラムを常に起動(実行)し続けておく必要がある。
- 何らかの原因でプログラムが停止してしまうと、そこで定期実行も中断されてしまう。
2. OS標準のツールで外部から起動する方法
Windowsの「タスクスケジューラ」や、Mac/Linuxの「cron」といったOS標準の機能を利用して、指定した時刻にPythonを呼び出す方法です。
メリット:
- システム側が指定時刻にプログラムを起動してくれるため、普段はプログラムを閉じていてよい。
- OSが管理しているため、個別のプログラムが一度エラーで止まっても、次回の実行時刻になれば再び起動されるため安定性が高い。
デメリット:
- OSごとの設定方法を覚える必要がある。
- パス(ファイルの場所)の指定など、設定に少しクセがある。
【Windows編】タスクスケジューラで自動実行する
Windowsユーザーの方は、標準搭載されている「タスクスケジューラ」を利用するのが一般的です。設定には少しコツが必要ですので、手順に沿って進めてみてください。
事前準備:パスの確認
設定を始める前に、以下の2つの情報をメモしておきましょう。
- Python実行ファイルの絶対パス
環境変数Pathなどを確認し、`python.exe`がどこにあるかを把握します。例えば、Anacondaを利用している場合は `c:\Users\(ユーザー名)\anaconda3` のようなパスになります。
- 実行したいPythonスクリプトのパス
実行させたい`.py`ファイルが保存されているフォルダのパスと、ファイル名を確認してください。
具体的な設定ステップ
- タスクスケジューラの起動
スタートメニューの「Windowsシステムツール」から「コントロールパネル」を経由するか、検索窓で「タスクスケジューラ」と入力して起動します。
- 基本タスクの作成
メニューの「操作」から「基本タスクの作成」を選択します。
- トリガー(頻度)の設定
タスクの名前を決め、実行頻度を選択します。「毎日」実行したい場合は「毎日」を選択し、開始日と実行時間を指定します。
- 操作の選択
「操作」画面で「プログラムの開始」を選択します。
- プログラムの詳細設定
ここが最も重要なポイントです。
- プログラム/スクリプト: Pythonのexeファイルの絶対パスを入力します。
- 引数の追加: 実行したい`.py`ファイルの絶対パスを入力します。
- 開始(オプション): 実行するpyファイルの親ディレクトリ(フォルダ)の絶対パスを入力します。ここを指定することで、プログラム内での相対パスなどの処理が正しく動作しやすくなります。
- 完了と確認
設定内容を確認して完了します。タスク一覧に登録されていれば準備完了です。
なお、PCがシャットダウンしている場合は実行されませんが、スリープ状態であれば実行可能です。「電源とスリープ設定」で、実行時間にPCが完全に切れないよう設定を確認しておきましょう。
【Mac/Linux編】cronを使って自動実行する
MacやLinux環境(VPSなどのサーバー環境を含む)では、「cron」という標準機能を利用します。
cronの基本概念
cronは、`crontab`という設定ファイルに「いつ」「何を」実行するかを記述することで、システムに定期実行を依頼する仕組みです。
設定方法の概要
ターミナルで `crontab -e` コマンドを入力し、設定ファイルを編集します。記述形式は独特で、分・時・日・月・曜日の順に指定します。
例えば、毎日早朝に実行させたい場合は、以下のような形式で記述します。 `0 5 * * * /usr/bin/python3 /home/user/script.py` (上記は、毎日5時0分に指定のパスにあるPythonファイルを起動させる例です)
運用のポイント
サーバー環境でcronを利用する場合、`print()`の内容やエラー出力をログファイルに記録するように設定しておくことが推奨されます。これにより、後から「正常に動作したか」「どこでエラーが出たか」を追跡できるようになります。
【コード実装編】scheduleモジュールで制御する
OSの設定ではなく、プログラム内で完結させたい場合は、`schedule`ライブラリが非常に便利です。
実装のイメージ
`schedule`モジュールを使うと、人間が読める形式でスケジュールを記述できます。
- `schedule.every(10).minutes.do(job)` (10分ごとに実行)
- `schedule.every().day.at("10:30").do(job)` (毎日10:30に実行)
このように直感的に記述できるため、開発初期のテストや、単純なループ処理で十分な場合に最適です。
注意点
この方法の場合、プログラムをずっと実行し続けなければなりません。そのため、PCを閉じたり、サーバーの接続が切れたりすると動作が停止します。本格的な運用を行う場合は、前述のタスクスケジューラやcron、あるいはVPS(仮想専用サーバー)などの常時稼働環境での運用を検討してください。
安定して定期実行させるための運用ノウハウ
ただ設定するだけでなく、長期的に安定して動かすためには以下の点に注意しましょう。
1. 絶対パスで指定する
定期実行ツール(タスクスケジューラやcron)から起動する場合、プログラムは「どこから実行されているか」が不安定になることがあります。ファイル読み込みや保存を行う際は、必ず絶対パス(`C:\Users\…` や `/home/user/…`)で指定するようにしましょう。
2. ログの記録を徹底する
手動で実行しているときは画面(コンソール)にエラーが表示されますが、自動実行では画面が見えません。
- 標準出力(print文など)
- エラー出力(Tracebackなど)
これらをテキストファイルに出力するようにプログラムを組むことで、トラブル発生時の原因究明がスムーズになります。
3. サーバー環境の活用
個人のPCで定期実行させていると、Windows Updateによる強制再起動や、ネットワークの切断などで止まってしまうことがあります。 より安定した運用を求めるなら、「さくらのVPS」のような仮想専用サーバーを利用して、Linux OS上でcronを回す構成が推奨されます。これにより、電源や回線の維持管理を気にせず、24時間365日安定してプログラムを動かし続けることが可能です。
まとめ:どの方法を選ぶべきか
最後に、状況に合わせた選び方の基準をまとめます。
- 「とりあえず手軽に、短期間だけ試したい」
$\rightarrow$ `schedule`モジュールで実装。プログラムを起動しっぱなしにする。
- 「自分のWindows PCで、毎日決まった時間に動かしたい」
$\rightarrow$ タスクスケジューラを利用。絶対パスの設定に注意。
- 「MacやLinux、またはサーバーで安定して動かしたい」
$\rightarrow$ cronを利用。ログファイルへの出力設定を忘れずに。
自動化の第一歩は、まず「単体で正しく動作するプログラム」を作ることです。それが確認できたら、ぜひ上記の方法で「手動でクリックする手間」から解放されてください。
ピックアップ記事



