【Python】定期実行の方法とは?初心者向けにわかりやすく解説
はじめに
日常的に行う作業を自動化して、余計な手間を減らしたいと考える方は多いでしょう。
とくに、Python はシンプルで扱いやすいプログラミング言語ですので、さまざまなタスクを自動化するのに適しています。
具体的には、定期的にデータを取得してファイルに保存したり、不要なファイルを整理したりといった作業を Pythonのスクリプト でまとめて実行できます。
このような 定期実行 をうまく取り入れれば、作業効率を高めるだけでなく、単純作業に費やす時間を大幅に削減できるでしょう。
この記事では、WindowsやLinux、macOSなどさまざまな環境で Pythonスクリプトを定期的に実行 する方法をわかりやすく紹介します。
コードの例も挙げますので、プログラミング経験が浅い方でも取り組みやすいはずです。
この記事を読むとわかること
- Pythonで定期実行が必要になるシーン
- WindowsやLinux/macOSで標準的に用意されているスケジューラの使い方
- Pythonライブラリを活用した定期実行方法の例
- 定期実行における注意点やトラブル対策
Pythonで定期実行が必要になるシーン
Pythonを使って作業を自動化しようと考える場合、まずは「どんなシーンで定期実行が役立つか」をイメージしてみましょう。
データ収集やファイルの自動生成、あるいはサーバー上でのバックアップやレポート作成など、決まった時間・タイミングで動かしたい処理は意外と多いです。
たとえば、毎朝8時にデータを取得して保存しておきたいケースや、毎日深夜に特定のフォルダをバックアップしたいケースなどがあります。
こうした処理を毎回手動で行うのは面倒ですし、もし忘れてしまうと大事なデータが欠けてしまうかもしれません。
だからこそ、Pythonの定期実行 が重要になってきます。
また、Pythonは文法が比較的読みやすいため、機能追加や修正を行いたいときにスクリプトのメンテナンスがしやすいです。
定期実行を仕組み化しておくと、一度設定すればあとは自動で実行されます。
Pythonで定期実行する方法とは
定期実行を実現するための方法は、主に次の3種類が考えられます。
- Windowsのタスクスケジューラ など、OSが標準で提供しているタスク管理ツールを使う
- LinuxやmacOSでのcron を使う
- Pythonの外部ライブラリ を利用して実装する
それぞれの方法は環境によって特徴が異なるため、使いやすいものを選ぶとよいでしょう。
以下で1つずつ解説します。
Windowsのタスクスケジューラ
Windowsを使っている場合、タスクスケジューラ で実行するPythonスクリプトとスケジュールを設定できます。
タスクスケジューラでは、次のようなことが柔軟に設定できます。
- 特定の時刻や間隔での実行
- パソコン起動時やログオン時の実行
- エラー発生時のメール通知(設定次第)
GUI(画面操作)でスケジュールを登録できるため、初めての方でも比較的とっつきやすいでしょう。
Pythonのスクリプトを指定するだけで、実行パラメータなども簡単に入力できます。
タスクスケジューラの設定例
例として、毎日朝7時に sample_script.py
を実行する場合を考えてみます。
- Windowsの検索バーで「タスクスケジューラ」と入力し、タスクスケジューラを開く
- 「基本タスクの作成」をクリックし、名前や説明を入力する
- トリガー(開始のタイミング)を「毎日」に設定し、実行時刻を「7:00」にする
- 操作の種類を「プログラムの開始」に設定し、Pythonのパスとスクリプトを指定
- 最後に確認画面を経て完了
もし、仮にPythonのパスが C:\Python\python.exe
で、スクリプトが C:\scripts\sample_script.py
にあるとします。
設定画面の「プログラム/スクリプト」には C:\Python\python.exe
を指定し、「引数の追加」欄に C:\scripts\sample_script.py
を入力します。
このように、タスクスケジューラを利用すれば、Windows環境でもPythonの定期実行ができます。
LinuxやmacOSでのcron
cron はUNIX系システムに標準で搭載されているタスク実行の仕組みです。
LinuxやmacOSで作業している場合、cronを使えば細かいスケジュールでPythonスクリプトを動かせます。
使い方は「crontab」という設定ファイルに特定の書式でスケジュールを記述するだけです。
日付や時刻、曜日などを組み合わせて指定できるため、非常に柔軟性が高いといえます。
cronの設定例
たとえば、毎日朝7時に sample_script.py
を実行したい場合は、以下のように書きます。
0 7 * * * /usr/bin/python3 /home/user/scripts/sample_script.py
cronの書式は「分 時 日 月 曜日 コマンド」の順番で記述します。
この例では、分を0、時を7に指定し、日・月・曜日はすべて *
なので、毎日7時にコマンドを実行します。
/usr/bin/python3
の部分にはPythonのパスを指定し、次に実行したいPythonファイルをフルパスで書きます。
crontabを編集するには、ターミナルから crontab -e
を実行します。
エディタが立ち上がるので、そこに先ほどの行を追記して保存すれば完了です。
一度設定しておけば、自動で毎日7時にスクリプトが動くようになります。
定期的なデータ処理やバックアップなど、さまざまな自動化に活用しやすいでしょう。
Pythonのscheduleライブラリ
schedule というPythonライブラリを使うと、Pythonコードだけで定期実行の仕組みを簡単に書けます。
外部ツールへの依存を減らしたい場合や、Pythonのコードでスケジュール設定を管理したい場合に役立ちます。
スクリプトの中で「毎日何時にこの関数を実行する」などと記述し、常駐させるだけでOKです。
環境によっては、サーバー上でそのスクリプトを常時動かしておくことで自動実行を実現します。
scheduleライブラリのコード例
以下では、毎日朝7時に my_task()
関数を実行する簡単な例を示します。
import schedule import time import datetime def my_task(): print("現在の時刻:", datetime.datetime.now()) print("このタイミングで実行したい処理をここに書く") # 毎日7時に関数を実行 schedule.every().day.at("07:00").do(my_task) while True: schedule.run_pending() time.sleep(1)
このコードを実行すると、常駐しながら指定した時刻に my_task()
が呼び出されます。
特定の処理を1時間ごとや5分ごとに実行したい場合は every(1).hours
や every(5).minutes
などに変更するとよいでしょう。
外部での設定が不要な点は便利ですが、このスクリプト自体を動作させ続ける仕組み(たとえば、サーバーのサービスとして登録するなど)が別途必要です。
必要に応じて、Windowsのタスクスケジューラやcronでこのスクリプトを起動しておく方法を組み合わせるのもよいかもしれません。
Python 定期実行でよくあるトラブルと対策
ここでは、実際にPythonの定期実行を導入したときによくあるトラブルを簡単に整理します。
併せて対策も紹介するので、事前に知っておくと安心でしょう。
パスの指定ミス
スクリプトやPythonの実行ファイルのパスが誤っていると、タスクが実行されません。
対策として、絶対パスを指定して確実にファイルを参照するようにしましょう。
環境変数の設定漏れ
コマンドラインで実行できても、タスクスケジューラやcronでは環境変数が反映されないことがあります。
シェルの設定ファイルやタスクのプロパティを確認し、必要な変数を明示的に設定するとよいでしょう。
ライブラリやモジュールが見つからない
複数のPython環境を使い分けていると、インストールしたライブラリが実行時に見つからない場合があります。
そのときは、仮想環境のパスをしっかり指定するなど、実行環境を統一すると不具合を回避できます。
実行後のログが追跡できない
定期実行したスクリプトで何かが失敗しても、出力先を把握していないと原因をつかみにくいです。
ログファイルを出力する仕組みや標準出力のリダイレクトなどで、動作状況を確認できるようにしましょう。
定期実行のスクリプトが大量のデータを扱う場合、ストレージやネットワークに負荷がかかることがあります。
開始時間をずらすなど、環境に合わせた調整を検討してください。
Python 定期実行に関する注意点
スケジュールに従って処理が動くと非常に便利ですが、いくつか注意すべきポイントがあります。
ここでは初心者の方が見落としがちな点に絞って説明します。
まず、処理の実行時間 には余裕を持たせましょう。
もし1回の処理に10分かかるのに、5分おきに起動する設定をしていると、処理が重複して意図しない動きが発生するかもしれません。
また、スクリプトのエラー処理を入れておくと安心です。
たとえば、APIなどの外部サービスへのアクセスを含む場合、接続エラーやデータ取得失敗が起こることがあります。
それらが原因でスクリプトが途中で止まったままになると、せっかくの定期実行が台無しになってしまうでしょう。
さらに、OSのスリープや休止状態 に注意してください。
ノートパソコンがスリープ状態になっているときは、タスクスケジューラやcronが動作しないことがあります。
PCを閉じっぱなしの状態で本当に動くのかどうか、試してみるのも一つの手です。
ログ出力やメール通知を組み合わせておくと、定期実行が成功したかどうかをすぐに確認できます。
いざというとき原因を追いかけやすくなる点もメリットです。
まとめ
ここまで、Pythonを定期的に実行する ための方法を紹介しました。
Windowsならタスクスケジューラ、LinuxやmacOSならcron、あるいはPythonライブラリを用いたスケジュール機能など、自分の使っている環境や目的に合わせて選べます。
決まった時間にデータを取得したり、ファイルを整理したり、レポートを生成したりといった処理は、最初に準備しておけば後は自動化できます。
その結果、作業がシンプルになり、定型作業のミスや忘れを減らすことにもつながるでしょう。
慣れないうちは設定やパスの指定でつまづくことがあるかもしれませんが、焦らず一つひとつ確認してみてください。
スクリプトとスケジュールが正しく組み合わさったときは、とても便利なワークフローが手に入るはずです。
Pythonでの定期実行は、さまざまな業務や個人の作業の効率化を後押ししてくれます。
スムーズに活用できるように、ぜひ少しずつ試してみてはいかがでしょうか。