個人開発でつまずいたことと、その原因が分かるまでの記録。React Native / Expo / Convex / Clerk / App Store 審査まわりが中心です。
-
Apple の「メールを非公開」で、ユーザーが永久にログインできなくなる
「アカウントが消えた」の正体は Sign in with Apple のメール非公開だった。サーバー側は全部正常で、犯人は自分が出していた「前回はメールでサインインしました」バッジだった。
-
「勝手にログアウトされる」の犯人は、オフラインで未サインインのふりをする実装だった
clerk-js は通信に失敗するとセッションを null として返す。鍵は無事なのに未サインイン扱いに倒れ、サインイン画面に放り出される。実測で1日37人。捕まえるまでに計測を3回作り直した。
-
セッションの寿命を10年に伸ばしたのに、苦情が数週間止まらなかった
Clerk のセッションが7日で切れていた。設定を直したのに「また勝手にログアウトされた」が届き続けたのは、既に発行済みのセッションには新しい設定が遡って適用されないから。
-
バズった1日で Convex の I/O が 1,385GB・$267 溶けた
2日でユーザーが12倍になり、タイムラインが3回落ちた。3回とも原因は違ったが、構造は同じだった。リアクティブクエリのコストは「1回の重さ」ではなく「read-set × 再実行頻度 × 購読者数」の掛け算だった。