今回はUiPathを利用して乗換案内ロボットを作成してみました。
手元のiPhoneやiPad、またはサブディスプレイでこちらのページを表示した上でご自身のPCにて実際にロボットを作成して頂ければ理解が深まるかと思います。
また本ページ説明の疑問点はコメント頂ければ出来る範囲で回答しますので宜しくお願いします。
目次
ロボット概要
指定のExcelファイルに記載された出発駅、到着駅の名称をYahoo!路線情報に転記し、検索結果を書き戻すという作業を最終行まで繰り返すというものです▼
はじめに
今回使用するのは出発駅と到着駅の書かれたExcelファイルとUiPath Studioのソフトウェアです。
完成したロボットは本来UiPath Robotで動かすのですが、今回はサンプルとしてデバッグモードで動かしますので利用ソフトウェアはUiPath Studioのみです。
極力簡単なロボットの作り方を共有しますが、私よりももっと易しい作り方もあるかと思います。
ご参考までにお考えください。
利用するExcelファイル
sample.xlsxというファイルを利用します。
A列 出発駅
B列 到着駅
C列 料金
上記ヘッダーと共に、2行目~6行目のA、B列には任意の文字列が入力されています。
こちらのC列を埋めていくイメージです▼
UiPath Studioの起動
- 画面左下のWindowsマークのアイコンをクリックし、「UiPath Studio」をダブルクリック▼
- 無事立ち上がりました▼
初回はライセンスキーの入力等必要ですが、二回目以降はContinue Freeをクリックすればこちらのウィンドウが消えます。
新規ロボットファイルの作成
Sequenceの作成
- 左側の検索窓に「seq」と打てばSequenceのアイコンが表示されますので、それを右側のMainウィンドウにドラッグ&ドロップします▼
- こうなれば成功です▼
- このままだとわかりにくいのでSequenceの部分をダブルクリックし、「全体Sequence」に名称を変更しましょう▼
Excelファイル読込
- 左側の検索窓に「excel」と打ち込むと「Excel Application Scope」が表示されるのでそれをドラッグし、全体Sequenceの「Drop activity here」部分にドロップします▼
- 事前に準備しておいた出発駅、到着駅、料金の書いたexcelファイルの場所を指定します。
「…」をクリックし、ファイルを指定した上で「開く」を押下してください▼ - 左側の検索窓に「read」と打ち込むと「Read Range」が表示されるのでそれ(Excelの配下にあるものとWorkbookの配下にあるものがありますが、Excel配下のもの)をドラッグし、Excel application scope「Do」の「Drop activity here」の部分にドロップ▼
- Properties内のOutputにあるData tableの欄をクリックし、Ctrl+Kを押下。
すると「Set Name:」と表示されるので続けて「Set Name: ExcelData」と入力しEnter。
※ここでエクセル内のデータをExcelDataという変数に格納しています▼ - ExcelData変数を全体Sequenceで使えるよう設定を変更します。
①Variablesをクリック
②Scopeをクリック
③全体Sequenceを選択▼ - 最後に、わかりにくいのでExcel application scopeの名称を「Excel読込」に変更し、ウィンドウをたたみます(このステップは必須ではありません)▼
Yahoo!路線情報
- 左側の検索窓に「open」と打ち込むと「Open Browser」が表示されるのでそれをドラッグし、全体Sequence内、Excel読込の下部分にドロップ▼
- Open browserの欄に「”https://transit.yahoo.co.jp/”」を入力
※URLを””で括るのを忘れないでください▼ - 左側の検索窓に「for each row」と打ち込むと「For Each Row」が表示されるのでそれをドラッグし、Open browser内、Doの中にドロップ▼
- For each row inの右の枠を左クリックし、カーソルをあてたらShift+スペース。
選択肢の中からExcelDataを選びクリック▼ - For each rowのbody内にInternet ExplorerでYahoo!路線情報(https://transit.yahoo.co.jp/)を開きます。
- UI Path Studioに戻って「Recording」の中にある「web」をクリック▼
- この画面(背景にYahoo!路線情報のトップ画面が表示された状態)で「Type」ボタンをクリック▼
- 出発の横にあるボックスを広めに選択しクリック▼
- 「東京」とキー入力を行ったらEnterキーを押下します▼
- 同様に到着駅に「品川」と入力しEnterキーを押下します▼
- 駅名の入力ができていることを確認できたら「Click」ボタンををクリック▼
- 「検索」ボタンををクリック▼
- 続いて同様に「料金の安い順」をクリック▼
- 最後に作業を記録するために「Save&Exit」をクリック▼
検索結果の料金を読み取る
- 続いて、データの読み取りを行うため、UiPathで「DataScraping」をクリックします▼
- ボックスが出ますので、「Next」をクリックします▼
- 料金の最初の要素(ルート1)をクリックします▼
- 要素のソースを追加するため、「Next」をクリックします▼
- 同様に料金の二つ目の要素(ルート2)をクリックします▼
- 2つ目の要素を取り込めたので、そのまま「Next」をクリックします▼
- ページ上の「料金」の要素を抽出することができましたので、「Finish」をクリック▼
- 「次のページにもデータがありますか?」と出るので、「No」をクリックします。
これでUiPath上で「料金」を抽出する操作が作成できました▼
読み取ったデータを変数に格納
- ここで、プログラムの整理を行います。
「料金の安い順ボタンをクリック」の下に「データ抽出」がくるよう、ドラッグし動かします▼ - その後に残った、「Attach Brower」を削除します。
※「Attach Brower」で最初に検索した経路を記録してしまっており、繰り返し処理を行う場合に邪魔になってしまうため▼ - [Extract~」という部分をクリックすると、右側のPropertiesにボックスが表示され「Output」には「ExtractData」とあります。
これは、読み取ったデータを「ExtractData」という変数に保存しているという意味です▼ - Sequenceの最下部に「Output Data Table」と「Message box」をドラッグで追加します。
「Output Data Table」は読み取ったデータを文字列に変えることできます▼ - 「Output Data Table」は「Extract~」で読み取ったデータを文字列に変換する操作です。
画面右側のProperties内にあるINPUTに「ExtractData」を、OUTPUTには、Ctrl+Kを押下し、「Set Name:」と表示された状態で「Set Name:Output」と入力し、エンターを押します。
※ここでOutputという変数に読み取ったデータを文字列で格納しています▼ - Message boxを選択し、「Output」と入力してエンターを押します。
このまま画面左上の「Run」ボタンを押下するとロボットが作動し、下記の画面が現れます。
これで、料金のデータをweb上から読み取れていることが確認できました。
確認ができれば今回のロボットにMessage boxは必要ないので、削除しておきます▼
路線検索サイトにExcelからデータを抽出して書き込み
- これまでの作業では路線検索サイトに手打ちで「東京」、「品川」を打ち込んで操作を行いましたので、
この作業をExcelから抽出したデータで行えるようにします▼ - 変数「ExcelData」から順番にデータを選んで文字列で入力するため、出発の欄に「row(”出発”).ToString」と入れます。
同様に、到着の欄に「row(“到着”).ToString」と入力します▼
※それぞれ(“”)内の部分はExcelデータの見出しから列を選択するために記入しています。
※ToStringはExcelデータを文字列に変換するためとなります。 - これでExcelファイルに記載されているデータを路線検索サイトに繰り返し入力する作業が完了しましたので、
次に、抽出したデータをExcelファイルに書き込む作業を行います▼ - 再度、左側から「Excel Application Scope」をドラッグし、全体Sequenceの最下部にドロップします▼
- 「sample」のExcelファイルを開きます▼
- 左側の検索窓に「write」と打ち込むと「write cell」が表示されるのでそれをドラッグし、Body部分にドロップします▼
- 書き込むセルは「料金」の列ですので、sampleファイルのC列となりますので、書き込み先セルに「”C”」と入力します。
また、今回は繰り返し書き込みを行う作業となりますので、更に「+Rownumber」を記載します▼ - ブラウザから読み取ったデータは、「ExtractDataTable」に出力されていますので、書き込む数値は、「row(0).ToString」と指定します▼
※読み取ったデータは料金のみなので一つの列に列挙されているイメージ - UiPathが「Rownumber」を変数として捉えるため、左下のVariablesをクリックし変数として登録します。
Typeは「Generic value」、Defaultは「2」に設定します▼
※記入を始めるセルはC2セルからなので、繰り返しの一巡目がC2セルとなるようにするため。 - このままでは繰り返しが進んでも「Rownumber」が2のまま変化しないので、繰り返しごとに1ずつ増える操作を追加します。
左側の検索窓から「assign」をドラッグし、下部にドロップします▼ - 欄内が「RowNumber= RowNumber+1」となるように記入します。
※この操作は1件処理が完了するごとに、現在Rownumberに入っている変数に+1を行うようにするもの - 実行すると元の「sample」Excelファイルに自動で料金データが入力されています▼
最後に
UiPathでのロボット開発お疲れさまでした。
実際に開発してみていかがだったでしょうか。
UiPathの特徴としては以下が挙げられますが、直感的な操作では作りづらい部分が多かったのではないでしょうか。
- 録画機能を用いて作成可能
- プログラミング用語が多い
- データテーブルの内容が画面上で確認できない
録画機能だけで作ることが可能なロボットなら比較的簡単に作れるかと思いますが、録画機能で作ったステップを修正する際に難しく感じてしまうことが多いです。
とはいえ、UiPathは変数や構文制御など.Net Frameworkそのものです。
それゆえにC#やVB.NETの経験があれば違和感なく使いこなせるとは思います。
ただこれらの特徴からUiPath Community エディションであれば無償で使えるとは言え、万人向けとは言いがたくプログラミング経験者など比較的ITリテラシーの高い方向けのソフトウェアであるというのが私の考えです。
ぜひご参考にしていただければ幸いです。