こんにちは。tkgです。
前回はGoogleカレンダーに取り込むスクリプトを
紹介させていただきました。
今回はそのスクリプトを自動起動で
シフトを更新すれば自動でGoogleカレンダーに反映されるように
設定していきます。
Windows上での自動設定
今回は以前完成させたスクリプトを
Windows上で疑似的に自動化して起動していこうと思います。
前提条件は以前の記事参照。
Power Automateでシフトファイルが更新されるのをトリガーとして、
デスクトップverでpythonファイル実行フローを組み込んでおけば、
自動化できると思いますが、有償プランでないとデスクトップフローが実行できない形です。
このように有償プランでないと、sharepointと繋げるのは難しいそうということで、
Windowsに搭載されてるタイムスケジューラーで実現しています。
PCをシャットダウンしない想定で、定期実行しています。
切っていても、立ち上げてる間は動くということも可能ですし、
そもそも自身のシフト更新時だけ必要なので、そもそも自動化も必須ではないですが。
pythonファイル実行環境構築
色々な方法があると思いますが、私の場合は
Windows for pythonアプリから実行させてます。
ダウンロードページから該当のversionをインストールします。(上記参考)
私の場合は3.9.13です。
検索欄に「cmd」と入力でコマンドプロンプトのアプリがありますので、
実行後、コマンドプロンプトで[python]と入力。
下記のように対話モード(「>>>」)に移行できればOKです。
C:\Users\****>pip install google-api-python-client google-auth
ちなみにコマンドプロンプトでも上記の認証をインストールしておきましょう。
またスクリプトでVSコードでインポートしているライブラリ(import ○○)も
コマンドプロンプト上でインストールしないとエラーになります。
pip install ○○
一旦テストで、pythonファイル(__main__.py)をコマンドプロンプト上で実行しましょう。
後は、credentialsのパスは、main.py内で相対パスでなく絶対パスで入れる方が良いです。
VSコードと実行先が違うので、そんなファイルないよ!みたいなエラーがでるので。
- 「cd パス」でmainファイルがあるパスまで入力
cd=クリックでファルダー移動するコマンド - 「>」までの所在がファイル場所であること確認
- 「python pythonファイル名」でスクリプト実行
ここでsharepyがないよ!とかのエラーが出れば、
pipでインストールしたりし、エラーなくスクリプト実行ができるかTESTしてください。
ここまでで、コマンドプロンプトの設定は完了です。
次に、pythonファイルの起動設定をします。
適当なpythonファイルを「右クリック」⇒プログラム選択から「python」選択で
「常に~」をチェックしOKを押してください。
pythonは2つありますが、1番上のはPythonランチャーなるもので
インストールすると使えますので、そちらを使っておけば良いかと。
これでファイルダブルクリックで以下のプロンプトで実施可能になりました。
タイムスケジューラー設定
今回はファイルの実行をWindowsに搭載されてる
タイムスケジューラーで自動実行の設定をしていきます。
まず、左下の「スタート」⇒「Windows管理ツール」⇒「タスクスケジューラ」
の順で起動してください。
スケジューラ画面で「操作」⇒「基本タスクの作成」で作成していきます。
名前は適当でOK。説明はなくても良いです。
「トリガー」は毎日を選択で「次へ」。
開始時間はそのトリガーが始まる時間なので、
日付けは過去でも良いですけど、設定完了する時間前にしてください。
例:
19:00に設定後、タスク開始したのが19:01。
このままだと次の日の19:00からしか動かないです。
操作は「プログラムの開始」でOKです。
ここに入れるものを紹介します。
プログラム/スクリプトは
先ほどダウンロードしたpythonのexeファイルを指定。
引数の追加は
実行するスクリプトファイル名です。
開始は
そのpyファイルがあるフォルダーパスを入れます。
問題なければで次を押して、確認後完了でタスク登録できました。
プロパティ設定
上記のようにライブラリにタスクが登録されたら、
一度右クリック⇒「実行する」でpythonの画面が起動するかTESTしておくのが良いです。
実行する=ダブルクリックした状態と同じです。
問題なければ上記タスクをダブルクリックでプロパティ開いてください。
まず、私の場合はログオフ状態でも実行してほしいので、
セキュリティオプション内の
「ユーザーがログオンしてるかどうかにかかわらず実行する」にチェック。
その後、「OK」を押すとユーザー認証画面が現れますので、
パスワード入力後、「OK」で認証させます。
セキュリティオプション内のユーザーアカウント、
認証画面のユーザー名にもユーザー名が自動で含まれてますが、
正しいパスワード入力後もエラーになる可能性があります。
その際は
ユーザー名を「〇〇\〇〇」の形式に変更してみてください。
管理者権限のユーザーなら、
上記参考に、
「ユーザーまたはグループの変更」⇒オブジェクト名入力欄に「SYSTEM」入力
「名前の確認」⇒「OK」をクリック。
プロパティ設定画面に戻るので、再度「OK」をクリック。
改めてプロパティを確認すると、
ユーザーアカウント=SYSTEM
「ユーザーがログオンしてるかどうかにかかわらず実行する」にチェックが入っていますので、
一先ずログオン設定は完了です。
時間がきたら自動でファイル実行されますが、
上記のような実行ファイル(コマンドプロンプト)が出現します。
プロンプト出現させず、バックグラウンド処理にするなら、
「ユーザーがログオンしてるかどうかにかかわらず実行する」が無難かと。
スケジュール変更
ここからは起動する間隔を設定していきます。
現状だと、1日に1回でプログラムを起動するトリガーなので、
間隔を短くする設定です。
今回は5分おきでバックグラウンド起動していきます。
まずプロパティ設定から「トリガー」タブに移動。
トリガー選択して「編集」をクリック。
編集画面から詳細設定の部分をいじっていきます。
- 繰り返し間隔にチェック
- 間隔はファイルの実行の時間間隔なので好きなように設定
- 私の場合は5分おきで設定
- 時間期限がなければ無制限でOK
これでPCがシャットダウン状態でない限り、
5分おきの無制限に、該当のpythonファイルをバックグラウンド実行するという
疑似的な自動化が完了です。
その他
その他の設定では、
AC電源有無での起動可否や、任意のネットワークの接続選択、
動作に影響する追加設定を細かく指定できますので、
その辺りも必要に応じて設定してください。
同じ予定が何個も登録されるような不具合があるなら、
「スケジュールされた時刻にタスクを開始できなかった場合~」
のチェックボックス外すか、
タスクが既に実行中の場合に適用される規則を
「新しいインスタンスを開始しない」に
変更してみてください。
上記のようにタイムスケジューラーライブラリ一覧から
自身の設定したトリガー履歴も確認できますので、
ちゃんと動いてるかの確認はしておいた方が良いです。
今回は自動設定方法について記載しましたが、
本シリーズ(3回)で
一番身近にありそうな、Excelを絡めて、
pythonを使用するとGoogleカレンダーの操作もできてしまうという
イメージが持てたと思うので、自分なりの自動化をしていけば良いと思います。
pythonとかプログラミングって難しい感じだし、
実際何ができるのかがイメージつかない。。と思っていたので、
こういったこともできます!という紹介をさせていただきました。
よくある、Hello worldの文字出たから何?みたいなこと思ってました。
プログラミングやpython自体の話は別の機会に記事にしようと思いますが、
少しでも自分のペースで学ぶなら上記サービスがおすすめです。
コメント