自分が実装した部分が本番環境でエラーを起こした話
先日、実装を終えて無事リリースして何事もなく稼働しているはずだったが・・・
リリースして二日後の土曜日。のん気に休みを楽しんでいたところ、slackに通知が届く。
「ある操作を行うとエラーメッセージが出て先に進めないんですが」という内容だった。(ある操作の部分は言えないのでぼかしています)
心臓バクバクで焦る、ただ焦る。その間にチームの先輩方が対応をとってくれて、最初のメッセージから約10分後リバートをすることになった。
実装前の状態に戻して無事、ある操作を行うと先に進むことができた。こうして障害対応を終えた。(自分は何もやっていない)
次の出社日にチームリーダーに謝罪した。するとこう言われた。
「君の謝罪に何の価値もない。それより原因を再現して対策を建てろ」
そりゃそうだ。誤って済むなら警察も弁護士もそもそも司法制度なんていらない。
エラー原因はリバート作業中に解明されていた。
メソッドの呼び出しをしているが呼び出し元のメソッドを定義していないことが原因だった。
こんなミスをするのは僕くらいで、普通のエンジニアは絶対こんな初歩以前のミスはしないと思う。
これを読んでバカだなと笑っている人は正しい。
この後やったことはローカル環境でエラーの再現、メソッドを定義して処理ができるかの動作確認、テストコードの追加。
ローカルで動作確認を終えた後、ステージング環境での動作確認。
チームメンバーの人と再度動作確認。
そうして、再度デプロイして今のところは無事稼働している。
この件以降次のことをやるようにした。
・テストコードの過不足はないか(実装した部分に対して何のテストが必要かリストを作り、その通りにテストコードを書き全部パスする)
・テストコードがあるから安心というわけではなく、カバーできない部分もあるから動作確認を行う。
・どの動作があるか全部洗い出し動作確認リストを作成して全部チェックする。また、プルリクにこれらを記載する。
今後はこれらを徹底して行いエラーを起こさないように努めていく。
読んでいる人はこんなエラーを起こさないと思うけど、一応反面教師の例として読んでいただければと思います。