自動化とは
手作業の反対で、機械を使って人の手を使わないことです。
「システムのIT化=自動化」ではない
自分がITシステムの開発をやっている人なので言えるんですが、 システムのIT化と自動化は同じではありません。 何でかというと、システムの自動化というのは次の順番で進むからです。
- 手順が担当者の頭のなかにある状態。担当者しか実行できません。
- 手順を書き出して「手順書」になったが、曖昧さがある状態。人によって結果が異なります。
- 「手順書」を整理して、曖昧さを排除した状態。教育すれば誰でも実行可能な状態です。
- 「手順書」をプログラムを用いて記述する。
4.が完了すれば「自動化」と言えるのですが、 本質的に重要なのは2.の「見える化」と3の「曖昧さを排除する」ことです。 曖昧さが排除できないと、手作業がどうしても残ります。 そうすると、自動化の効果は限定的なものになります。
効率化を犠牲にしてあえて曖昧さを残す手もあるのですが、 その曖昧さも含めた設計が必要です。 「何でもできるシステム」は「何もできないシステム」と同じです。
自動化は万能薬ではないが、取り組んだ方がよい
以下の資料で書いてあることはもっともだと思います。
ただ、これはあくまで自動化を万能薬と勘違いしている人が読むべきで、 自動化の効果に懐疑的な人を肯定するものではないことに注意が必要です。
なぜかというと、自動化に取り組むことで、業務の問題点が洗い出せるからです。 一見、柔軟性のあるように見えても、ただ単に曖昧なだけなケースが多く、 自動化を進めることで、それがあぶり出されます。
必要なのは、そのときに「無理やり標準化する」でもなく、「自動化を諦める」でもなく、 「これは曖昧さとして排除すべきものか、柔軟性として残しておくべきことか」を考える習慣です。 考えた結果が「柔軟性のために残す」なら、多少効率が悪くても残せばいいだけです。
ただ、自動化に取り組まないと、何が問題かも分かりません。 だから、やれることはやったほうがいいです。
手作業でやらないことは自動化しない
1つ注意すべき点は、手作業でやってないことを自動化しないことです。 なぜかというと、手作業でやっていないということは、以下のどれかに当てはまるからです。
- 手順が作れない(要件が不明など)
- 作業をしなくても問題ない
こういうときは自動化をしようとしても躓くケースが多く、 やる気がでないことが多いです。
自動化=並列化
自分は、自動化の本質は、並列化だと考えています。 例えば、ソフトウェアのインストールをする場合、手順書があれば人が1つずつ実行することができます。 でも、Ansibleのような構成管理ツールを使うと、 人が行うよりも早く、かつ同時に複数のマシンにインストールすることができます。
自動化は「実行」を並列化するのとは別に、「実行」と「検証」を分離する効果があります。 手作業の問題点は、人がその作業を「実行」するとともに、「検証」を並行して行っているからです。 並行作業をすると、人はものすごく疲れます。
もちろん結果の検証も自動化できればいいのですが、 結果の検証が難しい場合は、実行だけでも自動化しておくと、便利です。 これが、「実行」と「検証」の分離です。