Excel手順書の代打ツールを作ってみた



アウトプット強化週間!_Ver4

やっぱり、作ってみた、がうまく浸透しなかったって話なんですが。。

今日もだらだら書きます。愚痴っぽい部分はいらねーって言われるかもだけど、あくまでモチベーションあげて出発した動機として書いておきたくて

<hr>

#### なれそめ

以前、某社に常駐させてもらってた時に、昔っから知ってくれているお客さんに雑談で「（僕は）作業ミス多いもんでー」って言ったところ「いや、そんなことないですよ」ときた。

 - ミスのリカバリが適切だったり、早い
 - ミスをしない準備を十分している感がある

ので心象上はミスが多いにはならないんだそうだ。***ホントか？***

TISさんのShift wareみたいにExcelのパラメータシートからAnsibleのyaml起こすようなツールはこれはこれで作業品質は高まるので良いのだけど

https://shift-ware.github.io/ja/

やっぱExcelからは脱却できないのね、っていう違和感がある。ハーム・リダクション的な。

 - Excelだとバージョン管理問題はついて回るよね
 - 構成管理ツール挟むと中間コードで実際のOS設定が見えなくなるから生OSだと設定できない人材が生まれそう。OS熟知した人材はいいけどそうでなければ生OSを覚えて欲しい

**Shift wareは良いツールなのは間違いないです。このツールへの文句ではありません。書いてあるのは組織内情的な気持ちもありまして**

#### ふと思い出して

お客さんに頂いた「ミスに気付ける観点」で何かできないかという観点でExcel手順書以外に何か出来ないか踏ん張ってみた。僕からは“作業の省力化とミスの早期検出"するアプローチを提案したい

#### で、ツール

作ったツールは以下のかんじです。

![capture2.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189193/f066e91e-1868-afa7-f193-f67b0601e363.gif)

https://github.com/yasutakatou/wscast

これはこんな使い方するものです

![cast1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189193/6679afe6-1226-9917-97e3-3f1e150eb1ee.png)

![cast2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189193/fdc075e5-aadd-1089-6004-b36b0cf75c72.png)

![cast3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189193/5193092f-83b0-b258-26ae-1b4e19dab3e0.png)

![cast4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189193/79b5b131-5006-dea8-36ad-1a7428696445.png)

![cast5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189193/d834e815-df5b-ba0b-e970-dbe46e52f4e3.png)

同時に設定して即座にテストする事でミスに気付き易く、またオペミス自体への対策オプションも盛り込んだ

![cast6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189193/9aed4754-8a28-f3b4-6aa0-055791631168.png)

さらにExcel手順書自体も何とかしたかったのでLC4RIの仕組みに乗っかれるようにした

![cast7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189193/098aa7b3-4247-ffd1-cc13-99c62d319d09.png)

バイナリに読ませるテキストコンフィグはこんなかんじです

```
# cat ./config.ini
[lock]
rm -rf /
shutdown
poweroff
halt
reboot
実行するとヤバイコマンドをロックします

[yesno]
updatedb
du -d 1 -h
時間とか負荷がかかるコマンド実行時にyes/noを聞いてきます

[notice]
uname:Kernel verion output is -a
ifconfig:old command! use ip
古いコマンドとか代替がある場合に : の右側を出して注意します

[alias]
ls:ls -la
ps:ps -ef
エイリアスです。完全一致すると : の右側に置き換えます。

[checksum]
cp:2
echo:3
自動チェックサムをします。左が部分一致すると : の右側の数値の引数に与えられたファイル名にチェックサムかけます。
例)
 cp:2
 $ cp a b
   0  1 2 ←2こめの引数に与えられたファイルに自動チェックサムをかける
```

動作上のオプションは以下です。オプション(スペース)引数 で指定します

```
# ./wscast
 - - - OS: Linux - - -
Bufferlimit: 1 HeartbeatCount: 5 selfHeartbeat: 5
debug mode: true
Server listening on port 8080.
>>> 

Commands:
  OS                OSタイプを切り替えます。引数無しでLinux / Windowsで切り替わります
  addConfig         コンフィグファイルに無い設定を臨時で設定します。プロセス停止すると消えます
  delConfig         一時的に設定を消します。プロセス停止すると消えます
  anycast           マスターだけを操作するモードに変更します
  checksum          引数に指定したファイル名にチェックサムをします
  clearBuffer       リモート側を操作した出力を貯めておくバッファをクリアします
  clearClients      接続しているクライアントを全て強制切断します
  clientsAlert      指定したクライアント数を下回るとアラートを出します。デフォは0で無効です。
  hosts             現在接続しているクライアントを一覧で出力します
  listConfig        現在の設定内容を一覧で出力します
  logout            指定したクライアントの接続を切ります
  mode              操作対象をリモート/ローカルでスイッチします
  pull              マスターにあるリモートファイルを手元にもってきます
  push              サーバーにあるローカルファイルをマスターにアップロードします
  switch            マスターを変えます。hostsコマンドで出てくる数字で指定します
  sync              マスターにあるファイルを他のクライアントにも配布します
```

昔ChatbotからサーバーにSSHでシェルスクリプトを投げ込むの作って見たんだけど、実際につかってくと　**↑**　が使えないのが苦痛なのね。打ち間違えとか再実行の時にイラっとくる。このシェル形式だとネットワーク遅延で処理待ちするとか除けば、サクサクターミナルのまま作業を進められるので体感的には凄く良くなった。

構想的に将来的にはgRPC化してみたいけど、企業内だとまだまだHTTP Proxyが強いので今のところこのまんまかな。Proxy挟んでクラウド上のサーバーに接続しておけばオンプレだろうが、マルチクラウドだろうがどこだろうと同じ作業ができるわけだし。

絶対Excelで！って指定は見た事ないから、これ実行していって実行したJupyterを納品物にすれば良いと思うけど、慣れ親しんだものからは抜け出せないものだね。。