デスクトップで操作するソフトの一部機能を自動化して使いたいというニーズは少なからずあるのではないでしょうか?
RPAやバッチ処理など、方法としてはいくつかあると思いますが、最近、当社が対応した一つの事例をご紹介したいと思います。
(事例)写真補正ソフトの補正機能を自動化処理に組み込む
ここではソフト名を具体的に挙げることはできないのですが、業界では定評のある写真補正ソフトの補正機能を、AWS(アマゾン・ウェブ・サービス)のs3(ストレージ)に保管している写真に対して使いたいというご要望でした。
調査したところ、このソフトでは指定のフォルダ(インプットフォルダ)に設置した写真を検知すると自動的に補正して、指定のフォルダ(アウトプットフォルダ)に出力する機能を持っていました。
いくつかの写真補正ソフトでは同様の機能が実装されていたので、標準的な機能かもしれません。
この機能があるおかげで自動化の目処が立ち、下記のようなフローで自動化を行いました。
- awsコマンドを利用してs3からダウンロード(ダウンロードフォルダ)
- シェルで写真補正ソフトのインプットフォルダに移動
- 写真補正が写真の存在を自動検知して補正処理しアウトプットフォルダに出力
- シェルでアウトプットフォルダからアップロードフォルダに移動
- awsコマンドを利用してs3へ上書きアップロード
- 写真管理テーブルの補正ステータスを完了状態に更新
処理の自動起動にはタスクスケジューラを使用
今回、当処理は5分〜10分間隔で定期的に起動する必要がありました。
そのため、自動制御のために実装したシェルをwslコマンドを使って実行するWindowsのバッチファイルを作成し、そのWindowsのバッチファイルをタスクスケジューラから呼び出す構成としました。
Windows Subsystem for Linuxにはcronサービスも提供されているので、cronを使用することもできました。
しかし、Windows再起動時にはcronサービス自体を起動させる処理が別途必要なことがわかったので、今回はWindowsネイティブで自動起動も考えなくていいタスクスケジューラからバッチファイルを呼び出す形式を選択しました。
エラー処理にはChatworkのAPIを利用
実際には、重複起動のチェック、自動補正ソフトの起動チェック、インプットフォルダ・アウトプットフォルダの状態チェック、全ファイルが補正完了しているかどうかのチェックなど、細かい制御を組み込んでいます。
処理を自動化する以上、これらのチェックで異常があった場合に、検知できる必要がありますが、今回のエラー通知にはchatworkのAPIを使いました。
Windows Subsystem for Linux上でcurlコマンドを使えるため、通知用シェルを実装し、各処理でのエラー発生時にChatworkに通知しています。
自動化の組み込み時に考慮する点は?
デスクトップ上で動作するアプリケーションをこのような形で自動化する場合、セキュリティ上の安全性が課題になるでしょう。
デスクトップアプリケーションの場合、ログイン状態が前提となるので、ユーザーをログアウトし、バックグラウンドで動作することができません。
そのため、パソコンの操作が物理的に困難な場所に設置するなどのセキュリティ上の安全対策が求められます。
具体的な対策としては、例えば、
- パソコンの本体を鍵付きサーバーラックに格納する。
- (動作するのであれば)AWSのWindows Serverインスタンス上でアプリケーションを起動し、IP制限などを掛ける。
など、責任者・担当者以外が簡単にアクセスできない環境で実装する必要があります。
まとめ
当記事ではデスクトップアプリケーションの特定機能を自動処理に組み込む、一事例をご紹介いたしました。
一昔前ではWindowsの自動化はコマンドの自由度が低く実装が難しい状況もありました。Windows Subsystem for Linux上でシェルを使うことができるようになったので、かなり自由度が高い制御が可能になってきています。
もちろん、デスクトップアプリケーションに依存するため、シェルを使うだけでは自動化が難しいことも多いでしょう。その場合は、最近波が来ているRPAツールを検討することになるでしょう。
RPAについてはまた機会がありましたら、記事にしたいと思います。