【UiPath】「変数と引数の違い」を理解する【初心者】
UiPathの学習追体験記事です。
※あくまで学習中の脳内を記事にしたものなので、この記事で書かれてあることが”正しい”とは限りません。
参考:学習効率本5巻 「知識の自作」
0.動機

「UiPath RPA アソシエイト資格試験」を受けたい!
と思い、練習問題のプラクティステストを受けてみたが、正答率は半分にも満たなかった。徹底的にプラクティステストの復習をするしかない!
ということで、本記事では、プラクティステストで間違えた問題の復習の様子を書きつらねていきます。
今回の記事は、前回記事の続きとなります。
前回記事↓

上記の記事で、「変数と引数の違い」について復習できなかった。そのため、本記事でその題目を扱いたいと思います。

変数はよく使用するけど、引数は使ったことないな~。難敵な予感がするね~。
では、以下から、「変数と引数の違い」についてを復習していきます。
1.全体像理解
全体像理解とは、理解する項目の位置づけを把握すること。
垂直的理解
理解する対象が、UiPathアカデミーまたはUiPathドキュメントのどの階層にあるかを確認する。
今回の理解の対象である「変数と引数」については、UiPathドキュメントの以下の階層に詳しい記載があった。
UiPath Studio ガイド>引数
UiPath Studio ガイド>変数
また、引数・変数から枝分かれし、
引数
・引数の管理
・引数パネル
・引数の使用
変数
・変数の管理
・変数パネル
・変数の型 ※さらに枝分かれ
・UiPath固有の変数 ※さらに枝分かれ
となっていた。
今回は、上記の中から引数をメインに学習していく。
では、はじめに引数の説明文を見てみる。
引数
引数は、プロジェクト間でデータの受け渡しをする場合に使用するものです。データを動的に格納して渡すので、広い意味では変数に似ています。変数はアクティビティ間でデータを渡しますが、引数はオートメーション間でデータを渡します。これにより、特定のプロジェクトを何度でも再利用することが可能になります。
引用元:https://docs.uipath.com/studio/lang-ja/docs/managing-arguments

ふむふむ、変数と引数では、「やりとりする相手が違う」ってイメージかな。
「変数はアクティビティ間でのやりとり、引数はオートメーション(プロセス?)間でのやりとり」ならば、引数を試す際は、2つのプロセスを用意しないといけないのかも。

ん、『引数は…広い意味では変数に似ています。』だって、
ということは、引数にもデータ型があるのかな。
水平的理解
以下の説明文を軸に考えてみる。
引数は、……広い意味では変数に似ています。変数はアクティビティ間でデータを渡しますが、引数はオートメーション間でデータを渡します。
引用元:https://docs.uipath.com/studio/lang-ja/docs/managing-arguments
「引数は、変数と似ている」とするならば、「引数パネル」と「変数パネル」の内容に類似はあるのだろうか。
引数パネルと変数パネルを見比べてみる。
引数パネル
変数パネル
名前、型、規定値は両者ともにあり、「方向」と「スコープ」は独自の項目となっている。

変数の「スコープ」と引数の「方向」を似ているものと仮定して、学習してみよう。前回、「変数のスコープ」についてを学んでいる分、「スコープ」と「方向」の共通点や相違点に気づけるはず。

引数パネルと変数パネルを見比べた結果、引数の「方向」のみ初見だった。引数の理解を深めるために、引数の「方向」をUiPathドキュメントで調べてみる。
UiPath Studio ガイド>引数>引数の管理
上記の階層に引数の「方向」についての説明文があった。以下内容。
引数の方向
引数には、引数に格納された情報の行き先をアプリケーションに伝えるための特定の方向 ([入力]、[出力]、[入力/出力]、[プロパティ]) があります。
引用元:https://docs.uipath.com/studio/lang-ja/docs/managing-arguments

『アプリケーションに伝えるため』とある。
引数に格納されたデータをアプリケーションに送れるってことかな。
『情報の行き先を…』ってあることもふまえると、情報の行き先だけ伝えて、情報は送れないってことかもしれない。
そもそも、UiPath Studioのアクティビティに「アプリの連携」という階層があることから、わざわざ、引数を使ってアプリケーションにデータを送らなくても、アクティビティで送れちゃうと思うんだよな~。
実際に使ってみないと、理解できそうにないな。
2.実践理解
実際に手を動かすことで理解を深める。
引数の「方向」を使ってみる
実際に、引数の「方向」を使ってみることで理解を深める。
・引数方向「入力」に着目して実験
引数方向を「入力」に設定して、色々試してみる。
引数は、2つのワークフロー間での値の受け渡しを行うものなので、ワークフローを2つ用意しておく。
引数を作成する。
引数パネルから「Inarg」という引数を作成する。方向は「入力」、引数の型は「String」にした。
上記のようなフローを作成した。
引数はワークフロー間でのやりとりなので、「ワークフロー ファイルを呼び出し」アクティビティをシーケンスの中に配置、その下にメッセージボックスを配置。メッセージボックスのフィールドに先ほど作成した引数Inargを記入。

呼び出すファイル「シーケンス②」のワークフローで、引数Inargの値を用意する必要があるね。
もう一つのワークフロー「シーケンス②」の設定をする
上記画像のように設定。”変”数Textを作成し、その変数に「引数」という文字列を格納する設定。
シーケンス①の「ワークフロー ファイルを呼び出し」アクティビティの「引数をインポート」をクリックするが、なにも表示されず。

ここで、他のワークフロー(シーケンス②)から値を引き継ぐはずだよね。なんでなにも表示されないのだろう。

呼び出される側のワークフローに、引数が用意されていないぞ。

シーケンス②に引数を用意できていない、さっき作成した変数を引数に変更しよう。
変数Textを”引”数Textに変更、引数方向は「出力」。
もういちど、「引数をインポート」をクリックし、引数の存在を確認する。
引数Textが表示された。
そのまま「OK」をクリックし、実行してみる。

ワークフロー間のやりとりが正しく行えていれば、メッセージボックスに「引数」と表示されるはず。
表示されず。
原因は、他のワークフロー(シーケンス②)から受け取った引数Textのデータをシーケンス①の引数Inargに格納できていないからだった。
上記画像のように、値欄に引数「Inarg」を記入。
そして、実行。
メッセージボックスに「引数」と表示された。無事、成功。
引数方向を変更して、実行してみる。
引数パネルの「方向」を変更せずに、「ワークフロー ファイルを呼び出し」の「引数をインポート」から引数の方向を変更してみる。
引数パネルでの方向は、出力。
「引数をインポート」の「方向」を入力に変更。
方向を「出力」から「入力」に変更。
しかし……
なにもせずにもう一度「引数をインポート」から引数の確認をすると、方向が「入力」から「出力」にもどっていた。

おそらく、変数パネルの設定が優先されるのだろう。
変数パネルから引数Textの方向を「入力」に変更。
「引数をインポート」から引数の方向を確認すると、
引数の方向が「入力」に変わっていた。

引数の方向の変更は、変数パネル上で行った方がよさそう。
引数Textの方向を「入力」にした状態で実行。
メッセージボックスには、なにも表示されなかった。

引数の方向「入力」は、その引数に値が書き込まれるって意味かな。そうだとすると、引数TextにInargに格納されている値(空)を書き込むってことになるはず。
引数の方向「入力/出力」を試してみる。

自動で適切な方向を採用してくれるのかな。
方向を「入力/出力」に変更。
実行。
方向「出力」にしたときと同じ結果になった。

やっぱり、自動で適した方向に設定してくれるのかな。「入力/出力」のデメリットが気になるな~。
方向を変更する引数を「Inarg」にしてみる。
引数Inargの方向を「出力」に変更して、実行してみる。
変数パネルから引数Inargの方向を「出力」に変更。
そして、実行。
正しく表示された。

え、これだと、引数の方向「入力」はどのようなときに使えば良いのだろう。とりあえず、「出力」にしておけば良さそうって思っちゃう。
・実行動画
正しく実行されたときの動画。
・引数方向「出力」に着目して実験
引数方向を「出力」に設定して、色々試してみる。
シーケンス①に引数Outargを作成し、方向を「出力」にする。そして、「代入」アクティビティで引数Outargに文字列「引数」を格納するフローにする。

引数Outargに格納される「引数」という文字列を他のワークフローで表示できれば良いんだね。
他のワークフロー「シーケンス②」で引数Outargの値を表示するためのフローを作成。
上記画像のように、「ワークフロー ファイルを呼び出し」アクティビティで引数Outargのあるワークフロー「シーケンス①」を呼び出す。そして、引数Outargに格納されている値を「メッセージボックス」アクティビティで表示する。
しかし、メッセージボックスにそのまま引数「Outarg」を記入すると、エラーとなった。

呼び出したワークフローの引数は、そのままでは使えないみたいだ。おそらく、呼び出されたワークフローの引数を呼び出した側のワークフローの変数・引数に代入?する必要があるのだろう。
「シーケンス②」のワークフローで変数を作成する。
変数Variableを作成し、メッセージボックスに記入。
「ワークフロー ファイルを呼び出し」アクティビティの「引数をインポート」をクリックする。
引数Outargの値欄に変数「Variable」を記入。

これで、引数Outargの値が変数Variableに引き継がれるね。
実行。
正しく表示された。

引数は、「あくまでワークフロー間での”やりとり(受け渡し)”ができるのであって、”移動”はできない」ってイメージかな。
・実行動画
正しく実行されたときの動画。
3.まとめ
「引数」と「引数の方向」の理解に励んだ。
ここでは、「引数」と「引数の方向」について分かったことを自分の言葉でまとめる。
・「引数」とは、ワークフロー間での”やりとり(受け渡し)”を可能とするもの。ただ、ワークフロー間を”移動”できるわけではない。
・「引数の方向」は、ワークフロー間で与える側・もらう側を決めるもの。※引数の方向「入力」に関しては、まだ理解できていない。

4.疑問
今回、「引数」と「引数の方向」を理解する上で、1つ疑問があった。
【疑問】
他のワークフローの引数から値を受け取るための設定として、引数の方向「入力」があると予想していたが、引数の方向「出力」でも同様な結果が得られた。引数の方向「入力」の適切な使用法はどのようなものか。
コメント