■ロボット改修時の課題
ロボットの改修が必要になったとき、改修の際にデバッグ用に追加したステップを残したままだったり、無効化したステップを元に戻さないままで、改修後のロボットファイルをMCにアップロードすると、運用で障害が発生してしまいます。
これを防ぐためには、改修時の動作テストやデバッグのための暫定処置の内容を作業チェックリストに記載しておき、ロボットファイルをMCにアップロードする前に、チェックリストに従って暫定処置を除去して、改修箇所以外は元通りに復元するよう改修手順をルール化する必要があります。
ただし、上記の方法は、作業者の目視チェックに頼ることになるので、人の作業負荷が高くなるとともに、チェック漏れを防ぐためにダブルチェックを行なうなどの体制作りも必要になります。
足場撤去

■差分抽出の必要性
プログラミング言語を使う開発では、人の作業負荷を減らす方法として、変更前と変更後のソースコードファイルの差分を、Diffツールを使って抽出する手法が一般的に使われています。
これに倣って、RPAのノーコード開発においても、「変更前と変更後のロボットファイルを比較して、差分を抽出する」機能や手法に対する期待は高まっています。

■ロボットファイルの差分抽出手法
【課題】
BizRobo!のロボットファイルは、XML形式のテキストファイルなので、差分抽出には「一般的なDiffツールが使えるんじゃないか?」と考えてWinMergeで試してみたところ、そう甘くはありませんでした。
①ステップを1つでも追加や削除する、②変数を1つでも追加や削除する、という編集を行った後で、変更前と変更後のファイルの差分を抽出すると、ロボットファイルのいたるところが差分として抽出されました。
ロボットファイルの中には、ステップの位置を管理するためと思われる「id」、参照関係を管理するためと思われる「idref」という属性が使われています。前述の①や②の編集を行うと、この「id」や「idref」の属性値が振り直しになることが、ロボットファイルのいたるところが差分として抽出された原因でした。
プログラミング言語であれば、ソースファイルの中に管理上の記述が含まれることが無いのですが、この仕組みを使っていることの弊害は、ノーコードツールの宿命なのかもしれません。

【課題解決方針】
そこで、ステップの位置や参照関係の変化を無視(「id」や「idref」の属性値の変化を無視)して、どのステップを変更したのかだけを抽出する方法を考えることにします。

【差分抽出の具体的手法】
(1)「id」属性値と共にコンテンツに"true"や"false"を定義している行を探し(※1)、その「id」属性値を参照している「idref」の行を書き換えます。
  例1)id="1"で"true"、id="0"で"false"を定義しているとき
   「name="enabled" idref="1"」→「name="enabled" 設定="有効"」
   「name="enabled" idref="0"」→「name="enabled" 設定="無効"」
  例2)id="3"で"true"、id="0"で"false"を定義しているとき
   「name="enabled" idref="3"」→「name="enabled" 設定="有効"」
   「name="enabled" idref="0"」→「name="enabled" 設定="無効"」
<補足>
差分抽出の邪魔になる「idref」の属性値を空にしたいけれども、全ての行の「idref」の属性値を空にすると、ステップの有効/無効が区別できなくなるため、ステップの有効/無効を覚えている「idref」の行を先に書き換えます。「name="enabled" idref="数字"」の行で有効/無効を区別していて数字の部分がロボットによって可変です。下記(2)の置換処理に該当しないようにするための前処理です。

(2)ロボットファイルの中の「id」や「idref」の属性値を空にします。
  例)「id="1"」→「id=""」、「idref="1"」→「idref=""」

(3)Diffツールを使って差分抽出します。

(※1)コンテンツに"true"や"false"を定義している行の探し方
ロボットファイル中には、「id」属性値と共に、コンテンツに"true"や"false"を定義している行がそれぞれ1行だけあります。"true"の行も"false"の行もロボットファイルの中で一度しか現れず、その行以降で"true"や"false"を表したいときは、「id」の属性値が使用されています。
例1)「HTTPキャッシュ」の設定で"true"を定義している例
「HTTPキャッシュ」の設定で"true"を表すid値1を定義して、ステップの有効を表すプロパティでid値1を使っている。
  <property name="privateHTTPCacheEnabled" class="Boolean" id="1">true</property>
      :
  <property name="enabled" idref="1"/>
      :
例2)ステップの有効を表すプロパティで"true"を定義している例
ステップの有効を定義するプロパティで"true"を表すid値3を定義して、それ以降の行ではステップの有効を表すプロパティでid値3を使っている。
  <property name="enabled" class="Boolean" id="3">true</property >
      :
  <property name="enabled" idref="3"/>
      :

■ツールダウンロード(2022/4/8)
上記で説明した手法を、PoweShellスクリプトで実装したツールを「ROBOT-HUB」で公開しました。下記URLからダウンロードすることができます。
【共通ツール】ロボットファイルの差分抽出のための変換ツール
「ROBOT-HUB」では共通部品を無料でダウンロードできます!