Dumb Game Lab

ブログ · 開発の裏側

開発日誌 · 失敗談

直したバグを16回も直したと報告した日

Justin Lee, Dumb Game Lab ·

Dongne Bakeryのスタート画面。お店の前でパンを渡す場面の下に、DAY 10までの進行と累計売上1300万ウォンの表示が見える

クラッシュ収集にエラーが届いたからといって、全部が新しいバグとは限りません。11月3日の1日で立てたエラーチケットを確認したところ、16件がすでにmainで直したバグで、エラーを送ったのは修正前の古いバージョンのアプリでした。エラーを数える前に「送ってきたアプリのバージョンが、修正したバージョンより低くないか」を先に見るのが正しい順番です。

11月3日、チケットを16枚開いたのに直すものがありませんでした

その日の日記に書いた数字から書きます。エラーチケットを確認して閉じたPRが16個あり、すべてが「すでにmainで修正済み」でした。タイトルで数えたのは13個で、残りの3個は表現が違っていました。

Dongne Bakeryの「異常終了」(#5259)、チムジルバンの「前の画面で信号なしに落ちる」(#5263)、Teolmungchiの「異常終了」(#5287)、Wakppu Towerのスマホエラー3件(#5307)がその例です。開いてみると結論は同じでした。直したコミットはすでにmainにあり、コードでやることはありませんでした。

チケット1枚を確認するには、エラーの指紋を探し、どのバージョンで起きたかを見て、直したコミットを見つけてつなぐ時間がかかります。コードは1行も変わらないのに、その時間が16回かかりました。

エラーを送ってきたのは、修正前のアプリでした

原因は、エラーが新しく起きたのではなく、古いアプリが送り続けていたことです。ストアで更新していない人は、修正前のバージョンをそのまま使っています。そのアプリが落ちると、収集の側では新しいエラー1件として上がってきます。

#5276はWakppu Tower 1.0.17、#5275はパン合成ゲーム1.0.3だけが送ったエラーでした。#5258は1.0.4以上で再発が0件でした。数字が教えてくれるのは「修正後のバージョンでは起きない」ということです。ところが収集は、バージョン番号に関係なく同じエラーを同じエラーとして数えていました。

Dongne Bakeryの新しいパン作りの画面。生地、具、トッピングを選び、下にパン図鑑24種が格子状に並んでいる
パン屋アプリも、古いバージョンはこの画面のままインストールされています。直したバージョンが出ても、みんなのスマホではしばらく古いバージョンが動き続けます。

間違った判断が1つ:エラーが来たら新しいバグだと思い込んでいた

収集の仕組みを作るとき、「エラーが1件上がってきたら、今直すバグが1つ増えた」と仮定していました。エラーが上がってくる順番だけを見て作った仮定で、そのエラーがいつ時点のコードで起きたのかは聞いていませんでした。

直す速度は速いのに、みんなが更新する速度はそこまで速くありません。直したバグが増えるほど、「すでに直したバグ」が古いバージョンから再び上がってくる道も一緒に増えていきます。

その日の日記の「今日の無駄」の2行目が、この16件でした。1件につきPRを1つ使って、変わったコードは0でした。

直した後も、10日間で同じPRがさらに29個出ました

明日のやることに「古いバージョンのエラーはチケットを立てず、台帳にだけ書かせる。バージョン番号がmainより低ければ除外されるよう、まず収集の仕組みから」と書きました(t-261103-bszc)。

その後11月11日まで、タイトルに「修正済み」が入ったエラーPRを数えると、11月1日からで合計42件です。11月3日の13件を引くと、その後の8日間で29件になります。1日の平均は13件から3〜4件に減りましたが、0ではありません。

#6070 パン合成ゲーム1.0.3、#6377 PCカフェゲーム2.0.37、#6473 Algoitneun Yeou 1.0.6がその例です。直したバージョンが出た後も、古いバージョンはかなり長く生き残ります。この数字はPRのタイトルを数えたものなので、タイトルの表現が違うものは抜けています。

期間タイトルに「修正済み」が入ったエラーPR
11月3日の1日13件
11月4日〜11日(8日間)29件
11月1日〜11日の合計42件

そこで変えたこと

エラーが上がってきたら、件数よりも先に2つを見ます。送ってきたアプリのバージョン番号と、そのエラーを直したコミットが入った最初のバージョンです。送ってきたバージョンが修正版より低ければ、新しいバグではなく古いバージョンからの報告です。

直したコミット番号をエラー台帳に1行で残す方法も増やしました。そうすれば同じ指紋のエラーが再び上がってきても、台帳に「修正済み、何番のコミット、どのバージョンから」がすぐ出ます。チケット側は、タグをコミット単位で書き留めるように変えました(#5316)。

Dongne Bakeryのストーリー場面。おばあちゃんが守ってきた路地のパン屋を再び開けるというセリフの枠が、アイソメトリックの街並みの上に浮かんでいる
直したのが「もう開いている扉」でも、古いバージョンのユーザーの目には閉まったお店です。バージョン番号で2つを見分けます。

同じ状況なら、まず試してほしいこと

クラッシュ監視を自分で組み込んだ個人開発者なら、この順番が時間を節約してくれます。ツールの名前は違っても、たいていアプリのバージョンで絞り込む機能があります。

まだできていないことがあります。バージョン番号が低いエラーを、チケットにする前に自動で除外する仕組みがどこまで動いているかは、この記事を書きながらコードで再確認できませんでした。確かなのは、10日近く経った今も、開いて確認して閉じるだけのPRが残っているということです。

  • エラーを数える前に、アプリのバージョン別に分けて見る
  • 直したコミットが入った最初のバージョン番号を、台帳に書いておく
  • 送ってきたバージョンがそれより低ければ、チケットを立てずに台帳にだけ書く
  • 古いバージョンが減る速さを確認して、強制アップデートが必要か考える

FAQ

アプリのクラッシュレポートに、修正済みのバグが何度も上がってくるのはなぜですか?

更新していないユーザーのスマホで、古いバージョンのアプリが動き続けているからです。そのアプリが落ちると、修正前のコードのエラーが収集の側には新しい1件のように上がってきます。アプリのバージョン別に分けて見ると区別できます。

古いアプリバージョンのエラーはどうやって除外しますか?

エラーを直したコミットが入った最初のバージョン番号を台帳に書いておき、送ってきたバージョンがそれより低ければ新しいバグとして数えません。クラッシュ監視ツールの多くはアプリのバージョンで絞り込む機能に対応しているので、まずそれを使ってください。

修正版が出た後、古いバージョンのユーザーはどのくらい残りますか?

アプリによって違います。この記事の数字で見ると、11月3日以降の8日間でも、古いバージョンのエラーとして閉じたPRが29件ありました。ユーザーの正確な割合は数えていないので、わかりません。

ほかの記事

新作ゲームと小さなお知らせを、月に1回ほどお届けします。

他の言語English한국어日本語繁體中文