最近IT業界を賑わせているRPA。なんでそんなに大騒ぎしているのか?RPAのプロジェクトに携わったこと無いが、結局はアプリケーション間連携ができると便利だということなのだろう?昔からあったWEB画面のテストを自動化するSeleniumをRPAの一つですと言って製品ラインナップに載せている会社。RPAブームに乗っかろうとしているのが見え透いて恥ずかしい。
私はなにもRPAを否定しているわけではない。むしろ既存アプリを修正せずに連携できるのだから普通にいいと思うのだ。
でもこれっていつか通って来た道。20年前にも通った道。ExcelとかAccessとかVB使ってアプリケーション連携やったじゃない。それを内部統制がって言われて全部廃止するという悲しい作業やったじゃない。RPAは大丈夫なのかい?マクロおじさんたちが一生懸命作ったマクロをリバースエンジニアリングしてシステム化した過去の仕事を思い出す。そうならないことを願います。
それじゃあ、シャドーIT作っていいっていうならやってやろうじゃないの。この記事では以下のことについて解説しています。
ココがポイント
- AutoHotKeyをつかってExcelのデータを既存アプリケーションに自動入力
- AutoHotKeyをつかってRPAするときのコツ
目次【本記事の内容】
- 1.AutoHotKeyをつかってExcelのデータを既存アプリケーションに自動入力
- 1-1.AutoHotKeyでRPAするメリット
- 1-2.AutoHotKeyでRPAするデメリット
- 1-3.Excelを読み込んで画面入力するスクリプトサンプル
- 2.RPAに物申す
- 2-1.SeleniumをRPAと呼ぶなかれ
- 2-2.だとするとAutoHotKeyで自動化したものRPAではない
- 2-3.RPAだってミスもするし、文句も垂れる
- 3.まとめ
AutoHotKeyをつかってExcelのデータを既存アプリケーションに自動入力
AutoHotKeyでRPAするメリット
世の中RPAブームである。それに乗っかっていると思われるのも癪なのだが、自分の仕事で繰り返し入力する作業をAutoHotKeyで自動化している。システムエンジニアが繰り返し入力するといえばテストテストテストである。40も超えてくると数百件のデータを手入力するのは結構辛い。ちょっとしたミスでそれまで入力していたシナリオがすべて無駄になりやり直しになってしまうリスクがある。どうせテスト仕様書にはどんなデータを入力しないといけないのか書く必要があるのだ。せっかく書いたものは利用するのだ。テスト仕様書に書いた内容を自分の手でシステムにも入力するなんて、なんて無駄なことをするんだとどこかの新聞やWEB記事に書いているではないか。それを効率化しなければならないシステムエンジニアが二重入力するというのは不格好。
そう。メリットはカッコイイ!である。仮にテスト仕様書にミスがあっても入力データを直せばもう一回自動入力してくれるのである。肩こりから開放されAutoHotKeyが入力してくれている間はぶらぶらとしていても勝手に仕事をしてくれるのだ。
AutoHotKeyでRPAするデメリット
そしたら「アイツは暇そうだ!」何しているんだ。という理不尽なことを言われるんだ。こっちは自分で効率化しているから楽をしているだけなのに。それなら教えてやるとAutoHotKeyのインストールをまずはやれと言うと、自分には難しそうだと感じたのか結局使わない。
そう。AutoHotKeyでRPAをするデメリット。周りに一生懸命仕事をしている雰囲気をを出す工夫しなければならないということ。ちなみにAutoHotKeyはキーボードをシミュレーションしているだけなので、画面を閉じるとスクリプトがエラーになってしまう。だから仕事をしているふうに見せるためにはPC画面を見続けなければならない。全く馬鹿げた話だ。
Excelを読み込んで画面入力するスクリプトサンプル
前置きが長くなってしまったが、以下がソースコードサンプルである。Excelに予め以下のような表を保存している前提とする。伝票形式の表なのでB列とC列がヘッダー部分に入力する内容。E列からG列は明細行に入力する内容だ。これは各自の環境に合わせて見直してほしい。ソースコードを見て想像がつくだろうが、Tabキーで移動しながら該当の場所に来たらExcelから読み込んだデータを流し込んでいるだけだ。Ctrl+Shift+a でスクリプトが起動する。最初の一行目は自分がテスト対象としているアプリケーションClassを指定してほしい。よくわからないという人は一番最初と最後の行は不要だ。
#IfWinActive ,ahk_class WindowsForms10.Window.8.app.0.378734a ^+a:: objEx := ComObjCreate("Excel.Application") objWb := objEx.Workbooks.Open("C:\test\test.xlsx") Sleep 1000 objWs := objWb.Worksheets("data") j = 1 ;伝票単位のループ分 Loop { j := j + 1 Sleep 1000 strValue := objWs.Range("A" j).Value ;No. Sleep 1000 if strValue <= 0 ;No { Break } Gosub,Header ;明細行のループ Loop{ strValue := objWs.Range("E" j).Value ;商品コード Sleep 1000 Send,% strValue Sleep 1000 Send,{tab} Sleep 1000 Send,{tab} Sleep 1000 strValue := objWs.Range("F" j).Value ;数量 Sleep 1000 Send,% strValue Sleep 1000 Send,{tab} Sleep 1000 strValue := objWs.Range("G" j).Value ;単価 Sleep 1000 ;単価が設定されていれば登録する。 if strValue <> "" Send,% strValue Sleep 1000 Send,+{tab} Sleep 1000 ;次の明細があるかどうか確認 strValue := objWs.Range("D" j + 1).Value ;明細No. if strValue >= 2 { Send,{tab} Sleep 1000 Send,{tab} Sleep 1000 Send,{tab} Sleep 1000 Send,{tab} Sleep 1000 Send,{tab} Sleep 1000 j := j +1 Sleep 1000 } ;もし次の伝票番号だったら明細のループを抜ける else { Send,{F2} Sleep 1000 Send,{Enter} Sleep 1000 Break ; Terminate the loop } } ;もし次の伝票番号もなければテストを終了する。 ;strValue := objWs.Range("A" j).Value ;No. ;if strValue <= 0 ;{ ;Send,{F2} ;Send,{Enter} ;Break ; Terminate the loop ;} } ;xl.Application.ScreenUpdating := 1 Sleep 1000 objWb.Close(False) Sleep 1000 msgbox, "終了です。" return Header: Send,{tab} Sleep 1000 Send,{tab} Sleep 1000 Send,{home} Sleep 1000 strValue := objWs.Range("B" j).Value ;売上日 Send,% strValue Sleep 1000 Send,{tab} Sleep 1000 strValue := objWs.Range("c" j).Value ;納品先 Sleep 1000 Send,% strValue Sleep 1000 Send,{tab} Sleep 1000 Send,{tab} Sleep 1000 Send,{tab} Sleep 1000 Send,{tab} Sleep 1000 Send,{tab} Sleep 1000 Send,{tab} Sleep 1000 Send,{tab} Sleep 1000 Send,{tab} Sleep 1000 Send,{tab} Sleep 1000 Send,{tab} Sleep 1000 Send,{tab} Sleep 1000 Send,{tab} Sleep 1000 Return #IfWinActive ; test.ahkをctrl+sで保存した時にリロードする(vimでは保存はできないがリロードはOK) SetTitleMatchMode,2 #IfWinActive, test.ahk ^s:: Send,^s Sleep,250 Reload return #IfWinActive
RPAに物申す
SeleniumをRPAと呼ぶなかれ
過去のプロジェクトでWEB画面のテストで使ったことがあるSelenium。RPAのことを調べるためにググっていたらこれをRPAと称しているページを見つけた。確かに今回のソースと同じようにExcelの内容を読み込んでWEB画面に入力することはできるけど。私が新入社員のときだった20年以上前だって、Oracle→Access→Excelというアプリ間連携はやっていたのだが、いおま思えばそれだってRPAと呼べなくもない。RPAツールと呼ぶからにはノンコーディングでエンドユーザーがちょっと練習すれば使いこなせるぐらいの習熟度で使えるものであってほしい。
だとするとAutoHotKeyで自動化したものRPAではない
スクリプトをガシガシ書いている時点でAutoHotKeyの自動化スクリプトだって作った人じゃないとわからないという事になってしまう。メンテナンスできる人がいなくなってしまった時点で負のIT資産だ。だから私はこのスクリプトを会社で広めるつもりはない。どこかで動かなくなってしまったら私に問い合わせが来て仕事が増えるだけだから。
でもなんでこの時にAutoHotKeyを使ったかと言うと、本当はAppnium使いたかったんだが開発PCがWindows7だったから。やっと会社の開発環境からWindows7を駆逐できそうなのでそうなると今度はAppniumを試してみたい。AutoHotKeyよりは読みやすいスクリプトが書けるのではと思っている。AppniumだったらC#だからAutoHotKeyよりはメンテできそうな人が多いはずという期待感もある。
RPAだってミスもするし、文句も垂れる
RPAの誇大広告が酷いサイトがある。
月に10万円。パートを雇うより安いです!→
パート舐めんな!
数十人の仕事を一瞬でミスなくやります →
PC数十台いるし、ライセンスも×数十費用な
ミスなく正確にやります。 →
イレギュラーな動きすると止まるからな
まとめ
RPAでググるととんでもなく生産性が上がるような事が書かれているんだけど、普通にシステム導入で生産性を上げるつもりぐらいの覚悟で望まないと成果は出ませんから。メンテナンスしないといけないのも普通のシステムと同じ。