ゆとりSEは副業がしたい

ゆとりSE

RPAやPythonをはじめとした情報系の発信やガジェットの紹介などがメインです

【UiPath】Orchestratorのタイムトリガーを使用して、マネーフォワードの情報を常に更新する。

参考書籍


UiPath業務自動化最強レシピ RPAツールによる自動化&効率化ノウハウ [ 株式会社完全自動化研究所 小佐井 宏之 ]

マネーフォワードを毎回更新するのは面倒くさい

私は資産管理にマネーフォワードを使用しているんですけど、パっと開いたときに直近の入出金や証券口座・仮装通貨の残高が反映されてないことが多く、いつもわざわざ一括更新をしています。この一括更新が地味に時間をとるので、できるだけ最新の状態を保ちたいと思いました。 そこで今回は、Orchestratorのタイムトリガーによって定期的に更新ジョブを実行しする運用を考えました。更新処理自体は簡単なのでパパっと実装していきます。 インストールがまだの方は過去記事みると参考になるかもしれません。 autolazy.hatenablog.jp

マネーフォワード一括更新用のワークフロー

マネーフォワードの一括更新は、一括更新ボタンを押せばいいだけなのでとても簡単です。一応要素の存在を確認し、ログインできていなかったらログイン処理を経てから、一括更新ボタンを押下します。

ログインチェック部分

f:id:oichiki:20210113125629p:plain
ログインチェック
ログインチェック部分では要素の存在判定でログインボタンの有無をboolean型の変数で取得し、Trueだったらgoogleでログインするようにしています。

一括更新ボタンの押下

f:id:oichiki:20210113125842p:plain
一括更新ボタンの押下
更新ボタンはクリックアクティビティでクリックするのみです。クリックの終了後はタブを閉じる処理を入れてデスクトップ上にブラウザが残らないようにしています。タブを閉じるアクティビティを使用する場合は、ブラウザを開くアクティビティの出力にブラウザ変数を設定する必要があります。
f:id:oichiki:20210113130118p:plain
ブラウザ変数の出力

Orchestratorのタイムトリガー

Orchestratorではジョブを即時実行するだけでなく、時間をトリガーとして実行することが可能です。ちなみに、windowsのタスクスケジューラからロボットを実行するのはライセンス違反になるようなので、スケジュール実行はOrchestratorを使用するようにしましょう。 Orchestrator上のタイムトリガーは、オートメーションタブのトリガーから設定します。

f:id:oichiki:20210113130614p:plain
トリガー
右の+ボタンを押すと、定期実行したいプロセスの選択、マシンの選択、スケジュールの設定ができます。今回は1時間ごとに実行するように設定しています、
f:id:oichiki:20210113130903p:plain
トリガーの設定

まとめ

このワークフローのおかげで、開くときは基本的に最新の情報を表示することができるようになりました。現在は使用していないPCでロボットを実行しているので問題ないですが、メインPC で実行する場合は、時間になるとブラウザが立ち上がってくるので少し邪魔になると思います。今後はバックグラウンドでの実行やPiPでの実行など、裏でできるようなワークフローも検討していこうと思います。

【UiPath】アフィリエイト広告の張り替えを自動化して、はてなブログ運営で楽がしたい。

参考書籍

アフィリエイト広告の張り替えが面倒くさい

当ブログでは各種アフィリエイトサービスから、何となくIT関連のアフィリエイト広告を気まぐれに張り付けているのですが、これらの広告は有効期間があったり、新しい広告が出ていたりします。 その際は広告を張り替えるのですが、これらのアフィリエイト広告は手動でリンクを張り付けているので、過去の記事の分も更新しようとするととても時間がかかります。 そこで今回はUiPathを使って広告の張り替えの自動化を行いました。

全体の構成

ワークフローの全体像は以下になります。

f:id:oichiki:20210111223801p:plain
全体
実行の流れとしては、入力ダイアログに広告リンクをString型の変数として入力し、記事管理ページにあるそれぞれの記事の広告を、入力したものに更新していく形になっています。 当ブログの記事は目次の上に一つアフィリエイト広告を挿入する形としており、更新対称の広告はこの1つになります。

記事のページ情報を取得

記事管理ページにある各記事をクリックするためにセレクタに入力する情報が必要であるため、データスクレイピングを用いて記事タイトルを全取得します。

f:id:oichiki:20210111225858p:plain
記事ページの情報を取得
データスクレイピングによって記事タイトルをデータテーブルとして取得し、各行ごとに繰り返して処理していきます。

記事内容の更新

記事内の広告を実際に更新する処理は以下のように実装しました。

f:id:oichiki:20210111230626p:plain
広告の更新
テキストの更新内最初のの代入では、記事全体の文字列を改行で分割して、String型の配列にしています。textListは最終的に本文として出力するためのリストです。 この配列に対して要素を1つ1つ確認を行い、文字列が目次と該当したら([:contents]と一致する)そのindexを取得し、textListの最終行を新しい広告リンクの変数と入れ替えます。(目次のindexに該当する箇所のチェックを行っている際は、リストの最終要素が広告リンクとなっている)確認において、空白でない場合はtextListに要素を追加していきます。

更新後の処理

広告の更新処理が完了したら、また記事管理ページに遷移し次の記事の更新を進めていきます。 すべての処理が完了したら、タブを閉じるアクティビティによってブラウザを閉じて終わりです。

【UiPath】Action Centerを使って自動化の中でデータのチェック・承認を行う

参考書籍


UiPath業務自動化最強レシピ RPAツールによる自動化&効率化ノウハウ [ 株式会社完全自動化研究所 小佐井 宏之 ]

Action Centerとは

Action Centerは2020年に提供開始したツールの一つです。 RPAは基本的にロボットが自動で処理を進めていく形になりますが、どうしても人間の目で判断したい場面というものは存在します。 このようなケースにおいて、人間のチェックをOC上で行いつつスムーズに処理を継続実行できるのが、Action Centerの特徴になると思っています。 詳しくは公式をご覧ください。 www.uipath.com

実際に使用してみる

今回は簡単なサンプルを使用して、Action Centerの実装方法と流れの確認を行っていきます

全体の流れ

作成したワークフローの全体像はこのように以下になります。

f:id:oichiki:20210110012328p:plain
全体

テストデータの作成

公式のサンプルではOCRを利用するものが主ですが、今回はOCRの代わりに手動で値を入れてテストしています。

f:id:oichiki:20210110012438p:plain
テストデータ作成
Action Centerの確認画面で資料を表示するため、画像データをbase64エンコードします。
f:id:oichiki:20210110012646p:plain
base64エンコード

フォームタスクの作成

フォームタスクの作成では、実際に確認作業を行う際に表示する画面の作成を行います。 アクティビティは以下のようになっています。

f:id:oichiki:20210110012944p:plain
フォームタスクを作成
ここで引数に表示したい値を入れてあげます。引数に追加すると自動でフォームデザイナー上にテキストボックスが作成されるようです。
f:id:oichiki:20210110013114p:plain
フォームタスクを作成:引数
見た目を整えるためにフォームデザイナーを開き、見やすいように表示します。今回はレイアウトから列を追加し、1列目に画像、2列目に確認項目を配置しました。 最後に出力としてタスクオブジェクトの変数を設定します。タスクの出力が完了するとロボットは実行を中断します。

タスクの再開

上記のアクティビティで設定したタスクオブジェクトの変数を、フォームタスク完了まで待機し再開のアクティビティで受け取ることで、タスクが承認されると自動的にロボットが実行を再開するようになります。

f:id:oichiki:20210110013452p:plain
フォームタスク完了まで待機し再開
本来はこの後に、各種システムへの登録作業に移りますが、今回はメッセージボックスの出力のみとしています。

Orchestratorからタスクの承認

ワークフローを実行するとOrchestratorのアクションタブにタスクが追加されます。今回は明示的にユーザをアサインしていないので、管理者としてタスクを承認します。 以下の画像のように、タスクが作成されています。

f:id:oichiki:20210110015847p:plain
アクションタブ
タイトルリンクをクリックし、フォーム画面を開きます。今回は画面上部から割り当てで自分自身を割り当て、承認のボタンを押します。
f:id:oichiki:20210110015950p:plain
フォーム画面
ボタンの押下後、OrchestratorからUnattended robotにより残りの処理が再開されます。またこのタスクが承認されず処理が中断されている間、Unattended Robotはフリーになるので、別のジョブを実行することが可能である点も良い点だと思います。

まとめ

最近ではAIを利用することが多くなっていますが、人間の確認が必要な作業はどうしても残ってしまいます。その際はスムーズな処理を阻害しないよう、Acrion Centerのような機能を利用することで、柔軟に対応することが可能となるのでは、と思っています。

【UiPath】Orchestrator APIを利用してジョブの実行をする(Start Job, HTTPリクエスト)

おすすめ書籍

Orchestrator APIをつかう

UiPath OrchestratorはGUIによる操作だけでなく、API経由で操作をすることも可能となっています。 今回は2種類のプロセスを作成し、1つ目のプロセスが2つ目のプロセスを実行するという流れを実装してみます。
プロセス1:OC API TEST
プロセス2:Hello
処理の流れは、
1つ目のプロセスを手動で起動する → API経由でOrchestratorからHelloを実行する(Unattended)→ プロセス2が画面にHelloと表示する。といった感じになります。
UiPath公式: www.uipath.com

OrchestratorへのHTTP要求

使用するのは以下のアクティビティです。
f:id:oichiki:20201230162047p:plain
このアクティビティを利用することで、Orchestratorの各種操作をAPI経由で実行するとこが可能となります。

プロセス1の処理

プロセス1の処理は大きく分けて3つあります。
1. releasekeyの取得 1. startinfoの登録 1. API経由でプロセス2実行
それぞれの実装は以下のようにしています
・releasekeyの取得
f:id:oichiki:20201230165626p:plain
f:id:oichiki:20201230165727p:plain
・startinfoの登録
f:id:oichiki:20201230165804p:plain
API経由でプロセス2実行
f:id:oichiki:20201230165856p:plain

【UiPath】環境によって変わる定数?ハードコーディングをやめるConfig.xlsxの使い方。

おすすめ書籍

定数にしたいけど動作環境によって変わる値

定数として扱いたいけどワークフローを動作させるときによって、格納する値を変えたいものってありますよね。 定数なので、ハードコーディングしてもいいような気もしますが、動作環境によって使用する値が変わる(使用者とかUI変更とかバージョン更新とか...)ことを考えるとこれは避けたい対応です。 毎回入力ダイアログとかで入れてもいいですが、せっかくのRPAなので作業が介在してしまうのはもったいないです。そんなときは設定情報を書き込むためにExcelファイルを用意して、データをまとめて読み込みましょう。

Config.xlsxとは

別にConfig.xlsxって名前でなく任意の名前でも構わないのですが、アカデミーではこの名前を使っていたのでそのようにしています。レイアウトは下記のようにしています。

f:id:oichiki:20201102195312p:plain
configファイルの例
1行目は読み込んだ時にDataTableのヘッダとして扱うので、適切な値を設定することをお勧めします。Description行は備考欄のような使い方をしていて、実際に読み込みに使用しないワークフローにするので、必要があれば記載してください。今回はテスト用としてSute.jpのユーザ名を設定してみます。 sute.jp
f:id:oichiki:20201102202817p:plain
設定例
これを読み込んで実際にログインするワークフローを作成します。

ログイン用ワークフロー

Configファイルの情報はDataTableに出力し、繰り返しの中で辞書型に格納していきます。辞書型はこのように設定しています。

f:id:oichiki:20201102215156p:plain
辞書型の変数
KeyにName列の値、ValueValue列の値をそれぞれ格納していきます。 後はブラウザーを開いてテキストボックスに「Config("ユーザ名")」を入力してログインボタンを押下するだけです。

まとめ

今回のように認証情報をConfigファイルに入力することはあまりないと思いますが、このような使い方があるということを知っておくだけでも、UiPath活用のアイデアが広がるのではないでしょうか。認証情報の管理はOrchestratorによってアセットを使ったりもするので、いつかネタに使用と思います。

【UiPath】フォルダの移動をするアクティビティがない? コードの呼び出しアクティビティで対応してみた。

UiPath Studioでフォルダの移動をしたい

この前業務関連の処理を書いていた時に、処理の終了したファイルがまとまって入っているフォルダを処理済みのフォルダに移動しようと思ったのですが、アクティビティを探してみるとファイルのコピーしかなくてフォルダに対する処理ができないようでした。

結局アクティビティでは対応できなそうなので、「.NET フォルダ 移動」とかで調べて対応することにしました。

コードの呼び出しアクティビティ

アクティビティの検索ボックスに「code」とか入れると出てきます。

f:id:oichiki:20201031181930p:plain
コードの呼び出し
この中に.NETのコードを書くことができるようです。アクティビティの見た目はこのような感じです。コードの編集からコードの記述を行います。

ワークフロー内で使っている変数は、引数として渡してあげると使用することができるので、繰り返し等で動的な処理も実現可能です。
f:id:oichiki:20201031182231p:plain
アクティビティ

.NETのDirectory.Moveで処理済みのフォルダを移動

実際の構成は下記のような感じです。

フォルダ構成:
・処理前フォルダ
 -処理対象フォルダ
  -Excelファイル
  -PDFファイル
  -TXTファイル
・処理済みフォルダ

ここで処理対象フォルダの中のファイルに対してそれぞれ処理を行い、すべて正常終了したら処理済みフォルダにフォルダ事移動しちゃいます。

ちなみに何度も実行するワークフローなので、処理の日付のフォルダを作ったり、フォルダ名に処理の順番で連番を付け加えてリネームしたりしてますが、今回は割愛します。

ドットと頭文字位を入れると候補が出てくるので正直何となくでもできますが、実際に書くコードはこんな感じです。

「System.IO.Directory.Move("処理対象フォルダのパス", "処理済みフォルダのパス\処理対象フォルダ名")」 移動先の方にフォルダ名はリネームも兼ねているので、末尾に「DateTime.Now.ToString("yyyyMMdd")」など追加してみたり、そもそものフォルダ名を変えたりなど、そこは要件に合わせることができます。

f:id:oichiki:20201031184532p:plain
コード例
引数を使用する場合は適宜文字列に変換してから使用してください。

まとめ

今回はフォルダの移動を行いましたが、フォルダのコピーをするアクティビティもない?ので、その場合もコードを呼び出しで対応することができます。

UiPathすごく便利なんですが、たまにかゆいところに手が届かない時があるんですよね。プログラム書いたことある人なら特に問題ないと思うのですが、せっかくのノーコードで使えるツールなのでそこはどうなのかなと思います。

最近はStudioXも出てきたのでそっちではできるのでしょうか?そっちはまだ勉強不足なので少しずつ触っていきたいと思います。

【バランスボール】座るだけでダイエットになるのか。消費カロリーを計算してみた。

バランスボールでダイエット

今回はバランスボールを椅子の代わりに使用して、どのくらい痩せられるかを計算した内容です。運動せず座っているだけで痩せられるという可能性を信じて計算しています。  使ったのはこれです。

消費カロリーの計算

消費カロリーの計算はMETS評価を使用して簡単に実施します。使用する心拍数はMibandを使用して計測しました。

まずは心拍数の計測です。1時間ほど動画を見ながら跳ねてみた結果、平均心拍数は86bpmとなりました。  次に運動強度を計算します。これは下記の式で計算できます。

運動強度[METS]=(運動時心拍数ー安静時心拍数)÷(最大心拍数-安静時心拍数)×10



最大心拍数は220-年齢、安静時心拍数は別に計測しました。
これを計算すると運動強度は2.4METSとなります。  運動強度が分かったら下記の式で消費カロリーが計算できます。 

消費カロリー=1.05×(運動強度-1)×運動時間×体重

これに代入すると1時間バランスボールを椅子替わりにした結果は、88.2kcalになります。 
METS表を参照すると一般的な座位のオフィスワークの運動強度は1.5METSで消費カロリーは31.5kcalなので、少しは効果が期待できる気がします。

 

腹筋をバキバキに割る

1時間で88kcalの消費ができるということは、どのくらいの効果が期待できるのかということを考えてみます。

まず、現在の体重は60kg・体脂肪率が18%なので体脂肪量は10.8kgです。腹筋(脱力時)が見え始める体脂肪率はおよそ15%で、その体脂肪量は9kgです。

つまり1.8kgの脂肪を燃焼させればいいことになります。
脂肪1gのカロリーは9kcalですが、体脂肪のうち脂質は80%とされているので、1kgの脂肪を燃焼させるのに7200kcal必要になります。

つまり、7200×1.8=12960[kcal]を消費すればいいことになります。
先ほど計算した、1時間のyoutubeみながらのバランスボール運動では、88.2kcalの消費でした。カロリー消費に必要時間を計算すると以下になります。参考としてジョギングの場合も計算しました。 

バランスボール:12960 kcal ÷ 88.2 kcal/h = 146.9[h]


ジョギング:12960 kcal ÷ 315 kcal/h = 41.1[h]


まとめ

今回の計算の結果、バランスボールを椅子の代わりに使用することは、ダイエットに関して一定の効果があると考えることができます。

約40時間分のジョギングが、約140時間バランスボールに座って跳ねているだけで代替できるなら、割とありなんじゃないでしょうか。

最近はリモートワークの人も多いと思うので、仕事中の8時間に実施すると1日で約700kcalの消費ができ、12960kcal分消費するためには約20日必要となります。

自粛の情勢が続いていて、運動不足もあるかと思うので、どうせならこのような取り組みを実施してみるのもいいのではないでしょうか。

参考サイト

METS表:https://www.wellba.com/hbnews/contents/mets_table.html