はじめに
APIのないウェブサービスからCSVデータを自動でダウンロードするRPAを、PowerAutomateからPythonとタスクスケジューラに移行した経験を共有します。
背景
PowerAutomateでCSVの出力とGoogleドライブへのアップロードを実装していましたが、稼働が不安定で一番データの必要な月末月初でアップデートがかかってエラーが発生していました。ログの制御が分かりづらく原因の特定ができず維持管理に困っていました。年間264,540円のコストもかかっており、より堅牢で柔軟な制御とエラーハンドリング、ログの取得のためにPythonとタスクスケジューラーへ移行して自動化することにしました。
実装のポイント
ディレクトリの構成
RPA/
├─ worktime_extract.py
├─ .env
├─ credentials.json
├─ worktime_extract_scheduler.xml
├─ token.pickle
└─ logs/ # ログファイル保存ディレクトリ
worktime_extract_scheduler.xmlをタスクスケジューラーにインポートすることで、ログアウトした状態でworktime_extract.pyが日次で勤怠情報の抽出ができるようにしました。
詳細なコードについては冗長になるので割愛させて頂きます。
1. ログイン処理の安定化
PowerAutomateでは時々ログインに失敗することがありましたが、Pythonでは以下のような改善を実施しました:
- Seleniumを使用した明示的な待機処理
- ログイン試行回数の制御
- 詳細なログ出力
2. ダウンロード処理の信頼性向上
ファイルのダウンロードとその確認を確実に行うために以下を実装しました:
- Seleniumで手順に必要な要素を待機
- ファイルのダウンロードの完了の確認
3. Google Driveとの連携
PowerAutomateではログアウトした状態でファイル移動からGoogleDriveへの同期処理を行っていましたが、タスクスケジューラーではログアウトするとGoogleDriveの同期が切断されて起動できなかったためAPIでの実装を行いました。:
- Google Drive APIを使用した確実なアップロード
- エラー時のリトライ処理
改善効果
1. 安定性の向上
- 実装後2週間ほど経過しましたが一度もエラー発生していません
- ログの保存ができ、問題が起こった際にデバッグが必要な場合には詳細なログを追加可能
2. メンテナンス性の向上
- コードの可読性の向上
- エラーハンドリングの追加が容易に
3. 実行速度の向上
- 3-5分程度かかっていた処理が通常時1分以内で処理が完了
4. コストの削減
- 年間264,540円の契約を解除
まとめ
PowerAutomateからPythonへの移行により以下が実現しました:
- より堅牢なエラーハンドリング
- 詳細なログ出力
- 柔軟な処理の実装
- コストと運用工数の削減