Pythonの学習をはじめてスクリプトを作成したりしていると、このスクリプトを定期実行したいなど思うこともあると思います。このような定期実行のことはバッチ処理といいLinuxサーバなどを利用したりすることが多いですが、Windows でも「タスクスケジューラ」という機能があります。
この「タスクスケジューラ」は、スクリプトやプログラムを定期的に実行するための便利なツールです。
この記事では、Pythonスクリプトを定期的に実行する方法をステップバイステップで解説します。タスクスケジューラを活用することで、自動化や効率化を簡単に実現できます。
[目次を開く]
必要な準備
タスクスケジューラを設定する前に以下を確認してください:
- Pythonがインストールされている
- Pythonのインストールパスを確認しておきましょう。例:
C:\Users\<ユーザー名>\AppData\Local\Programs\Python\Python39\python.exe
- Pythonのインストールパスを確認しておきましょう。例:
- 実行したいPythonスクリプト
- 任意のディレクトリにスクリプトファイル(例:
script.py)を保存します。フルパスをメモしておきましょう。例:C:\Scripts\script.py
- 任意のディレクトリにスクリプトファイル(例:
- 管理者権限
- タスクスケジューラの設定には管理者権限が必要な場合があります。
タスクスケジューラの設定手順
1. タスクスケジューラを開く
- スタートメニューを開き、「タスクスケジューラ」と検索。
- 結果から「タスクスケジューラ」を選択
- 管理者として実行をクリックし起動
2. 新しいタスクを作成する
- 画面右側の「タスクの作成」をクリック。
- 「全般」タブで以下を設定:
- 名前: タスクの名前をわかりやすく入力(例:
Pythonスクリプト定期実行)。 - 説明(任意): タスクの目的を記載(例: 「データ分析用スクリプトを毎日実行」)。
- オプション: 「最上位の特権で実行する」にチェックを入れる(必要な場合)。
- 名前: タスクの名前をわかりやすく入力(例:
3. トリガーの設定
- 「トリガー」タブに移動し、「新規」をクリック。
- 以下の設定を行います:
- タスクの開始: 実行タイミングを選択(例: 「毎日」)。
- 開始日時: 初回実行日時を指定。
- 繰り返し間隔: 必要に応じて設定(例: 毎日1回)。
詳細設定で繰り返し間隔を設定し継続時間を無制限に設定するとPCが起動している間、1時間に1回、実行されるようになります。
4. 操作の設定
- 「操作」タブに移動し、「新規」をクリック。
- 以下の設定を行います:
- 操作: 「プログラムの開始」を選択。
- プログラム/スクリプト: Pythonの実行ファイルのパスを入力(例:
C:\Users\<ユーザー名>\AppData\Local\Programs\Python\Python39\python.exe)。 - 引数の追加: 実行するスクリプトのパスを入力(例:
C:\Scripts\script.py)。 - 開始(オプション): スクリプトのディレクトリを指定(例:
C:\Scripts)。
※仮想環境を利用している場合はPythonの実行ファイルのパスを仮想環境のものに置き換えてください。
5. 条件と設定の調整
- 「条件」タブで必要に応じて以下を設定:
- 「電源」の項目で「コンピューターがAC電源に接続されている場合のみタスクを開始する」のチェックを外す(必要に応じて)。
- 「設定」タブで以下を確認:
- タスクが失敗した場合の再試行設定(例: 「失敗時に再実行する」)。
flowchart TD
A["タスクスケジューラ<br>を起動"] --> B["新しいタスクを作成<br>(全般タブ)"]
B --> C["トリガー設定<br>(実行タイミング)"]
C --> D["操作の設定<br>python.exe+スクリプト"]
D --> E["条件・設定の調整"]
E --> F["設定のテスト<br>(手動実行で確認)"] 設定のテスト
タスクを保存後、タスクスケジューラの一覧画面に戻ります。作成したタスクを右クリックして「実行」を選択し、スクリプトが正しく動作するか確認してください。
動作確認が成功する場合:
- スクリプトの出力やログを確認。
- 定期実行を待機し、予定通り実行されるか検証。
エラーが発生する場合:
- パスの設定: Pythonの実行ファイルやスクリプトパスが正しいか確認。
- スクリプトの内容: 権限や環境変数に依存していないかチェック。
実行されないときの切り分け: まず「最終実行結果」の数字を見る
タスクスケジューラの一覧で該当タスクを選ぶと、下段に「最終実行結果」が表示されます(「履歴」タブでも同じ値が読めます)。値ごとに見る場所が違うので、先にこの表で当たりを付けます。
| 最終実行結果 | 意味 | 見る場所・直し方 |
|---|---|---|
0x0 | 正常終了 | スクリプト自体は動いている。出力が見当たらないなら「開始(オプション)」の作業フォルダが空欄で、相対パスで書いたファイルが別の場所にできていないか確認 |
0x1 | プログラムが異常終了 | Python が例外で落ちている。後述の方法でログを残す。ModuleNotFoundError なら仮想環境の python.exe を指定しているか確認 |
0x2 | 指定されたファイルが見つからない | 「プログラム/スクリプト」か「引数の追加」のパスの誤り。空白を含むパスは二重引用符で囲む |
0x41301 | タスクは現在実行中 | 前回の実行が終わっていない。input() で入力待ちになっていないか、終了条件の無いループになっていないかを見る |
0x41303 | まだ実行されていない | トリガーの開始日時が未来か、条件タブの設定で開始が止められている |
0x800710E0 | 操作者またはシステムが要求を拒否 | 条件タブの「AC電源に接続されている場合のみ」「アイドル状態の場合のみ」を外す。ノートPCでよく出る |
0x80070002 | ファイルが見つからない | 0x2 と同じ。加えて「開始(オプション)」に存在しないフォルダを書いていないか |
ログが無くて原因が分からないときは cmd 経由で起動する
タスクスケジューラは標準出力を残しません。python.exe を直接指定する代わりに cmd.exe を挟み、出力をファイルへ追記します。
- プログラム/スクリプト:
cmd.exe - 引数の追加(1行で入力):
/c ""C:\Users\<ユーザー名>\AppData\Local\Programs\Python\Python39\python.exe" "C:\Scripts\script.py" >> "C:\Scripts\task.log" 2>&1" 次の実行後に C:\Scripts\task.log を開けば、例外のトレースバックがそのまま読めます。原因が分かったら元の python.exe 直接指定に戻しても構いませんし、ログ付きのまま運用しても問題ありません。
GUI を触らずに確認・即時実行する
コマンドプロンプト(管理者)から、登録内容の確認と即時実行ができます。タスク名は「全般」タブで付けた名前です。
schtasks /Query /TN "Pythonスクリプト定期実行" /V /FO LIST
schtasks /Run /TN "Pythonスクリプト定期実行" /Query の出力にある「前回の結果」が上の表の値です。10進で表示されるので、1 は 0x1、267009 は 0x41301 に対応します。/Run で即時実行してから task.log を見ると、トリガーの時刻を待たずに切り分けが進みます。
見落としやすい2点
- 「ユーザーがログオンしているかどうかにかかわらず実行する」を選ぶと、ネットワークドライブのドライブ文字(
Z:など)は割り当てられていません。共有フォルダは UNC パス(\\server\share\...)で書きます。 - コンソール窓を出したくないだけなら
python.exeをpythonw.exeに替えられますが、標準出力も消えるので上のログ追記と併用してください。
応用例
タスクスケジューラを活用することで、次のような自動化を実現できます:
- 定期的なデータ処理(例: Webスクレイピングやデータベースのバックアップ)。
- メールや通知の自動送信。
- システムのメンテナンスやログの監視。
注意点
- Python環境の整備
- 仮想環境を使用している場合、スクリプト内で必要なモジュールがインストールされているか確認してください。
- 権限
- 管理者権限が必要なタスクは「最上位の特権で実行する」を有効にする。
- ログ管理
- スクリプトにログ出力機能を組み込むと、エラー発生時の原因特定が容易になります。
その他の定期実行方法
タスクスケジューラ以外にPythonのスクリプトを定期実行する方法を紹介します。
Pythonのライブラリ、scheduleを利用する
難易度としては比較的低めで、手間もそれほどかかりません。手軽に定期実行を組みたいならこちらの方法もおすすめです。
Webサーバで定期実行する
難易度としては、やや高めでWebサーバの知識が必要になります。外部またはローカル環境内にWebサーバを構築しスクリプトを定期実行させます。
まとめ
Windows 11のタスクスケジューラを使用することで、Pythonスクリプトの実行を自動化し、作業を効率化できます。また「タスクスケジューラ」は、Python以外の言語で書かれたスクリプトでも設定ができる点がメリットです。
ぜひ活用してみてください!
業務効率化の相談はお問合せより気軽にご連絡ください。
