VB のたまご

作成日: 2016/12/20, 更新日: 2016/12/22


なんちゃって仮想労働者を作る1

  •  この記事は、Visual Basic Advent Calendar 2016 の20日目のエントリーです。

  •  はー、やることいっぱいだな・・・。こりゃ終わらないな・・・。

  •  そんな時は、1人で全部抱え込まずに他の人にやってもらいましょう。今後気まずくなるからお願いしづらい?コミュ障だからちょっと無理? 大丈夫です。他の人とはプログラムの事なので、気にしなくても平気です。 自分だけの部下に仕事を任せて、少しでも抱えている量を減らして、心的な負荷分散効果により、現状よりは楽になることが期待できます。

  •  ということで、意味不明な始まり方ですが、最近、RPA (Robotic Process Automation, 仮想知的労働者) が流行っているようですね。 そういう時代に進んでいくんですかね。。

  •  今回は、機械学習しないので知的じゃない労働者を考えます。その世界の知識勉強・実装工数的な理由もあるのですが、 仕事っていうのはいろいろあって、言った通りのことだけやってほしい!指示した通りだけやってほしい仕事もあると思うんです。 だから、言われていないけど完成した成果物にさらにアレンジしてみましたとか、〇〇もついでにやっておきました的なことをされると、 逆に、いやこれは指示してないじゃん、それ余計だから困るんだけど的な場面も、無きにしも非ずかと思ったからです。

  •  こういうのって、実装後のテスト自動化と同じように、作って形になるまでが面倒くさい系です。 一度作ってしまえば、乗り越えてしまえばいいんですけどなかなかね~。 手が動かないというか、そんなの作るよりだったら力技で頑張った方が早いし!って思っちゃいますよね。

  •  また、理想の話だよね~とか、すでに〇〇というのがあるよ~とかいろいろあるかと思いますが、ネタ程度に思っていただければと思います。 構成は真面目に考えましたが、実装はちょっと手抜きしてしまっていますorz。すみませんすみません。

自動化とは?仮想労働者とは?

  •  前提として、私の解釈でしかないので間違っている可能性があります。私の中では、ある作業Aをプログラムがやる=自動化だと思っています。 次に、人間のように、一つの仕事をこなすため、作業Aをして、作業Bをして、・・・といろいろな作業を順番通りにやる=自動化+自動化+・・・=仮想労働者かなと思っています。 ここでは、例えば、作業Aが xxx.xlsx を C ドライブから D ドライブに移動させるというのだけでも立派な作業だと考えています。

仮想労働者の構成

  •  こういうのは、コンソールアプリとかスクリプト的な CUI だけな方が扱いが楽ですよね。 で構成として、人間とコミュニケーションする窓口担当と、指示されたことをこなす作業担当に分けます。

  • 人⇔窓口⇔PG作業
  • イメージ
  •  窓口担当に向いているのは、メール、Twitter, LINE, Jenkins, タスクスケジューラ ... 等々、今はたくさん選択肢がありますね。 窓口担当は、人間とやり取りするのが仕事で、依頼を受けて(指示を解釈して)、 適切な担当者の判断と作業委託して(指示データを渡しながらのexe起動)、成果物を受け取り、人に報告します。

  •  作業担当は、例えば、Excel とやり取りする人、EventLog とやり取りする人、FTP サーバ, WEB サイトとやり取りする人とか、 自分の作業に合わせて考えるとたくさんあると思います。

  •  例えば、窓口にメールを採用する仮想労働者を考えてみます。

  • イメージ
  •  まぁ、メールに限らず共通ですが、人相手と違ってプログラムは文面を適切に解釈・理解できないので、このキーワードが出たらこの作業だな、 その場合、必要となる指示データは、こういう記述記載パターンが来るはずだから、こういう風に文字列分割して・・・とか何とか、 やり取りに必要なプロトコルを決めておく必要があります。

  •  この例だと、タイトルから、【作業依頼】という文字列で始まっているので、私に関係あるメールだな、請求書とあるので、 Excel の作業だな(ExcelWorker.exeさんにお願いするんだな)とか判断します。 xxx=yyy というパターンを拾って、これが品名と個数と金額だなと判断できるようにしておきます。

  •  メールを媒体とするので、WebAPI とか COM とか何かを使って、送信と受信の機能を持つ必要があります。 常駐系exe なら(作りによっては)自動的にお任せできますが、一回だけとか頻繁じゃないなら常駐じゃなくてもいいかもです。

  •  もうちょっと細かくみて見ます。

  • イメージ
  •  仮想労働者として、順番通りに動く必要があるため、窓口担当系 exe は、作業者に依頼する時に、作業の終わりを知るため、監視する必要があります。 この例では、Process クラスの WaitForExit メソッドとかかなと考えています。

  •  exe しかでてきていないですが、スクリプトでもいいし、Excel (vba) でもいいし、窓口が Excel でもいいし、 好きに(自分の技術力と相談しながら)作るのが良い感じだと思います。

つづく

  •  メインとなる実装例は、次回に持ち越します。で、期待させてしまうと悪いので先に言ってしまいますが、 次回のサンプルでは、窓口はメールではなく、bat ファイルに指示データをD&Dすることで成果物を作ってもらうような、ローカル環境下でできる程度のものを作りますorz。 すみませんすみません。

  •  最後まで読んでいただき、ありがとうございました。

  •  (追記)なんちゃって仮想労働者を作る2に続きます。