シナリオ作成機能は必要?

2020年5月16日

多くのRPAソフトには

  • シナリオ自動記録機能
  • 画面操作(GUI)でシナリオを作成する機能

が装備されています。

一方、Seleniumには両方ともありません。(Selenium IDEを筆頭に筆頭に、自動記録用ツールが何種類か開発されていますが、基本的には技術者向けですし、現時点では満足できるものではないようです)
 高機能に越したことはありませんが、果たしてシナリオを作成する上で、これらの機能はどのぐらい役立つのでしょうか?

自動記録機能

自動記録とは、あらかじめ記録モードにした上で画面操作を行うと、その操作を自動でシナリオに記録する機能です。Excelのマクロ記録機能のようなものです。昔と違い、最近のソフトはかなり正確に記録してくれるようです。

シナリオ(プログラム)を自動で作成してくれるのだから

  1. プログラムを書かなくてよい
  2. 手動でシナリオを作るより早く作ることができる

というメリットが考えられます。

1.プログラムを書かなくてよい

自動記録が、手を加えずに全くそのまま使えるのは、おそらく
 (1)同じデータを(2)同じ項目に入力し(3)同じ結果を(4)同じ件数だけ得る
処理だけです。

実際のシナリオは

  1. ケース毎に入力が変わるので、入力値を固定ではなく可変にしなければなりません。Excelから入力する場合は、入力対象のセルを指定しなければなりません。
  2. 自動化する時点で、あまり入力項目が変わることはないと思いますが、「あるケースはこの項目を入力しない」というのは考えられます。その場合、ケースによって入力項目が変わることになります。
  3. 入力内容によって結果の取得対象が変わるケース、正常かエラーによって画面が切り変わるケースが考えられます。この場合、判定(分岐)ロジックを入れる必要があります。
  4. 1件で終了ということはないので、繰り返しの処理が必要です。

よって、

  • 入力値を可変(変数)にする
  • 条件で変わる部分は、判定ロジックを入れ分岐させる。
  • 繰り返しの処理を入れる

最低でも、これだけ(入力値の変数化、制御ロジックの挿入)は手作りする必要があります。

2.手動でシナリオを作るより早い

 前述の通り、そのままで利用することはできませんが、ケース1件分の基本構造、すなわちシナリオの骨格となる部分は自動作成機能が利用できると思います。
 また、自動記録機能が出力した内容を見て、どのようなシナリオを組めばよいかを理解することができます。RPAを理解するのに役立つでしょう。
 よって、特にRPAソフトの使い始めには役立ってくれると考えられます。

画面作成機能

シナリオ開発用の画面に、RPAに操作させる各種の命令が、メニューやパネルで配置されていて、マウスで選択してシナリオに取り込みます。シナリオ構造は図(フローチャート)で表示され、開発者はプログラムを書く必要がありません。
要するに、プログラムコードで書かれたシナリオを、GUIで覆い隠す(ラッピング)機能です。

RPA模式図

一方、Seleniumはこんな感じです。

Selenium模式図

GUIでシナリオを作成できれば、

  • プログラムを知らなくてよい
  • プログラムを書かないから生産性が高い

と考えられますが、はたしてそうでしょうか?

1.プログラムを理解しなくてよい

実際にシナリオを作られた方なら、プログラムの知識がないとシナリオを作成できないのは理解されていると思います。

  • 入力項目はどれにするか?
  • 入力値はどこから取得するか?
  • 出力結果をどの項目から取得するか?
  • 結果をどこに書き込むか?
  • 正常、エラーの判定はどう見極めるか?
  • 繰り返しの条件は?
  • 例外時の判定と処理

 プログラムの知識(変数、条件判断、繰り返し、例外など)がないと、とてもシナリオを作成することはできません。システム開発において、フローチャートの作成は「プログラム設計」というプログラム作成そのものです。あとはプログラム言語の決まりに従って、コードに落とすだけです。

 プログラムコードは、フローチャートをコンピュータが理解できるように書き換えたもので、完璧なフローチャートがあればコードは機械的に作成できます。(現にRPAソフトは、フローチャートから機械的にプログラムコードを作成しています)

 大変なのは、フローチャートからプログラムを作る部分ではなく、フローチャートを作成する部分(ロジックを考える部分)です。心理的なハードルを下げる効果はありかもしれませんが、画面でシナリオを作成する場合も、プログラムの知識は必須です。

2.プログラムコードを書かないから生産性が高い

さらに加えますと、技術者はフローチャートを書きません。生産性が低くなるからです。
複雑なロジックなら別ですが、頭の中で整理できるレベルならコードを書いた方が早いです。

 人の作ったプログラムを理解する場合も、制御構造(IF文や繰り返しのループ処理)やデータの流れ(変数が出てくる場所)に注意しながらコードを読んでいきます。
 フローチャートですと、細かい条件などは表示できないので、結局はコードを見ることになります(RPAソフトの場合はダイアログを開いて、プロパティ設定を確認)
ましてや、RPAは画面操作を再現するだけなのでシンプルな制御構造で実現できます。最初のうちはともかく、慣れた後まで、わざわざフローチャートを作る必要はないでしょう。

最強の生産性向上はコピペ

そして何よりもコードを書いた方が生産性が高いと言えることがあります。
コピー&ペーストできるからです。

Excelの値をWebブラウザに入力する場合を考えてみましょう。

画面でシナリオを作成する場合ですと、

  • メニューから実行する命令を選択
  • 追加された命令のダイアログを開く
  • 項目を特定するプロパティ(XPathなど)を入力
  • 入力元の情報(Excelの列名など)を入力
  • ダイアログを閉じる

項目数だけ繰り返すことになります。

一方、Seleniumでは、例えば文字入力の場合、

driver.find_element_by_xpath('XPath情報').send_keys(Excelセル情報)

すなわち

driver.find_element_by_xpath('//input[@id="sfrom"]').send_keys(ws1.cells(i, 2).value)

こんな感じになります。

別の入力項目には、先ほどのコードをコピーして、変更部分を書き換えます。

driver.find_element_by_xpath('//input[@id="sto"]').send_keys(ws1.cells(i, 3).value)

いちいち画面に入力するのと、変更部分のみ書き換えるのとでは、どちらの方が早いでしょうか?
慣れてくると全然違いますよ。

2020年5月16日

Posted by sj