初心者が躓きがちなUiPathの変数と引数によるエラーの特徴と対策

UiPathを使用し自動化ロボットを作成している中で多くの人が、エラーや設定方法が分からずに困る事があると思います。特にUiPath初心者が躓きがちなのが「変数と引数」の設定の仕方や「変数と引数」に関連するエラーとその解消方法かもしれません。
本日は、UiPath初心者だった頃に私が実際に躓いた「変数と引数」の設定方法や、エラーの解消方法についてお伝えします。

UiPath初心者がよく躓く変数と引数のエラーの特徴について

変数と引数は、変数の型を理解して使いこなすことがポイントです

UiPathで初心者が最初に躓く変数と引数のエラーとして以下の2つがあります。

  1. 変数の設定時にエラーが出てしまい、ロボットの実行ができない
  2. 引数の設定時に、入出力の設定を間違えてしまい変数の値の受け渡しができない

これらのエラーが発生しやすい理由とその問題を解消するためのポイントについて以下でご説明いたします。

なぜ初心者が「変数と引数」で躓きやすいのか?

変数パネルの各項目の設定内容を理解できていない

UiPath初心者は変数パネルの各項目の設定内容を正しく理解できていないが為に、変数に関するエラーを起こしやすい傾向にあります。
特にアクティビティ内での変数の設定ができず、アクティビティの設定画面からエラー表記が消えずに、ロボットを実行することができないというエラーが発生している事象が多いように感じます。

引数の入出力の方向を理解できていない

引数の設定時に初心者が躓きやすいエラーの傾向として、引数の入出力の方向を理解できていないことで値の受け渡しのエラーを起こしてしまうケースも多く見受けられます。
特に親子関係のロボットを実行した際に、変数の値の受け渡しが出来ていない事でエラーが発生しているケースがあるように感じます。
では、これらのポイントをどのように理解すればよいのか、以下でその解消ポイントをご説明いたします。

初心者が変数と引数で躓かないように理解してほしいポイント

変数と引数の設定時のエラーに躓かないためには、変数に関して気を付けるポイントから順にご説明していきます。

変数パネルの各項目の設定内容のポイント

変数の初心者が躓きやすいエラー傾向を解消するには、変数パネルの各項目の設定内容を理解し、その変数がアクティビティ内で使用が可能かどうかを変数パネルで確認することが大切です。
では、変数パネルの設定について、以下キャプチャと一緒に解説していきます。

※変数パネルは、アクティビティ挿入画面の左下の「変数」をクリックすることで開くことが可能です。

項目名必須or任意概要躓きやすい設定ミスや課題設定時のポイント
名前必須変数名を作成・修正するフィールド意味のない変数名を付けてしまい、開発を進めていくにつれて変数の数が増えていき、なんの変数かわからなくなり、変数の管理ができなくなる。変数名に意味を持たせて、わかりやすくするハンガリアン記法※1を変数名に取り入れる)
例:文字列(String)型の会社名を格納している変数なら、「sCompanyName」というように設定してみると頭の文字で「s」=String型の変数というのがすぐにわかります。
上記の例は、英語表記にしていますが、日本語表記で変数名を設定することもUiPathは推奨しております。
専門用語で英語表記が分かりにくい、英語の羅列が長すぎる等で可読性が下がるというデメリットがあるためです。
変数の型必須値を格納する変数の種類を決定・変更することができるフィールドです。
※デフォルトで「String(文字列型)」が最初に設定されます。
アクティビティ設定の際に、変数を設定すると変数の「型」が対応しておらず、エラーになってしまう対応している変数の「型」を確認し、対応している「型」に変更することで、エラーが解消できます。

※「型の参照(Browse for types…)」を選択すると、すべての変数の「型」を表示させることが可能です。
スコープ必須変数を使用できる範囲を設定することができるフィールドです。
※変数作成時に、クリックで選択しているシーケンスがデフォルトの範囲で反映されます。
範囲を広げすぎて、似ている変数名のものを誤って選択してしまい、値が正常に取得できないエラーが発生する変数のスコープは限りなく、狭く設定し、保守性を向上させることがポイントです。
ロボットを開発する上で、変数が増えていくことは、避けられない為、わかりやすい変数名を付けることも大切ですが、該当のシーケンスで使用する変数を正しい範囲を設定して、管理することで、誤って変数を選択したりする間違いが起こることを防ぐことが可能です。
既定(default)任意ロボットを実行した際に変数に格納される最初の値を既定値として定めることが可能なフィールドです。
※任意の為、定めなくてもエラーにはなりません。
既定値は、実行中に変数の値の中身が変更する予定のない変数に定めることが多いです。
String型変数の規定値が設定できないString型の変数に規定値を定める場合は、設定したい文字列を「“”」で囲むことで設定することが可能です。
余談ですが、数値型の変数を作成した際に規定値を定めない場合でも、必ず規定値に「0」が最初から入っています。

※1 ハンガリアン記法について
<ハンガリアン記法とは?>
変数名の最初または最後に「接頭辞」または「接尾辞」を付けることで、変数の意味や内容を読み取りやすくする表記方法のことです。
例えば、String型の変数(CompanyName)にハンガリアン記法を取り入れると、接頭辞に「s」を付けて、「sCompanyName」と表記させることで、文字列型の変数であることが、変数名だけで認識することが可能です。
ちなみに、UiPathのバックグラウンドである.Net FrameWorkでは非推奨とされていますが、場合によっては、社内で共通認識を得るために有用なケースもあります。
ハンガリアン記法を取り入れる際には、開発標準や開発ルールで接頭辞の命名規則を設けることをお勧めします。
ハンガリアン記法のメリットとデメリットは以下の通りです。
<メリット>
1.ロボットの可読性の向上
2.ログでのエラー特定時間の向上
<デメリット>
1.変数名が長くなる
2.「型」が変更になった場合の、変数名の修正

では、変数パネルの設定項目を理解したうえで、アクティビティ内の変数設定時にエラー表示が消えず、ロボットを実行することができない課題については、変数パネルから使用したい変数の「型」をアクティビティ内で使用できる型に変更することで解消することが可能です。
アクティビティ内の設定時にエラー表記が消えないということは、そのアクティビティ内で設定できる変数の「型」ではない為、エラーになっているということです。

また、アクティビティ内で直接変数を作成すれば使用できる型が自動的に設定される為、どの型を使用すればいいかわからない際は、アクティビティ内で設定する方法がおすすめです。

引数の入出力時の設定のポイント

引数の設定時に気を付けるポイントは、引数の入力と出力の方向を理解することです。
変数の値を渡したい側は、「出力」、変数の値を受け取りたい側は、「入力」という設定方向になることを、まず覚えておくことが大切です。
では、入力と出力の設定方法と、入出力の方向について、親子関係のロボットの図で説明していきます。

まず、上の図のように、子ロボットが作成した変数を親ロボットが使用したいとなった場合、子ロボット側での引数の設定方向としては「出力」になります。
そして、その値を受け取りたい親ロボット側は、その値を受け取る為の変数を作成し、その受け取る為の引数の方向としては「入力」になります。

では、次に子ロボットが作成した変数を親ロボットが使用して、またその後、子ロボットが使用したい時の入出力の設定方向について、説明していきます。

上で説明したように、まず、必ず親ロボット(変数を受け取る側)では、子ロボットから値を受け取る為の変数を用意しておきます。
今回の場合、どちらも値を渡したい・受け取りたいが発生するため、お互いの引数の設定方向は、「入力/出力」になります。
引数の考え方について、理解すれば、引数の躓きポイントは解消できます。
次に、引数の設定時に起こる設定間違いとその問題に対する対策を紹介します。

<引数の設定時に躓く設定エラー>
受け渡しの方向を理解しても、どの変数がどの変数に値を受け渡しているのかわからなくて、間違えた変数に受け渡しをしてしまいロボットがエラーになったり、成果物が正しく生成されなかったりする課題が初心者でなくても発生するケースがよくあります。

<引数の設定時に躓くエラーの対策方法>
受け渡しをする変数の頭に「In_」「Out_」「IO_」を付けて可読性を上げる
変数を設定する際に、入力で使用する変数なら、「In_dtTable」、出力で使用する変数なら「Out_dtTable」といったように変数の頭に入出力の方向をつけてあげるだけで、どの変数の値をどれが受け取るのかをわかりやすくすることが可能です。
※変数名の付け方は、社内のルールを定めてから統一して使用することで保守性と可読性が向上します。
では、上記の解消ポイントを踏まえたうえで、次のフェーズでは、実際のエラー内容とその解決方法をお話いたします。

UiPathで初心者が躓く変数と引数の課題と対応方法

UiPathで初心者がよく躓く変数と引数の課題とその解決・対応方法を紹介します

UiPathで初心者がよく躓く変数と引数のエラーや課題について、具体的な例とその対応方法・解決例を以下でご紹介いたします。

【事例1】シーケンス1で作成した変数が、後続処理で使用することができない

初心者が最初に躓きがちな変数設定時の課題です。
例えば、ロボットの中にシーケンス1とシーケンス2があったとします。
シーケンス1で作成した文字列型の変数を後続処理のシーケンス2でも作成したいのに、シーケンス1で作成した変数が変数パネルに表示されず使用することができなくて困ったことはありませんか?

<キャプチャ>
シーケンス1で作成したsCompanyNameがシーケンス2で使用したいのにアクティビティ内で表示されない

上記の課題内容についての解決方法は、以下の通りです。

【事例1】解決方法

変数パネルのスコープの範囲が、シーケンス1になっている場合は、作成した変数は、シーケンス1でしか使うことができません。
この場合、スコープの範囲を拡大することにより、シーケンス2でも使用することが可能になります。
※シーケンス1とシーケンス2より階層の大きなシーケンスを選択する

<キャプチャ>
①シーケンス1をクリックしながら、左下の変数パネルをクリック

②変数パネル内のスコープの範囲を確認

③sCompanyNameのスコープの範囲をシーケンス1より大きな範囲に変更する

※上記の変数パネルでの設定ポイントでもお話しましたが、スコープの範囲は適切な範囲で設定しましょう。

【事例2】条件に当てはまるファイル名を1つの文字列変数ですべて取得したいが、ファイル名が上書きされてしまう

例えばエラーが発生したファイル名をまとめてメールで報告したいときなどに結合した文字列が必要になりますが、1回ごとに上書きされて困ってしまったといことはありませんか?
上記の課題は以下の解決方法を実施することで、解決することが可能です。

【事例2】解決方法

変数パネルから文字列変数を2つ作成し、結合文字列変数に代入アクティビティでファイル名をマージする
文字列変数を活用し取得したファイル名を格納した変数をマージすることで解決することが可能です。
詳しい設定方法は、以下の通りです。

<設定手順>
※変数パネルで「例:sFileName」と「例:sFileNames」の文字列型変数をあらかじめ作成する

  1. ループで使用しているファイル名を取得し、文字列型変数に格納する 「例:sFileName」
  2. 「代入」アクティビティを使用して、変数パネルで作成した「sFileNames」に以下式を代入する ※代入例:sFileNames+”,”+ sFileName

※設定手順の中では、マージする差異に、変数と変数の間に“,”を入れていますが、マージするのみの手順なら“,”は入れなくても大丈夫です。

【事例3】指定した引数の値が受け渡しできず、ロボットがエラーで止まってしまう

親子関係のロボットを構築する際に、引数の設定がうまくできておらず、引数で設定した受け渡ししたい変数の中身が空ですというエラーが発生し、ロボットが正常終了できない課題が発生したことはありませんか?
私も以下フローのロボットを構築した際に、引数の値が受け渡しできない課題が発生しました。

<フローの流れ>

  1. サイトのデータを抽出する(子Bot_A)
  2. サイトから抽出したデータをExcelファイルに転記する(子Bot_B)

今回エラーが発生した箇所は、子Bot_Aで抽出したデータが子Bot_Bで転記する際に、変数の中身がないというエラーでした。

【事例3】解決方法

引数の入出力設定を確認し、正しい設定を行う

上記エラーは、以下設定を行うことで解決することができました。
各それぞれの設定方法は、以下の通りです。

<親botの設定>

  1. 親botで「ワークフローファイルを呼び出し」アクティビティを使用して、子Bot_Aと子Bot_Bを順番に呼び出す
  2. 子Bot_Aでサイトから取得した値の変数を「ワークフローファイルを呼び出し」アクティビティの「引数をインポート」で入出力設定を行う
    ※この際に、入出力の設定方向は、「出力」を選択する
    ※Valueには、返す変数を設定する
  1. 親bot内の引数パネルに同じように受け渡しする変数を設定する
    ※この際に、入出力の設定方向は、「入力/出力」を選択する
  1. ❷で入出力設定をした変数を、子Bot_Bの「ワークフローファイルを呼び出し」アクティビティの「引数をインポート」で入出力設定を行う
    ※この際に、入出力の設定方向は、「入力」を選択する
    ※Valueには、返す変数を設定する

<子Bot_Aの設定>

  1. サイトから取得した値の変数を引数パネルに設定する
     ※設定方法は、キャプチャを参照ください

<子Bot_Bの設定>

  1. 子Bot_Aで取得した変数を引数パネルに設定する
    ※設定方法は、キャプチャを参照ください

上記のようにUiPathの初心者が躓くエラーの原因のほとんどは、変数と引数の設定方法が理解できていないことが大きな特徴です。
変数と引数の設定方法や特徴を理解することで、これからの開発工数は大幅に削減されると思います。 弊社では、他にもUiPath関連の記事を掲載しております。

UiPathのモダンとクラシックの使い分けをする意味

UiPathの開発標準

UiPathでのブラウザ操作(クラシック、モダン)

UiPathでモダンデザインを使用する際のメリットや課題

弊社ではUiPathのほかにもAutomation360やBizRobo!のツールも取り入れて開発を行っております。UiPathも含めて、自動化を進めるお手伝いが可能です。
もし、自動化を検討している業務等がありましたら是非以下よりお問い合わせください。

本記事の執筆者

ペネトレイター株式会社 平石