
【UiPath StudioXの遊びかた 2】ノートブックで遊ぼう~ソース・リファクタリング:ロボットを安全に動かす手法
さてと、予告どおり、普段は仕事してる時間なので、その内
ビール片手に
やるが、UiPath StudioXで今日と月曜日は遊んでこ💃
じゃ早速
前回までで

で遊んでたんだけど、
処理開始( ´∀` )
処理終了(-_-;)
てな感じで、
直打ち=ハードコーディング
になってしまってて、これってこんくらいの分量だと把握できるんだけど、
分量が多くなると管理が難しくなる
ソースが何をしているか読み解くのに時間がかかる
変更箇所が多くなりすぎると、改修するのが面倒になる
ってのがあるので、他のプログラミング言語とかコードベースの開発環境でも当たり前にやってる手法、
・変数や定数のグローバル化=ハードコーディングの禁止
☞パラメータ化
は、ローコードツールであるUiPathでも普通に使えるんだよね~~~
ここでポイント①設計やソース管理を意識しない職人気取りの自称、プロエンジニアさんほど、
「いやいやそんなもんはやらずに読みにくいとか直打ちしてるソースを短時間とか一瞬で読み解けるのがエンジニア」
「俺たちはそれでやってきた」
「そんな面倒くさいことやってられない」
みたいな感じで昔気質の人ほど、今から紹介する
ソースを安全に管理する手法
をすっ飛ばしたり、頭ごなしに拒絶する人がどのプログラミング言語の開発現場でもいるんだけど、そーゆー人や現場ほど、大きな障害とか大規模なシステム改修なんかが入ったときに、遅かれ早かれやる羽目になり、目先の対処で最初からやってりゃ5分(値をひとつ変えるだけ)で終わる作業とかでも、数か月(悪けりゃ数年)の時間をかける( ´∀` )
なのに、「三つ子の魂百まで」で一度身に着いた悪い習慣は取れないから、次の開発の時にもやろうとしないんだよね( ´∀` )
☞ま、だからまだ早い段階で、
一流のエンジニアが意識してる当たり前の作法
をこーやって最初に触れようとしてんだけどね。。。さてと、
操作手順

または、

出てくるメニューの ノートブックを開く を左クリック

左側からシートを見ていくと~~~
■スクラッチパッド:何でもフリーで書ける用のメモ

■日付:ソースで扱う日付用のシート

■テキスト:ソースで扱う文字列用のシート

■数字:ソースで扱う数値用のシート

■ファイル:ソースで扱うファイル用のシート

■プロジェクト ノートブックについて:解説シート

最初に読んだ方が良さげな、、、
てな感じになってんね。
なので、まずは、




の順にマウスの矢印を合わせると

さっき追加した値は見当たらないね👀💦
なので~~

☆この操作でExcelアドオンのダイアログボックスが出てきた人は、普通にOKで進んでいってもらって問題ないので、アドオンを入れてね~~~
すると、







同じように~~~

再度、実行💃

さてと、問題です
「実は、もう1か所、ハードコーディングしている箇所があるのですが、どこでしょう?」
ヒント:
ファイルシートの解説で既に書いてるところ、、、
答え:そ!

と

ここでポイント②UiPathとかWinActorみたいなロボットを使う業務って
圧倒的に
CSVファイル
エクセルファイル
WEB
を扱う作業が多いんだけど、
ファイルの格納場所=フルパスって案外、変更されることが多い
(例)部署移動、会社統合、事業譲渡など
そんなときに、
ファイルの配置場所をいちいちソースに直書きしてたら、変えるべき場所がどこなのか読み解くのも時間かかるでしょ( ´∀` )
ここでもこのファイルのフルパスを使ってるけど、
「ここは前後の処理で既に必要ない処理かもしれん」
「下手に変えたら後続の処理に影響するかも~~~」
とかね💦
そんなときに



てな感じで指定すると、

しかも利点としては、



何か所も同じフォルダのフルパスをハードコーディングしてると、
変更漏れが発生☞処理結果がうまくいかない
ってことが出てくるので~~~
変数・定数に限らず、ノートブックに外出しできるモノは外に出しておけ!
☞パラメータ化
=コードベースでは、職人が当たり前にやってるグローバル化の手法
=リファクタリングの手法
ここでポイント③リファクタリングって何?
これは2年以上前に既に他のマガジンで記事にしてる
なんかで書いてるんだけど、平たく言っちゃうと、
ごちゃごちゃしてるコードを管理しやすいように安全に改善する手法
その内のひとつの手法として、
再利用しやすいように、
何回も他の箇所で使うコードを
小分けにしていく手法があるだけ。
UiPath Studioでの開発でよくお見受けするんだけど、
リファクタリングって言葉もよく知らないままに
その再利用しやすいように小分けにする手法だけ=リファクタリング
って勘違いしてる人も多いんだけど、リファクタリングは、あくまでも
コードを安全に管理する手法
であって、
「再利用の可能性があるから~~~」
で何でもかんでも小分けにすればいい
ではないからね👀💦
安全に変更可能性を考えて、
パラメータ化することもひとつのリファクタリング
☞コードが安全に管理できればそれで良し
だから。
ただし、
リファクタリングを意識するなら、反対に
コードチューニングも意識しておかないと🙅
理由:やみくもに小分けにした結果、
受け渡しで余計なバグが発生する
処理速度が却って落ちる
なんてことが起きる可能性があるからね👀
そもそも、UiPathってコードをほぼ書かずにできるローコードツールだから、リファクタリングって関係ないんじゃないの?
って人も居そうだし、VBAとかやったことがある人なら感覚的にわかると思うんだけど、
CSVファイルの読み込みやエクセルファイルの操作
ってVBAで思いっきりできること
で、それを
コードなんかが覚えなくても誰でもより簡単に、
VBAなんかで実現しにくいことを実現できるようにしながら、
画面の操作で自動化できるツールを開発できる
☞テクノロジーの民主化
で作られたってだけで、
裏側でやってることはコードでやってることと変わらない
からね。コードじゃないので、オイラは勝手に
ロボットのソースを読みやすく安全に管理する手法
☞ソース・リファクタリング
って命名してるけど( ´∀` )
頭でっかりで何でも狭義にしか概念モデルを捉えない人は、
二言目には、「厳密に言えば、」って言いたがるんだけど、
そんなゆーてたら、RPAだって厳密に言えばRPAでプログラミングとは違うって言えるし、RPAの中でもUiPathはUiPathで、RPAと違うとか何でも言えるからね( ´∀` )
そんな杓子定規に捉えるんじゃなく、あくまでも
自分が実現したい目的は何か?
で柔軟に、他のプログラミング言語で当たり前にやってる手法や、これまでの先人たちの知恵などなど、
使える良いモノは何でも取り込む
くらいの柔軟性がないと、
教科書どおりにやるばっかりで、
品質とスピード間のある良い開発なんてできるかい( ´∀` )
ここまでの今回のソース

一歩前へ
さてと、軽く基本編は終わったところで、
ノートブックちゃんは、
立てつけの情報が多すぎる
☞余計な情報が多いと混乱する
ので~~~
プロジェクトファイル自体をバックアップ取った後に、
今のところ使っていない余計なモノは消して、
使う頻度の使うシート順に並べ替え
みたいに、
ガンガンカスタマイズしておこう







って感じで整理してあげると~~~

さらに~~~

その他シートを新規で追加しなおすと~~~

変更が加わった文字列シート

の値を使ってるソースの箇所を修正しとこう


んでもって、変更が加わったら、すぐに今まで通り動くかを検証



これで、
ノートブックを自由に使いやすいようにカスタマイズしても
問題なく動くどころか操作しやすくなる
ってことが肌感覚で分かったね👀💃
なのでさっきのバックアップファイルは要らないからゴミ箱へ~~~
さらにもう一歩前へ
今後、パブリッシュやリリースを考えた場合、
実はノートブックが同じプロジェクトファイル内にあると結局、パブリッシュしなおさないといけなくなるので~~~
ノートブック自体を外出し出来ないか?
を実験してみよう!
再びバックアップを取って~~~




ソース画面に戻って~~~



開くを左クリックすると~~~

このままOKを左クリック~~~

後で使用するために名前を付けるの箇所に変わってる👀


よっしゃ、これで再度実行してみよう💃



と、ここまで最後の仕上げ~~~
ま、実はセル毎指定していくので、StudioXではこれでも問題ないんだけど、



他の人が見た時も見やすい
UiPath StudioでRE-Frameworkで開発するときに、ディクショナリ型でConfigの値を読み込むときもマイグレーションしやすい
ので、
ブラッシュアップしとこう💃で、セルの位置が変わったので~~~ソースも

この記事の内容は以上💃
今回のソース(まとめ)

余談だが、
ここまで見ていても、
実はどんだけ簡単な開発が出来る環境も、こーいった意識がないばかりに、自分たちでどんどん開発を難しくしてるのが分かると思う。
ソース・リファクタリングで外出し=パラメータ化
なんかを知らずに、
面倒くさいし、後から直せばいいや、読めるのがエンジニア
みたいことをやってるのって、
この世界を知ってしまうとゾッとするでしょ👀
ま、たしかに自由にやりたいようにやれるのが
オープンソースな環境=民主化されたテクノロジー
なんだけど、
先人の知恵をうまく取り入れず、自分のやりたいようにやった結果で、
自分の首を絞めるのは自分だからね( ´∀` )
きちんとした教育も管理もせずに、
自分たちで難しく品質の低いソースにしておいて、
べき論と理想論だけで乗り切ろうとする
☞管理できてませんやん( ´∀` )
そーならないように気を付けようね
☞どんな簡単に作れる環境でも、難しくすることは簡単だからね
=お・ろ・か・も・の
ま、動けばいいってだけなら関係ないし好きにしたらいいけど( ´∀` )
そんなソースや開発現場には行かないから、オイラには関係ないし。
さてと、次回は
UiPathStudioXと対話するメッセージボックス
使いこなせると非常に便利な変数
ソースを安全に管理するノートブック
までの各アクティビティの操作に入る前に共通して使える知識は終わったので~~~
いよいよ、
各アクティビティの操作=逐条編
に入っていこう💃
さてと、後は逐条編だし、昼下がりなんで~~
ビール片手にやろう💃
☞GW後半の4連休初日の昼下がりにビール飲まずにこんなんやるなんて
普段平日何のために仕事してるのかわかりませぬ( ´∀` )