タスクスケジューラの「開始 (オプション)」設定による挙動の違いと留意点

「毎回のデータ収集に時間がかかる」「AIでコードを作っても動かない」
そんなお悩み、SCRAPROが解決します。
サービスについて詳しく見る

Windows タスクスケジューラで 実行ファイル (.exe) や スクリプトファイルを定期実行する際、「開始 (オプション)」 にフォルダパスを指定するかどうかで動作が大きく変わります。
本記事ではその違いと、よくあるトラブル・対策を実例を交えて解説します。
なお、今回は説明のために Pythonのスクリプト を例に取り上げて説明します。

目次

Windowsタスクスケジューラとは?

Windowsタスクスケジューラは、あらかじめ指定した日時や条件でプログラムやスクリプトを自動実行できる、Windows標準搭載のタスク自動化ツールです。
日次処理やバックアップ、ログの集計など、定期的な業務処理を自動化するための基本機能として、多くの企業や個人環境で活用されています。

活用例
  • 毎朝9時にレポート自動生成
  • Webデータを定期スクレイピング
  • バックアップやログ整備の自動実行

このように、タスクスケジューラは非常に便利なツールですが、設定内容によっては思わぬトラブルが発生することもあります。
本記事では、その中でも特に見落としがちな「開始(オプション)」の設定による動作の違いについて、Pythonスクリプトを例に詳しく解説します。

前提条件

次の Python スクリプトをpyinstaller などを使用して実行ファイル化(exe化)したものを用意します。

import os
print(os.getcwd())
input('Press any key.')

このスクリプトは実行時のカレントディレクトリを表示し、キー入力待ちで停止する単純なスクリプトです。
次の章からはこの実行ファイルをタスクスケジューラで実行して挙動を確認します。

この実行ファイルの名前を「test.exe」とし、任意のフォルダに配置します。
今回は「C:\Users\username\Desktop\demo」というフォルダに配置した前提とします。

「開始(オプション)」設定の有無による挙動の違い

開始(オプション)を設定する場合

まずは開始(オプション)に実行ファイルのフォルダパスを設定し、実行ファイルを実行した場合を確認します。

  • プログラム/スクリプト:C:\Users\username\Desktop\demo\test.exe
  • 開始 (オプション):C:\Users\username\Desktop\demo

実行結果は以下のようになり、カレントディレクトリは開始(オプション)に設定した実行ファイルのフォルダパス「C:\Users\username\Desktop\demo」となっていることが分かります。

開始(オプション)を設定しない場合

次に開始(オプション)に実行ファイルのフォルダパスを設定せず、実行ファイルを実行した場合を確認します。

  • プログラム/スクリプト:C:\Users\username\Desktop\demo\test.exe
  • 開始 (オプション):設定なし

実行結果は以下のようになり、カレントディレクトリは実行ファイルのフォルダパスではなく、Windowsのシステムファイルが格納されているパス「C:\WINDOWS\system32」となってしまっています。

Pythonスクリプトへの影響

開始(オプション)の設定によるカレントディレクトリの違いをまとめると以下のとおりです。

開始(オプション)の設定カレントディレクトリ
あり開始(オプション)で設定したディレクトリ
なしWindowsのシステムファイルのディレクトリ

つまり、このことがPythonスクリプトへ何を及ぼすかというと相対パスをスクリプト内で指定した場合、うまく動作しなくなります。

次に以下のコードを書いたファイルを先ほどと同様にpyinstaller等で実行ファイルに変換したものを準備します。このスクリプトはカレントディレクトリの同階層にあるテキストファイル「test.txt」の内容を表示するスクリプトです。

with open('./test.txt') as f:
    print(f.read())
input('Press any key.')

テキストファイル「test.txt」を用意し、実行ファイルと同階層に配置します。

SCRAPRO

開始(オプション)を設定し、実行すると以下のように正しくtest.txtの内容が表示されます。

しかし、開始(オプション)を設定せずに、実行するとFileNotFoundErrorが発生し、スクリプトがうまく動作しなくなります。

まとめ

ここまでお読みいただきありがとうございました。
本記事ではタスクスケジューラの「開始(オプション)」設定に着目し、相対パスとの関係や注意点を解説してきました。
実務ではスクレイピングの自動化やPythonスクリプトの定期実行など、正しく動いて当たり前の処理が突然止まると大きな損失につながることもあります。


SCRAPROでは、スクレイピング代行サービスを提供しています。実行ファイルでの納品も可能です。
タスクスケジューラと組み合わせることで、納品された実行ファイルを定期的かつ安定して動かす運用も可能になります。

  • 「開始(オプション)」の設定有無で、カレントディレクトリが変わる
  • 相対パスを使う場合は、必ず「開始(オプション)」に実行フォルダを指定する
  • 未指定の場合、system32が基準ディレクトリとなりエラーの原因に
  • 実行環境を明示的に定義することでトラブルを未然に防止できる
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

目次