Power Automate Desktopを使ってkabuステーションを自動で再起動する
kabuステーションAPIのissueで頻繁に出る要望として、ログインの自動化があります。
「セキュリティの問題で自動化できない」と発言があるにもかかわらず、
「毎朝早起きしなくてはいけないんですか?!」みたいなズレたコメントが返されてて、
もうほとんど荒らしのような状態です。
これは良くないなーってことで、簡単に自動化する方法ないかなってことで見つけたのがPower Automate Desktopでした。
少し触ってみたところ、めちゃくちゃ使いやすくできていて感動したのでまとめます。
Power Automate Desktop とは
Windows 10で使える、デスクトップ操作を自動化するためのアプリケーションです。
一般的なマウス操作やキーボード操作はもちろん、繰り返し処理、条件分岐なども行なえるので、
やりたいことが明確なら簡単に自動化できると言えそうです。
インストール
公式からインストーラをダウンロードします
ダウンロードしたインストーラを起動します
https://gyazo.com/161e61c43dc52bb7d07cb3da47795d10
インストール先の選択、Microsoftに情報を提供するかなどを設定し、使用条件に同意し、インストールを実行します
https://gyazo.com/d500b39edcfe5ead148360a7e4cd1cab
インストールが完了するのを待ち、完了したらPower Automate Desktopを起動すればOKです
https://gyazo.com/fe7ee7903824d6f6a47e350c58f95147
kabuステーションを再起動するためのフローの解説
実現したいこと
毎日決まった時間にkabuステーションを自動で再起動し、ログインさせたい
kabuステーションは、起動後にログインのためのウィンドウが挟まり、
ログインウィンドウで認証をパスできたらkabuステーションが立ち上がります。
なので大まかな処理順序としては
指定した時刻かのチェック
kabuステーションのプロセスが立ち上がっているなら停止
kabuステーションの起動
ログインウィンドウが開かれたらパスワードの入力とsubmit
です。
Power Automate Desktopにはスケジューリング機能がないので、フローでそれも実現することを考えます。
新しいフローの作成
Power Automate Desktopを起動したら、左上の新しいフローを選択してフローを作成します
https://gyazo.com/88dbd79c7a30caa4ee30780ffe430a0f
名前は何でもいいですが、今回は「kabuステーションの再起動」としました。
https://gyazo.com/56ca8ef4c4629ebb771c0d3b72da3b72
すると空っぽのフローが作成されます。
https://gyazo.com/23669325f8c4e3e1f7d8bf09c1a0da32
左のアクションがフローを作るためのパーツで、
真ん中がフローを作成するスペースで、真ん中上部に保存ボタンや開始ボタンなどがあります。
右端は引数やら変数です。
フローの作成
プロセスのキル
kabuステーションは同時に2つプロセスを立ち上げることができないので、
先に動いているプロセスがあれば停止しておく必要があります。
アクションの検索スペースに「プロセス」と入力すると、プロセス関連のアクションが抽出されます。
https://gyazo.com/6db4e9cdd38ca4960d0fe6e499fc00d0
まずはプロセスが起動しているかを確認するため、条件にあるプロセスが次の場合をMainのスペースにドラッグアンドドロップするか、ダブルクリックします。
すると、プロセスが次の場合の条件設定のウィンドウが開きます
https://gyazo.com/5ea51f0fe9e4b269d3b8b1e2676ede37
kabuステーションが動いていることを確認するので、
プロセスが次の場合: は 実行されている でOKです。
プロセス名は下向きの矢印をクリックしてもいいですし、プロセス名を手入力してもいいですが、
kabuステーションが起動していれば、kabくらいまで入力補完でKabuSと表示されるはずです。
ここまで設定できれば保存を押します。
https://gyazo.com/8cbae28b2b211b79f6f03dd112c21132
条件が追加できたら、次はプロセスを終了するを条件の中にドラッグアンドドロップします。
https://gyazo.com/9ce33e554aca23eb4df5ed91119a8219
終了するプロセスはkabuステーションなのかKabuSにし、保存します
https://gyazo.com/ef2493abf0b8983f3561ada0cc163d34
これでkabuステーションが起動している場合は、kabuステーションを停止するという動きができました。
https://gyazo.com/a1ab1c93edc43aef5778f15ab469245c
kabuステーションの起動
基本的な操作はプロセスのキルで説明できたので、ここからは簡易的な説明にします
アクションの検索で実行とでも入力し、アプリケーションの実行を選択します。
アプリケーション パスにkabuステーションを起動するファイルのパスを入力します
https://gyazo.com/afce0c2b8c44a5f6b4060c6d0117a6bb
スタートメニューにkabuステーションがあるなら 右クリック > その他 > ファイルの場所を開く で起動ファイルのあるファイルが開かれるので、起動ファイルを見つけてShiftキーを押しながら右クリックすることでパスのコピーが選べ、これがアプリケーションのパスです。
https://gyazo.com/735a0064ccd5f25c87ea1b77a763bee1
自動ログイン
kabuステーションを起動してもログインしていないとAPIは利用できません。
起動後、ログイン画面が表示されていることを確認し、パスワード入力からsubmitするようフローに追加します。
ログイン画面を判定するために、kabuステーションのログイン画面を開いておきます
アクションの検索でウィンドウとでも入力し、ウィンドウの待機するを選択します
ウィンドウの項目をクリックすると UI 要素の追加 と表示されるので、そのボタンを押します
追跡セッションが開かれるので、kabuステーションのログインウィンドウに赤い枠が出ている状態でCtrlを押しながらログインウィンドウをクリックします
追跡セッションに Window 'ログイン'と表示されるので、完了します
https://gyazo.com/b1fcb4a6924c57a816c8d9613eb2e39c
再度ウィンドウの項目をクリックすると、UI 要素の選択肢にログインウィンドウが追加されているので、これを選択し、選択を押します
https://gyazo.com/e4f55dc831559f984ebb4d567e0c6c54
これでOKなので、保存します。
次にパスワードの入力をしていきます
アクションの検索でキーとでも入力し、キーの送信を選択します
テキストエリアでダイレクト機密テキストの入力を選択します
https://gyazo.com/490c7a0bdd52e94c1bd163d2566ee307
パスワードを入力し、保存します
https://gyazo.com/34061a871c94c5520bc89c58b441d2d4
もう一度、キーの送信を選択します
送信するテキストに{Enter}と入力し保存します
https://gyazo.com/aff3586bface1491a905f93f88ae5160
これでkabuステーションの再起動からログインまでが出来るようになりました。
https://gyazo.com/c0ab1c6bfbaf7b95fd6aa987ca10e45a
試しに真ん中のスペースの上部にある実行ボタンを押してみます。
kabuステーションが閉じられ、再度起動し、接続処理が発生し、ログイン画面が開かれ、パスワードが入力され、ログインに成功し、kabuステーションのメインの画面が開かれることを確認できるはずです。
毎日決まった時間に再起動処理を動かす
残念ながら、Power Automate Desktopにはスケジューリング機能がありません。
が、実装するのは難しくありません。
いくつか方法はあると思いますが、1分に1回現在の時刻を確認し、午前7時なら再起動するというフローを作ります
アクションからループ条件を選択します
条件に同じ値を入れます (両方に1を入れておけばOKです)
https://gyazo.com/65c8eb349feb25bccc994f1cd921cfbf
ループ条件以外のこれまでに作ったフローを選択し、ループ条件の中にドラッグアンドドロップします
https://gyazo.com/c6778971b30672bc9ed27e482797dbb6
アクションからWaitを選択し、ループ条件のすぐ下にドラッグアンドドロップします
期間に60を入れ、60秒間待機するようにします
https://gyazo.com/21980ee5b7c7d78dc03165753cb8a144
アクションから現在の日時を取得しますを選択し、Waitのすぐ下にドラッグアンドドロップします
何も変更せずそのまま保存します
https://gyazo.com/0eb12fdba655d3ca8a9ef8fc6c6f46fc
アクションからdatetime をテキストに変換を選択し、現在の日時を取得しますのすぐ下にドラッグアンドドロップします
変換する datetimeは%CurrentDateTime%、使用する形式はカスタム、カスタム形式はHH:mm、生成された変数は%CurrentTime%にし、保存します
https://gyazo.com/dbe4756d53115a7a89a5fea7cf8e9235
https://gyazo.com/c0c5c65c53998f0729e6ed092504c5e0
アクションからIfを選択し、datetime をテキストに変換のすぐ下にドラッグアンドドロップします
最初のオペラントを%CurrentTIme%、演算子をと等しくない、2番目のオペラントを07:00にし、保存します
https://gyazo.com/050f5d02cb64701229be03dfbc15ce47
https://gyazo.com/fcc9f8c009de0d39a8bd164026af7e74
アクションから次のループを選択し、Ifの中にドラッグアンドドロップします
https://gyazo.com/b5b75f6db533ba72a864786981fe77bf
これで1分に1回現在時刻を確認し、07:00ならkabuステーションを再起動するというフローができました。
保存してPower Automate Desktopから実行しておきましょう
※ 60sに1回動くようにしていますが、判断処理などにかかる時間 + 60sなので、実際は61, 62s程度に1回動きます。タイミングが悪ければある1分をスキップする可能性は大いにあります
おわりに
普段、自動化はほとんどCLIで行なうので、GUIを使った自動化は初めてだったんですが、
Power Automate Desktopは直感でやりたいことができるのでめっちゃ良かったです!
自分の作っているプロダクトで複雑な条件を作るようなGUIが必要になったら、
このアプリを参考にするだろうと思います。
更新履歴