定型業務を自動化したときの話
はじめに
これはウイングアーク Agile and DevOps Stories のAdvent Calendar 2019、第11弾(2019年12月16日)の投稿です!
今回のテーマ
我々ウイングアークは、パッケージソフトウェアの販売も生業としておるのですが、開発インストーラーをそのままディスクに焼いて販売するわけでもないので販売に際していろいろKittingしています。
提供用のファイルに利用許諾をpdfにして封入したり…ネットワーク経由で提供するインストーラーは一部のファイルを消したり…
そのKittingの内容、万が一にも間違ってたら困るわけなのでマスターをチェックしています。このチェック作業が11月末まで手動でした。
大げさにいうと感謝の差分ツール、一日一万回!!! オリジナルとisoを指定し、差分。結果を確認し、また次の差分。気づけば日が暮れている…。といった状況です。
ということで、その作業を手動作業から脱却させ、段階的に自動化していこうと重い腰をあげました。昭和みたいな作業からは卒業して令和の世にステップアップします。
ツールができるまで
今回は私一人に影響度程度の超小規模の開発なのでだいぶ工程を省いて
- 要件定義
- 設計
- 実装・動作確認
という工程でツールを作成しました。
1.要件定義
今回の自動化による改善のイメージは
「人間が手動で差分ツールを繰り返し起動してファイルの差分比較を行い、差分結果を人間が確認する。」
から
「家に帰る前にツールを起動しておいて、次の日会社に来たら差分結果が出ている。その結果を人間が確認して作業完了する。」
に進化させます。
手動で行っているテストケースのうち、今回の自動化でテストケースの手順の部分をツールが行い、チェックポイントの確認を人間が行うという目標を設定(=要件定義)し、ツールを作成していくことにしました。
2.設計
テストケース中の手順がスクリプトできるかを検討しました。
検討の結果、Windows環境ではpowershellと、cygwinかMinGWをあたりを使えばできそうなことがわかりました。
適当なLinux環境で実装すれば、OSの標準機能だけで作れそうです。
今回は利用可能な物理環境がWindowsServer2019環境だったので、前者で作成することにしました。
3.実装と動作確認
2で得た検討結果を元に、powershellとcygwinを利用して片っ端から力技でテストケースをスクリプト化しました。
力技すぎて自身にゴリラ疑惑がたったあたりで、対象のファイル名がちょっと変わるとエラー吐きまくる状況と対面しました。
ファイル名などの設定が半分ハードコーディングされていたせいです。
外部ファイルからコントロールできるようにしておけばよかった。
ゴリラ おぼえた。完全に理解したわ。反省してまーす。
やばすぎるところだけ直しつつ、ゴリラでも動くところはそのままスクリプトにしたのでチェック作業をツールにやらせてみました。
うおおお~~!なんだよ…結構動くじゃねえか…。
ついでにパフォーマンスとリソースの使用量が想定の範囲内に収まっていることも確認。
最後まで動くようになったところで、意図的に誤りを混入したチェック対象をinputとして、間違いがあることを検出できるかの確認を行ないました。
誤りの検出ができることを確認したのでツール今回は完成。
反省と今後の展望について
実際に作業が発生したので作成したツールを利用してみました。
- 手動時の所要時間:6h
- 自動化して結果確認した際の所要時間:30m=0.5h
- 改善効率:1-(0.5/6)=91.67%
自動化の効果は確実に出てますね。
差分を取り終えても日が暮れていない。
まあ、これはうまくいったパターンの結果なので、チェック作業なのでNGを出すべきケースもあり、そちらでは(NGになった)原因の追及の調査の手間が発生していました。ゴリラの力の限界ですね。
ツール自体の完成度ともいえる話なのですが、結果に対する可読性の向上だったり、例外処理で適切なログを出力する等の改善を行うことによって、OKパターンの所要時間を0に近づけたり、NGパターンの場合でも原因追及の手間を削減できるんじゃないかな、と思っています。
かいつまんで言うと
一目でこいつはオッケー!ダメなときはここがだめ!
とパッと見でわかるようにしていきたいです。
チェック結果というデータを、データベースに片っ端から結果を投入してMotionBoardで可視化・活用出来たら便利そうですね。