情シスは何度でも甦るさ。

VBA!VBA!

最近流行りのRPAとは

今年で休刊が決まった日経ストラテジー。確かに最近惰性で読んでたが、気になったのがあった。

2017年5月号集が組まれたRPA(ロボティック・プロセス・オートメーション)。

wikiによると

ロボティック・プロセス・オートメーション(Robotic Process Automation, RPA)とは、認知技術(ルールエンジン・機械学習人工知能等)を活用した、主にホワイトカラー業務の効率化・自動化の取組みである。人間の補完として業務を遂行できることから、仮想知的労働者(Digital Labor)とも言われている。 ロボティック・プロセス・オートメーション - Wikipedia

なんか、最近流行りのAI、ディープラーニング、IoT、ロボットなどを想像させるその用語から、また新しいバズワードかと思ったが、記事を読んでみると、

Oracle Functional Testing(OFT) に毛が生えた感じやん。

というのが第一印象。

OFTを知らない人向けに説明すると、Seleniumに毛が生えた感じといえばニュアンスが伝わるだろうか。

ようは、GUIの自動テストツール。

当ブログでは、OFTの記事をちょこちょこ書いているのですが、もともとはE2Eの自動テストのためのツールって、テストだけだと勿体無いから、テストツールを使って業務を自動化するという使い方はよくある話。

ryoben.hateblo.jp

じゃぁ、何が違うの。

この記事で紹介されているRPAは少し進化している。

  • Web以外のアプリケーション全てに対して動作を自動化できる
  • 各アプリケーションの操作をノンプログラミングで記述できる
  • 各アプリケーションをシームレスに繋いで、処理を条件分岐できる

例えばCRMで、新規登録された顧客マスタを、販売管理システムに手動で連携するとかのケースではないだろうか。(ASPだとAPIとかないし)

① WebのCRMシステムに新規登録された顧客一覧を表示し、CSVにダウンロード
② そのCSVEXCELのマクロで加工して保存
CSVを、クラサバの販売管理システムにインポート

こういうケースだと、Webのテストツールで自動化できるのは、①だが、RPAだと、OS上の操作全てをエミュレートできるので、①〜③全部を自動化できる。

どんなツールなのか

紹介されていたのは、以下のツールたち。

  • Automation Anywhere Enterprise 米オートメーション・エニウェア (日本では、日立ソリューションズが代理店) www.automationanywhere.com

  • BizRobo! RPAテクノロジーズ bizrobo.com

  • UiPath Studio/Robots/Orchestrator 米ユー・アイバス (無料で使えるのコミュニティエディションがある。商用利用は条件あり) www.uipath.com

  • ナイス・ロボティックオートメーション アイティフォー www.itfor.co.jp

  • NTTアドバンステクノロジ WinActor www.nttdata.com

なぜ急に流行りだしたのか

導入事例として紹介されているユーザーは、三菱東京UFJオリックスグループ日本生命保険リクルートコミュニケーションズなどの大手も使っている。 ただ、使い方としては、バックオフィスの人員削減および、属人化排除のためと思われる泥臭い作業ばかりだ。

やはり、1企業の中で見た場合、どうしてもシステム化するより人で対応した方が費用対効果が高い領域というのは存在する。 契約関係とか、人事総務の手続き関係とか、細かい条件によって微妙に作業が異なったりで人の判断が必要な部分。または、ルールや手順がしょっちゅう変わって、システム化に向かない部分。
そういった部分について、ここ最近の自動化の技術が成熟してきて、RPAを導入することで費用対効果が出るようになったのだろうと考察する。

もう一点あるとすれば、クラウド化の影響。ここでいうクラウドは、SaaS
勤怠、経費精算、人事システム、CRMとかのバックオフィス系のシステムはSaaSを利用するのは当たり前になってるが、ここにきて販売管理やらの基幹系までSaaSで置き換えるケースは増えてる。
そうなると、システムが完全に分離されちゃって、EAIなんかを使用して裏側でデータ連携はできない。
APIがあれば、まだ可能性もあるけど、開発にお金かかるし、とりあえず人手で対応。って負債ができちゃうのでは。

メンテが大変そう

システムのE2Eの自動テストって、メンテが大変じゃないですか。
ちょっと画面のレイアウト変わっただけでも、全部落ちるし。
記事の中でも紹介されていたが、それはRPAも同じで、メンテしやすい構成にすることが大事と書かれていた。
また、複数のアプリをシームレスにつなぐ分、処理の単位をどう区切るかも大事だそうだ。

確かにアプリケーションごとに処理を切り出すのが簡単そうだが、
CRMに登録された顧客の業種によって、販売管理のマスタに登録する手順が異なる』とかいう業務の場合、CRM上の顧客の属性ごとに、販売管理側も含めたシナリオを作成するとかなると、大量のシナリオを作らねばならんことになり、メンテも死ねるので、やりたくないよねぇ。

ということで、コツはありそうである。

流行るの?

流行るか、流行らんかといえば、大企業では営業事務とか、企画事務とか、○○事務って名のつく派遣の社員の人とかいるじゃないですか。ああいうとこの人数を減らすのには、効きそうですよね。
ただ、現状初期費用が数百万円なので、大企業しか導入できん。
RPAの人気が上がれば、中小企業でも導入できるパッケージが提供されるだろうが。

お金かけたくないなら、RPAなんて言葉ができる前から存在する UWSC とかで効果あるか試してみればどうか。

公式手順でsqaleからHerokuに移行する

国産PaaSのsqaleさんが、サービスシャットダウン。

f:id:ryoben:20170315001050p:plain

ということで、移行せよとのメールがきた。

後日、Herokuの移行手順公開したよ。とのメールがきたので、いざやってみた。

1. sqaleからDBをエクスポート

公式サイトに手順があるが、sshでログインして、mysqldumpコマンドでダンプを取得せよとのこと。

ただ、sqaleの環境からファイルをダウンロードする手段は提供されてない ので、なぜかawsのs3に転送しなければならないという鬼仕様。 そんな手順知らね。っていう人は、Heroku側のDBへのインポートも、sqaleのサーバからmysqlコマンドを実行することになると思われ。

俺の場合は、以前からawsにバックアップとるようにしてたので、aws経由でローカルにダンプファイルを持ってきてやった。

2. Herokuにアプリ作成・DBインポート

アカウントはすでに作ってたので、新規にアプリ作って、git push。なんかエラー出とるが、とりあえず無視。

mysqlコマンドで、ダンプしたファイルを食わせる。手順上、ClearDB MySQLの環境情報を調べるとこがわかりにくかった。
移行手順の画面上の「ClearDB MySQL」のリンクを押すと、ダッシュボードに飛ぶので、そこに自分のDB名が表示されており、それをクリックして、「ENDPOINT INFORMATION」というタブに遷移すると、userとpasswordが記載されている。

なお、ホスト名は、手順書通り、「us-cdbr-iron-east-04.cleardb.net」でOKである。

で、いざ食わすところで手順は終わりなのだが、直後にメールが飛んできた。

subject: [CRITICAL] ClearDB database size is near quota limit

Current database storage allocated: 91.88% (8.12% remaining)

これは、予期してたが、無料プランのDBの容量はいきなりギリギリ。追加するための有料プランは、$9.99で、Herokuのdynosの$7と合わせると、月額$16.99 とsqaleの940円の倍以上の金額に。

むむむ、EC2借りた方が安いやんけ。DigitalOceanやったら、$5やぞ。

まぁ、そこはさておき、とにかく、アプリケーションに接続や!

f:id:ryoben:20170315002500p:plain

ですよね。

薄々知ってたけど、deproy時に、rubyのバージョンが古いから、2.2.6に上げてデプロイするぜ。(sqale上は、2.1.0で動かしてた)って言われてたから、そこらへんか。

ローカルで、rubyのバージョン上げてbundle update したら、エラー吐きまくり。がおー。

gemの依存関係を修正したあとには、Heroku用に、Procfileを作成したり、database.ymlを修正したりして、2日間かけてようやく移行完了となりました。

あとは、DNSとか切り替えなきゃ。

結論:

手順は確かに簡単だが、Herokuになると、課金が2倍になる。(940円 → 1,916円($16.99))

また、CleaDBの無料枠だと、使えるDBのプロセス数の関係で、重たい処理を流すと、DBがプロセス周りのエラーを吐き、Internal Serverエラーとなってしまう。なので、容量の問題以外にも、有料枠を使わざる得ない状況となってしまった。やはり、Herokuは、初めて使うPaaSとしてはハードルが若干高めな気がするなぁ。

   

後日発生した問題1 処理時間が長いクエリが強制的にタイムアウトしちゃう

Herokuは、Webのリクエストタイムが30秒を超えるとタイムアウトで処理が落ちる。

で、ちょうど30秒超こえるかどうかのくらいのバッチ的な処理をWebからキックする処理があったのだが、見事にタイムアウトに引っかかってしまった。

そういうケースは、Herokuの場合、非同期処理として対応する必要があるようだ。

が、なんか処理結果見てみるとギリギリ処理は終わってたらしいので、まぁ、ほっとく。

後日発生した問題2 :MySQLのauto_increment の値が変わる。

登録したレコードのIDがやたら飛ぶので、調べてみたら移行時に変わってた。

mysql> show variables like ‘%auto_inc%’;
+————————–+——-+
| Variable_name | Value |
+————————–+——-+
| auto_increment_increment | 10 |
| auto_increment_offset | 2 |
+————————–+——-+
2 rows in set (0.18 sec)

なので設定を変更する。

mysql> set @@auto_increment_increment=1;
mysql> set @@auto_increment_increment=1;

あとは、各テーブルについても、alter tableで、次の auto_increment 値を変更していった。

なぜかは不明。 → 設定変えてもまた同じ減少が発生するので調べたら、clerdbの仕様でした。レプリケーション時にIDが衝突しないための仕様だそうだ。 http://qiita.com/nsatohiro/items/0458e63c47c3d6ff37d0

iphoneのカレンダーをGoogleアカウントと共有したらはまったでやんす

iphoneのカレンダーの色が見づらい!

嫁のiphoneと俺のiphoneのカレンダーを同じGoogleアカウントに紐付けして、お互いの予定を共有できるようにしている。
が、最近になって、(多分iosをアップデートしたタイミングで)カレンダーの色がおかしくなった。

俺は、ハチカレンダー2という昔からのカレンダーを使っているのだが、 f:id:ryoben:20151011032948j:plain:w300
背景と文字が同じ色になったので、とても見づらい。

Google連携しているカレンダーだけ、色が変えれないでやんす

他のカレンダーは、色を変えれるのだが、googleアカウントで連携しているカレンダーには、色を変えるためのスライダーがでてこない

f:id:ryoben:20151011033331j:plain:w300
本来なら、カレンダーの横に色を設定するためのスライダーが出てくるのだが・・・。

ってわけで、iphoneの設定画面で、googleのアカウントを繋ぎ直したり、デフォルトのカレンダーの設定を見てみても何も解決せず・・・。

うーん、なぜだ。ハチカレンダー2自体が、古いアプリなので、iosの変化についていけなくなったのか。

なんて、思ってたが、いざ、PCでgoogleカレンダーを閲覧したら、あることに気づいた。

カレンダーアプリは悪くなかったでやんす

f:id:ryoben:20151011034046p:plain:w640

あれ?iphoneのカレンダーの予定の背景色とGoogleカレンダーの予定の背景色が似ているぞ?

試しに、Googleカレンダーの色を変更してみた。

f:id:ryoben:20151011034104p:plain:w460

f:id:ryoben:20151011034111p:plain:w640

んでもって、しばらくしたら。

f:id:ryoben:20151011033418j:plain:w300

iphoneのカレンダーの背景色も変わりよった。

結論

iphoneは、Googleカレンダーの予定だけでなく、予定の背景色まで連携するらしい。
なので、iphone側では、背景色を変更できなくなっていた模様。
なんという、無駄な連携。

でも、これいつからなんだろ。

とりあえず、解決したらからいーか。