「失敗したら自動でやり直す仕組みを入れておけば、自動化は安心です」。こう考える方は多いと思います。半分は正しく、半分は危うい考えです。

やり直しは二重実行と隣り合わせ

たとえば、請求書を作って顧客にメールで送る自動処理があるとします。メールを送った直後に通信が途切れ、処理側は「失敗した」と判断して最初からやり直したとします。顧客には同じ請求書が2通届きます。処理は実は成功していたのに、やり直しが事故を起こした形です。

やり直しを入れるなら、同じ処理を何度流しても結果が1回分と変わらない作りが要ります。これが冪等性です。難しい話ではありません。「この請求書は送信済み」という印を残しておき、2回目以降は印を見て何もしないようにするだけです。

機能を決める段階で「同じ操作が2回起きたら何が起きるか」を仕様に書いておくと、後から作り直さずに済みます。

やり直しても直らない失敗は、人に知らせる

もう一つの誤解は、やり直しが失敗を消してくれるという期待です。宛先の誤りや権限切れのように、何度やっても直らない失敗があります。これを黙って繰り返すと、誰も気づかないまま仕事が止まります。使う人から見れば、自動でやってくれるはずのことが、いつの間にか届いていない状態です。失敗そのものより、信頼を大きく損ないます。

知らせ方の決めごとは、次の3つで足ります。

通知を誰が受け取り、いつまでに対応するかを決めるのは、技術ではなく運用の話で、企画側の仕事です。ここが空白だと、通知は届いても放置されます。

自動化の品質は、うまくいくときの動きより、失敗したときの振る舞いに表れます。やり直しは二重実行への備えとセットで入れてください。直らない失敗は黙らせずに、人へ渡してください。この2つを最初の要件に入れることを勧めます。