今回で3回目となるこの特集!
前回は「条件分岐・例外処理」編と2本立てでした。
今回は「サブルーチン」についてです!
サブルーチンは、前回までご紹介した3つに比べると
見ただけでは意味を推察しにくい単語ですよね。
しかし、理解できれば、RPAの開発でも相当役に立つ機能です!
なるべく専門用語を使わず、今回も例え話中心ですが、
プログラミング経験がない方が少しでもイメージを浮かべやすいよう、
いつも以上にかなり強引に日常生活に結び付けています...(´・ω・`)(今回は本当に強引です)
例え話を使わない説明がよりわかりやすいと思う方もいらっしゃると思いますが、
ご了承ください!
4.サブルーチン
皆さんは「ルーチン(ルーティン)」という言葉はご存じですか?
定期的にお決まりの一連の動作をすること、
という意味で日常生活でもよく使われていますね。
今回の用語、「サブルーチン」の"ルーチン"も、
このルーチンです。
IT用語としてのサブルーチンの意味を調べてみると、
コンピュータプログラミングにおいて、プログラム中で意味や内容がまとまっている作業をひとつの手続きとしたものである。繰り返し利用されるルーチン作業をモジュールとしてまとめたもので、呼び出す側の「主」となるもの(メインルーチン)と対比して「サブルーチン」と呼ばれる
出典:Wikipedia
...やはりこのままではイマイチわかりにくいので、
日常生活で使う「ルーチン」と絡めて、RPA開発を前提とした解説をしてみましょう。
例えば、私たちは今「シャワーを浴びる」という一連の処理を実装したい!と思っています。
疲れた夜には、『気が付いたらお風呂が終わっていたらなあ...』と思うこと、ありませんか?
つまり、「シャワーを浴びる」という行為を自動化したい!と仮定しましょう。
そこで、ロボットの中身を開発します。
メインルーチン「シャワーを浴びる」処理には、
①服を脱ぐ
②浴室に入る
③蛇口をひねってお湯を出す
④湯加減を確かめる
⑤流す
⑥蛇口を閉める
⑦シャンプーを手に取る
⑧洗う
⑨蛇口をひねってお湯を出す
⑩湯加減を確かめる
⑪流す
⑫蛇口を閉める
⑬トリートメントを手に取る
⑭洗う
⑮蛇口をひねってお湯を出す
⑯湯加減を確かめる
⑰流す
⑱蛇口を閉める
⑲ボディタオルを手に取る
⑳ボディソープを出す
㉑洗う
㉒蛇口をひねってお湯を出す
㉓湯加減を確かめる
㉔流す
㉕蛇口を閉める
㉖バスタオルで身体を拭く
㉗浴室から出る
㉘服を着る
という、毎回変わらない一連の流れがあるとします。
こうして見るとちょっと細かすぎるように感じられますが、
実際のRPAの開発ではこのぐらい細分化して流れを掴んでおく必要があるため、
しばしお付き合いください。
さて、このメインルーチンの中にサブルーチン化できる部分があるのですが、
それが何かお気づきですか?
それは「流す」~「蛇口を閉める」の部分です。
1回シャワーを浴びるだけで、この「流す」処理はなんと4回も登場します!
この場合サブルーチンを使わずに「流す」周辺の処理を実装するためには、
「蛇口をひねってお湯を出す」「湯加減を確かめる」...という全く同じ複数の処理を
何度も組み込まないと、メインルーチンが完成しませんね。
現に皆様がいま目で追うだけでもとても大変だったはずです!(ご拝読ありがとうございます)
こんな時にサブルーチンを使って、
★サブルーチン「流す」
①蛇口をひねってお湯を出す
②湯加減を確かめる
③流す
④蛇口を閉める
と、何度も出てくる一連の処理を、独立した部品化しましょう。
この部品を使うと、
メインルーチン「シャワーを浴びる」
①服を脱ぐ
②浴室に入る
★③サブルーチン「流す」(1回目)
④シャンプーを手に取る
⑤洗う★⑥サブルーチン「流す」(2回目)
⑦トリートメントを手に取る
⑧洗う
★⑨サブルーチン「流す」(3回目)
⑩ボディタオルを手に取る
⑪ボディソープを出す
⑫洗う
★⑬サブルーチン「流す」(4回目)
⑭バスタオルで身体を拭く
⑮浴室から出る
⑯服を着る
と、何度でもサブルーチンを呼び出して、まったく同じ処理を開発する手間を省略できるのです。
たいていのRPAツールでは、メインルーチン上でサブルーチンを実行したい箇所に
サブルーチン呼び出し部品(★)をひとつ設定するだけで、
サブルーチン内の処理が実行されるようになります。
このように、サブルーチンとは、
あくまでもメインルーチンの中に組み込まれ、
・何度も繰り返す同様の処理が登場する
・省略すると実行結果に影響する
という特徴がある処理を何度でも使い回せるように実装したものです。
このサブルーチンを駆使することによって、
・都度全く同じノードを0から組み込んで設定すること
・保守対応時の修正箇所が1つで済むこと
・ひとつひとつエラー確認すること
の必要がなくなり、開発にかかる時間とミスは大いに減らすことができます。
-------------------------------(以下補足)-------------------------------
先程メインルーチンの中であえて『サブルーチン「流す」(n回目)』と書きましたが、
1回目の用語特集でご説明した、「変数」にその都度任意の値を設定することで
同じサブルーチンでも、異なる細かい違いを出すことができる場合があります。
変数をうまく使えば、サブルーチン自体の設定はそのままで、
今回の例で言う「洗う箇所」を、
★1回目=「頭」、★4回目=「体」
などとそれぞれ詳細に指定できるのです。
-------------------------------(補足おわり)-------------------------------
では、実際に皆様のRPA開発にサブルーチンはどのように使えるのか、
とても簡単なシナリオを用意したので、WinActorの開発画面で見てみましょう!
自動化したいことは、「今日が生まれて何日目なのか計算すること」です。
メインルーチンがこちらです。
①誕生日(yyyy/mm/dd形式)を入力する
②★サブルーチン呼び出し部品(のちほど紹介します)
③本日の日付を取得する
④過去の日付と本日の日付の日付の差を求める
⑤本日を含めた日数にするため、④で求めた値にに1を足す
⑥★サブルーチン呼び出し部品
⑦結果を表示
という流れになっています。
では、サブルーチンの中を見てみましょう。
こちらがサブルーチンです。
①それぞれの日付を年、月、日に分割する
②①で分割した値を、「yyyy+"年"+MM+"月"+dd」となるように連結する
③それぞれの日付の曜日を取得する
④「②で連結した文字列+"("+③+")"」を生成する
⑤サブルーチン終了(ここでメインルーチンに、サブルーチンで求めた値④を引き継ぎます)
という仕組みです。
日付生成処理は、誕生日に対しても実行日に対しても同じ操作をするため、
サブルーチン化し何度も同じ処理を作らないようにしました。
実行してみると、
最初に任意の誕生日を聞かれ、シナリオの最後に
曜日入りの日付と計算結果を表示してくれます。
ちなみに、同じ処理をサブルーチンを使わずに実装すると、こうなります。
赤枠部分、「曜日判定」以降4つが、元々サブルーチン化されていた部分です。
今回は簡単なシナリオでご紹介したのでこの程度とはいえ、
それでも同じ内容なのに、冗長化していて可読性が低いですよね。
もしサブルーチンを使っていないシナリオの保守が発生したら、
同じ内容の処理なのに修正箇所が複数あるので、非常に手が焼けることが想像できます。
このように、メインにサブルーチンを呼び出す部品(紫色のノード)を1つ入れていれば、
サブルーチンの中にある4つの手順(白色のノード)は何度も設定する必要がなくなるのです。
今回は簡単なシナリオでご紹介したので、
「たった4つ分のノードしか楽にならないの...?」
と思ってしまうかもしれませんが、
実際の業務の自動化では、サブルーチンにも大量のノードが必要になる場合もあり、
使い方を知っていると便利です。
(私も実際にサブルーチンだけで100以上のノードが必要になったことがありました)
RPAのツールによっては別の言葉で同じような役割を果たすものもありますが、
是非、イメージだけでもつかめると良いでしょう!
私たち株式会社電算システム(DSK)は、
初めてのRPA導入はもちろん、既に導入済みのお客様であっても、
自力のRPA開発でお困りのお客様のお力になれるような保守プランを
ご用意しております!
是非お気軽にお問い合わせください!
0コメント