アプリのバージョンアップのためにApp Storeに表示するスクリーンショット(アプリの紹介画像)をアップロードした所、なぜか同じものが2枚ずつ、合計8枚になってしまいました。
普段は1種類の画像につき4枚を登録しているので、本来なら4枚のはずが、気づくと8枚に増えている。減らしても、また増える。最初は何が起きているのか全く見当がつきませんでした。
原因は「自動アップロードの仕組み」の中にあった
私のアプリは50本以上あり、1本ずつ手作業で更新するのは大変なので、まとめて自動で処理するプログラムを組んで運用しています。スクリーンショットの差し替えや審査への提出も、ボタン一つで全部やってくれる仕組みです。
調べていくと、この自動化の仕組みの中に、見えにくい落とし穴がありました。
画像をApple側のサーバーに送る処理は、ごくまれに一時的な通信エラーで失敗することがあります。これは珍しいことではなく、よくある軽いエラーです。自動化プログラムはこの失敗を想定していて、「失敗したらもう一度送る」という安全策(リトライ)を組み込んでいました。
ところが、この「もう一度送る」処理に抜けがありました。1回目の送信が途中まで成功していて、一部の画像はすでにアップロードが完了していたにもかかわらず、2回目の送信ではそれを確認せずに、また同じ画像を送り直してしまっていたのです。結果として、同じ画像が2枚ずつ重複して登録される、という現象が起きていました。
なぜすぐに気づけなかったのか
厄介だったのは、エラー自体は「成功」のログとして記録されてしまっていたことです。プログラムの目には「無事送信できた」という結果しか見えておらず、Apple側の管理画面を実際に開いて目で数えるまで、重複には気づけませんでした。自動化が進むほど、こうした「裏側で静かに起きている問題」には気づきにくくなる、ということを実感しました。
どう直したか
最終的には、画像を送る処理のやり方を変えました。これまでは複数の画像をまとめて一気に送っていましたが、これを「1枚ずつ、確実に処理が終わったのを確認してから次を送る」という、慎重なやり方に切り替えました。多少時間はかかりますが、重複が起きない確実な方法です。
合わせて、今どのアプリのスクリーンショットが何枚になっているかを、自分のパソコンの画面に一覧で表示できる仕組みも作りました。これでおかしな状態になっているアプリがあれば、すぐに気づけるようになりました。
今回学んだこと
自動化は便利ですが、「成功したように見える」だけで安心してはいけない、ということを改めて感じました。特に、何十本ものアプリを一人で管理していると、1つひとつを毎回目で確認するのは現実的ではありません。だからこそ、「本当に正しく終わったか」を自動でチェックする仕組みまで含めて作っておくことが大事だと思いました。