全自動化と、半自動化

 コンピュータによる情報処理を自動化したいというニーズは業務のあらゆるシーンにおいて発生するものですが、それをシステム屋さんに伝えるときには、どのくらいの自動化をしたいかを意識するとよいと思います。

よくある傾向として、「人間が何もしなくても勝手にいろいろいい感じに処理されていてほしい」という要望になりがちですが、これには危険も伴います。

自動化を達成するためには多分なんらかのプログラムを作ることになるでしょうが、それの作りが完璧とは限らない、というのが、残念ながら、前提とすべき事実です。たいていの場合は期待通りに動くかもしれませんが、時々、なにか特別な条件では期待と外れた動作をしてしまう、というのも決して珍しくはありません。プログラムを書く際は、色々な例外的パターンを予想しながら、どんな条件でも適切に対処して動くように努めないといけないわけですが、それにしても、起こりうるあらゆるケースをすべて想定し、あらかじめ全て対応しておく、というのは現実的でないコストがかかりますから、とりあえず、確率は低くても、なんらかのエラーが発生するかも、という覚悟はしておくのが普通です。

何もかも人手を介さない自動化、というのは、途中でなんらかの予想外が起こってしまったときに、「そのまま、プログラムにしたがって行程が進んでしまう」という危険につながります。プログラムが異常を検知して終了してくれるならまだいいのですが、単に先に進んでしまう、ということだってあるのです。

たとえばAさんに最終的に10,000円の入金を行うような自動化プロセスがあったとして、その途中、今までに予想もしなかったような原因で、Aさんに入金されるべき金額は10,000,000円である、という計算結果になってしまったとします。それを、人間があらかじめ目を通して「あれ、これはなんだか異常だぞ」と気づけば、少なくとも本当の入金が起こってしまう前に修正を行うことができそうです。入金額を計算するという自動化と、実際に銀行と通信して本当に入金を行うという自動化が完全にひとつながりになっていた場合は、人間がこれに気づくチャンスを減らしてしまいます。コンピュータに「一千万なんて入金、常識で考えれば変だと分かるだろう!」とあとで詰め寄っても仕方がありません。

コンピュータが、ある段階で「これからこういうことを行うつもりだが、人間よ、先に進めてもよいか」とたずねてくれて、人間がひととおり目を通してから「わかった、先に進めてね」という指示をする、という風な設計をするのは、やろうとしている業務の種類によってはとても重要なわけです。

もうひとつ、コンピュータによる自動化には、「毎日、何時何分になったら、こういう勝利を自動で行ってね」と指示しておくタイプのものがあります。これも、うっかり忘れそうな仕事を確実にコンピュータが面倒見てくれて、とても役に立つものです。

こういう「時間に反応する自動化」は、土曜日や日曜日には起こってほしくない、などと追加の条件を示しておくものなのですが、もし、特別な事情があって日曜日に業務をしなくてはいけなくなったときに、ある種の自動処理を前提にしていた仕事ができなくなってしまう危険があります。ちょっと単純な例ではありますが、会社の玄関の鍵を開ける、閉める、といった仕事が自動化されていたときに起こりそうなトラブルですね。鍵の場合くらいなら手動でも臨時で対応できるでしょうが、何かもっと重要な仕組みが動いていなくて困る、といったことも想像できそうです。

なので、本当に時間で勝手にプログラムが始まってほしいのか、というのも、あらかじめ考えてみる価値があることです。ほんの少し手間がかかるとしても、人間が「今からこれをはじめます」「今からこれを終わります」といったプログラムを手動で実行したほうがいい、という判断もありうるかもしれません。

人間がいちいち自動化の途中に挟まってチェックをする、というのは、危険を避けられるというだけでなく、仕事のブラックボックス化を避けるという意味でも役にたつことがあります。「いつ、何の自動化が起こっていて、それはこういうタイミングと条件で人間が実行する」という風に普段から決めておくことで、「この自動化、ずっと勝手に動いてるけど、何の仕事してるんだっけ、だれもこれを止めていいのか悪いのか分からない…」みたいな困惑を、のちのちの担当者が感じずに済みます。往々にして、こういうのって引き継ぎ忘れますよね。

なにしろ、コンピュータを使った自動化はどの程度の自動化であるべきなのか、というのを、その内容や、間違っていたときのリスクを考慮して検討しておくべきです。