賽の河原でRPAするときに使ったもの


#はじめに？
はじめまして。八重ナギと申します。
日々最新のサービスやライブラリに触れ、学び、開発し、Qiitaに共有までするキラキラエンジニア！
を、死んだ魚のような目で眺めている、しがない無能オペレータです。
それはさながら、暖かな家庭を路上で凍えながら睨んでいるホームレスのよう。

信じられないかもしれませんが、「コードを書く」「開発をする」という発想すらない部署・企業では
当然、なにかをつくることが許されない世界になっています。

低スペPCの権限はほとんど剥奪され。
こびりついてとれない謎ルール・謎フローはさらに増え。
社員へのいやがらせのほかは意味がないセキュリティ対策。
IE6でググれば８割はブロッキング。
分断され、誰も把握していない社内ネットワーク。
NWから孤立した制御専用PC。
もはやジャンク屋でも見なくなった古代のサーバたち。

「サクッと作って効率化！」なんて夢の世界には絶対に立ち入れない身分･･･。
そんな環境で、今まで役に立ったものを記載します。

#どういうところで？
なにがブロックされているかは環境によってさまざまです。
以下のうちどれかに当てはまる場合には、使えるものがあるかもしれません

・Windows PCのAdmin権限がない
・ソフトウェアインストールができない/めんどくさい
・プロセス監視されている
・おカネはない/めんどくさい
・旧石器時代のサーバしかない
・分断されたNWが複数あって滅ぼしたい
・分断されたNW下/接続されていない複数台のPCを利用しなきゃいけない
・ブロッキングによりまともにインターネットを利用できない
・コードを書く人間は他にいない/理解もない

つまり

・社内に開発用サーバをもつことは大手町に庭付き一戸建てを建てるより難しく
・PythonやPHP等をインストールできないためスタートラインにも立てず
・当然開発環境など用意できるはずもなく
・自動化したところで他者に公開できない/評価されることもない

という状態です。

体感では、中小企業の場合情シス/セキュリティ部門はザルなのでどうにでもなりますが
イカれた大企業ではもうどうにもならない場合が多い気がします。

#なににきをつける？
当然ながら、推奨どころか禁止すべき方法です。
最悪に開発/維持効率が悪いため、手を動かしてやったほうが楽だったりもします。
コードスキルよりも、この先生きのこれるかスキルのほうが重要かもしれません。
勝手にマクロ化して大事故みたいな案件はたくさんあるので本当に気を付けましょう＋他山の石にしましょう。
以下は個人的な基準です

　・万が一でも事故になるような作業では絶対にやらない＋どうでもいい業務でやる
　・自動実行/定期実行などはしない＋実行する前にパラメータを人間が確認する
　・バックグラウンドでやらない＋常に実行状態を目視・中断できる状態を保つ
　・ほかの社員には見せない、存在を気づかせない
　・エラー発生時は絶対に停止するようにしておく
　・上司に「こういうことが可能」と掛け合うときのデモとして用意するだけ
　　（理解がなくても、動くものを見せると手のひらクルクルする例は多いです）

また、往々にして

　・無能な情報システム部門を焼き討ちするほうが楽です
　・無能なセキュリティ部門を焼き討ちするほうが楽です
　・無能なコンプラ部門を焼き討ちするほうが楽です
　・無能な管理職を焼き討ちするほうが楽です

です。


#どうやってつくる？
「なにかをつくろう！」という段階で詰んでいる状態にあるので、まずはここから考えなければなりません。

##Excel
誰が何と言おうと、これは表計算ソフトウェアではありません。最強の自動化統合パッケージシステムです。
エディタがあり、ブラウザだけでなくローカルアプリ操作の自動化すらも可能であり、これ自体がデータベースソフトウェアにもなります。
もしあなたのPCにExcelがインストールされているなら、それがWindowsXPであっても「これさえあればなにもいらない」でしょう。そして不幸中の幸いとして、この国の企業ではクソPCにOfficeプリインストールが定番です。
実際その気になれば「コルタナさん、ベンダーに調査依頼出して」なんて言うだけで、社内システムやメールからデータを収集し、依頼用PDFを生成してメールを送信、みたいなこともできます。

###必要なもの
Excel

###できること
※ほぼすべてなんでも
・ローカルのソフトウェアを実行する
・社内システムからデータを取得し、書類を生成する
・メールからデータを取得し、社内システムに記入する
・作ったマクロをチーム内の複数人で同時に使用する

###できないこと
・見た目に限界がある（動きのあるUIの実装が困難）

###やりかた
Excelの欠点は「バージョン管理ができない」ことと「同時に複数人で利用できない」とよく言われています。
特に、超神マクロを構築するにあたって、チマチマとアップデートするたびメンバにファイルを共有するのは面倒ですし、共有フォルダにxlsmを設置したとしても同時に使用することはできません。
そもそも上述したように、他人に共有するのは推奨しませんが、もしあなたが仕事場には恵まれなくとも同僚には恵まれていて、マクロが動かなくなっただけで土日夜間に電話をしてこないまともな人しかいないのであれば、解決策があります。

・主な処理を記載したメインのxlsmをつくり、共有フォルダ等に設置する
・メンバにはクライアント用xlsmを配布する
・クライアント用のxlsmからメインのxlsmをRunメソッドで実行

また、クライアント用のxlsmには利用者の社内システムのID/PWの入力フォームや、メインxlsmの読込ボタンのみを用意しておきます。この手法であれば、メインのxlsmにメンバの氏名やシステムログイン用ID/PWを記載する必要もなくなります。

VBAについては詳細に解説して頂いているサイトが多数あるため省略します。

##ローカルHTML＋JavaScript
メモ帳さえあればあなたも今日からｽｰﾊﾟｰﾊｶｰ！ローカル環境だけでも案外多くのことができます。
とはいえメモ帳で戦い続けるのは、さいきん衰えをを感じている両眼がつぶれかねません。
まずACE.jsが動作するページをつくれば、メモ帳よりだいぶましなエディタになります。
これがワイのVS CODEなんや･･･。

###必要なもの
ブラウザ
各種ライブラリをDLできる環境（可能なら）
インターネット接続環境（可能なら）

###できること
※限定的なWebシステム構築
・パラメータを入力するとグラフで表示する
・文字列を処理して文字列を出力する
・パラメータを入力するとExcelシートが作成される

###できないこと
ローカルにあるファイルの操作

###サンプル
ローカルJavaScriptの壁はパーツ化できないことにつきます。
iframeでは内部jsは実行されず、クロスドメイン制約もつきまといます
SPAってのが流行ってるんじゃろ？？？とトイレットペーパーなみにスクロールされるシングルページにしてもよいのですが
下記の方法で回避するのが楽かと思います

・ナビゲーションバーのみiframeにする＋cssのみで動作するものにする（リンク/ページ追加が容易になります）
・コンテンツのHTMLはすべてJavaScriptで出力させ、htmlファイルを不要にする
・メインhtml上のメインjsで、各コンテンツjsをロードし各種コンテンツ＆ページを生成

この手法であればjsファイル単位で小アプリ開発ができなくもないです。

##Google Apps
インターネットに接続されている場合、Google自体がブロックされていることはあまりありません（驚くべきことに、ないわけではないです）。
GASを利用できるのであれば、Excelなみになんでもできます。
ただし、G Suiteが導入されている状態でなく、個人アカウントでやる場合、機密データを送信するのは一発でアウトなはずなので絶対にやめましょう。どう考えても弊社よりGoogle Driveのほうが絶対安全だろと確信していてもやめましょう。

###必要なもの
インターネット接続環境

###できること
Webシステム構築

###できないこと
ローカルにあるファイルの操作

#どうやってデータをわたす？
地獄の環境ではまずデータのやりとりが最大の難関になります。
PCとPCの間でファイルをやりとりする手段がない、CDN読込できない、etc...
jsライブラリを目コピペするのはこころの病気になるのでやめましょう

##メール
メールだけは疎通できる場合はけっこうあります･･･よね？
このSMTPやPOP3はもはや私たちにとってのHTTPSです。なにをいっているかわからねーと思うが。
Excel VBAでメールが送信/受信ができるので、これをインタフェースとし活用しましょう。

##クラウド/VPS
自前のファイルサーバを建てます。インターネット環境がある場合はこちら。
無能なセキュリティ担当とIPブロックいたちごっこをしなければいけない場合、VPSならIPアドレスはコロコロ変えられるのでよいです。
自費にはなりますが月数百円払えば実質無料でサーバが使えると思えば安い。

##Windows共有フォルダ
手を尽くしてすべてに絶望した後、なぜかこれが平然と使える場合があります。右クリ→プロパティ→共有　からどうぞ

##GoogleDrive/Fusion Tables
そんなのつかえるなんてずるい

##Rlogin
ポートフォワードが使えます。インストールが不要で動作します
片方のネットワークにはなんとか使えるサーバがあるが、もう片方のネットワークからはアクセスできない、という状況でどうぞ。

#さいごに？
会社を替えるのがいちばん効率的です。