「もう大丈夫だろう」と思った。バグも直した。振り返り画面も作り直した。パットの入力も好評だった。リリースが見えてきた。

……でも、「最後にもう一回だけ」が止められない性格なのだ。

全画面3周チェック

ある夜、全画面のHTML・JavaScript・CSSを3周チェックすることにした。TOP画面、ラウンド設定画面、入力画面、振り返り画面、マイバッグ画面、アカウント画面、ログイン画面……。ひとつずつ、コードを上から下まで読んでいく。

「3周もやれば何も出ないだろう」と思っていた。甘かった。

出てくる出てくる — 11件のバグ

1周目で3件。2周目で5件。3周目でさらに3件。合計11件のバグが見つかった。

中でも危なかったのは、PWAのキャッシュ問題だ。ワンダフはブラウザのキャッシュを使ってオフラインでも動くようにしている。このキャッシュのバージョン番号が、ファイルによってバラバラになっていた。

ある画面は「バージョン48」、別の画面は「バージョン49」、本体は「バージョン50」。これが噛み合わないと、古い画面がいつまでも更新されない。前に知り合いの「再開ボタンが出ない」問題を引き起こしたのと、根っこは同じ問題だ。

全ファイルのバージョンを50に統一した。これを見逃していたら、ユーザーにまたキャッシュ問題で迷惑をかけるところだった。

会員登録でデータが消える

もうひとつ見つけた厄介なバグ。ゲストモードで遊んでいたユーザーが会員登録すると、ゲスト時代のラウンドデータが消えてしまう実装になっていた。

正しくは、ゲストのデータを引き継いでから登録処理に入るべきだ。せっかく「まず触ってみて、良かったら登録」という体験を設計したのに、登録した瞬間にデータが消えたらユーザーは「は?」となる。

地味だけど、これは本当に危なかった。

テストデータが嘘をつく

テスト用のダミーデータ生成ツールも見直した。ホールタイプが日本語の「ミドル」「ショート」「ロング」になっていたけど、実際のアプリでは英語の「middle」「short」「long」で保存している。テストデータで動いても本番で動かない、という典型的な罠だ。

パーオンの判定フラグも抜けていた。テストデータにフラグがないと、振り返り画面でパーオン率が0%になる。「なんで全部パーオンしてないことになるんだ」と悩む未来が見えたので、先に直した。

そして最後のバグ — 18ホール終わったのに「続ける」

一通り修正が終わって、最後に通しテストをした。テストデータで18ホールを完了させて、最終画面を確認。

画面に出たのは「⛳ 続ける」ボタンだった。

18ホール全部終わっているのに。もう記録するホールはないのに。「続ける」。

押してみたら、当然なにも起きなかった。

原因は単純だった。ラウンドの途中で「一旦やめる」ための画面と、18ホール完了時の画面が同じものを使い回していた。途中なら「続ける」は正しい。でも全部終わった後に「続ける」は、ちょっと怖い。

18ホール終わったのに「続ける」。19ホール目が始まるのかと思った。

笑いながら、18ホール完了用の専用画面を作った。「🎉 ラウンドお疲れ様でした!」というメッセージと、「📊 振り返りへ」「💾 保存してTOPへ戻る」の2つのボタン。シンプルだけど、これがないとラウンドの終わりが締まらない。

「最後にもう一回」は正しかった

3周チェックして、11件のバグを見つけた。どれも「動くけど変」なレベルのものばかりで、致命的なクラッシュはなかった。でも「動くけど変」が一番厄介だ。ユーザーは「なんか変だな」と思ったら黙って離れていく。

個人開発は、自分がテスターであり、自分がレビュアーであり、自分がQAだ。完璧にはなれない。でも「もう一回だけ見る」を何回繰り返せるかが、クオリティの差になる。

「もう大丈夫」は、まだ大丈夫じゃない。「もう一回だけ」が最後のバグを見つける。

リリースが、もう目の前まで来ている。

……たぶん。