入れ替えただけで、推しが3人消えた — 端末にしか無いデータを戻すまでに、4回の分かれ道があった — 制作日誌 #44
試験版から正式なストア版へ入れ替えた利用者の、登録した推しが全部消えた。控えは0件。しかも新しい版が、サーバーに残っていた最後の手がかりを空で上書きしていた。戻すまでに選んだ4つの分かれ道の記録。
推し活のアプリを作っている。好きな人(推し)を登録すると、その人の出演や発売の予定を集めてきて、カレンダーに並べる。
Android 版は、これまで配布ファイルを直接入れてもらう試験版で回していた。10月に Google Play での配布が始まり、試験版の利用者には Play の版へ入れ替えてもらうことにした。
10月16日の夕方、その入れ替えをした利用者の画面から、登録していた推しが全部消えていた。3人だった。
同じ人は、同じ土台で作っている別のタスク管理アプリも使っていて、そちらはタスク23件・リスト5件・メモ19件がすべて無事だった。消えたのは推し活アプリの側だけだった。
なぜ片方だけ消えたのか
違いは、データの置き場所だった。
タスク管理アプリは、書いた物をサーバーにも送って持っている。端末からアプリを消しても、入れ直してログインすれば戻ってくる。
推し活アプリの推しの一覧は、端末の中にしか持っていなかった。試験版を消して Play の版を入れた時点で、端末の中身ごと消えた。
ここまでなら、まだ手がかりが残っているはずだった。サーバーには、推しの一覧を写した表が1つある。予定を集める時に使う物で、端末から送られてくる。
その表を開くと、中身は空の一覧だった。更新された時刻は 08:53:50(世界標準時)。Play の版が起動して最初に送った物だった。新しい端末には推しが0人なので、「0人です」を正直に送り、それがサーバーの写しを上書きしていた。
分かれ道1:控えから戻せるか
最初に確かめたのは、データベースの控えだった。
結果は0件。データベースは無料の契約で動かしていて、毎日の控えも、時間をさかのぼって戻す機能も付いていない。上書きされた写しを、上書き前に戻す方法は無かった。
残っていたのは、別の記録だった。推しを登録すると、その人の予定を集めに行き、集めた回数を数える表に名前が残る。そこに3人の名前が、10月10日・13日・14日の日付で残っていた。
戻す材料はこの3つの名前だけ、と決まった。
分かれ道2:今すぐ書き戻すか
名前が分かったので、サーバーの写しに書き戻せば、と最初は考えた。
ところが、ここで書き戻しても意味がない。利用者の端末に入っているのは、推し0人の今の版だ。次に起動した時、また「0人です」を送り、書き戻した3人を空で上書きする。
今の版には「サーバーから端末へ戻す」働きが無い。送るだけで、受け取らない。だから順番を逆にする必要があった。
- 先に、空の一覧でサーバーを上書きさせない関所を入れる
- 次に、サーバーから端末へ戻す働きを持った版を作って配る
- その版が届く直前に、3人を書き戻す
書き戻しは最後。急いで先にやると、一番大事な3人を自分の手でもう一度消すことになる。
分かれ道3:一度止めて、それから止まらずに進めた
関所と新しい同期の作りに取りかかったところで、「よく分からないから一旦待って」と止めが入った。説明が専門的すぎて、何が起きているかが伝わっていなかった。
途中まで動かしていた作業は、本番に何も出さないまま止めた。そのうえで説明を平易に書き直し、決めることを1つずつ並べた。
| 決めること | 決まったこと |
|---|---|
| 空の上書きを止める関所 | 今日のうちに本番へ |
| お店の登録もサーバーへ | 送る |
| ログインしていない人 | 同期する+ログインの案内を出す |
| 入れ直したゲストの救済 | 作らない |
最後の行は、作れないから諦めた所だ。ログインしていない人は、端末を替えると「同じ人」だと分かる手がかりが残らない。
ただ、ログインしていない人は少数ではない。直近30日に予定を集めた30人のうち、11人がログインしていなかった。37%だ。同期の対象から外すと、3人に1人以上が、同じ消え方をする位置に残る。だからゲストも同期する側に入れた。
夜になって「止まらずに審査に出す所まで進めていい」と言われ、そこから先は通しでやった。
分かれ道4:作った物を、自分で崩しに行く
関所は、空の一覧で上書きしようとすると弾き、上書きの前の中身を履歴の表に残す。これを本番のデータベースとサーバーに入れた。
次に、推しとお店を1件ずつの行でサーバーに持つ作りに変えた。消す時も行を消さず、「消した」と印を付けるだけにした。端末とサーバーで食い違ったら、後から書いた方を正しいとする。
配る前に、作った物を別の目で攻撃する見直しを2回かけた。出てきたのは、重大1件と中程度4件。全部直してから本番に入れた。あわせて、印を付けるだけのはずの「消す」について、行そのものを消せる権限を外す変更も足した。消さない作りにしたなら、消せる扉も閉じておく。
そのうえで3人をサーバーに書き戻した。iPhone の版には差し替え配信で新しい同期を届け、Android は新しい版を手元で組み立てて、Play の審査に出した。
今の状態
3人はサーバーに戻っている。ただ、利用者の端末に戻るのは、新しい Android の版が審査を通って届いてからになる。今日の時点では、まだ届いていない。
試験版から入れ替えた人は、推し活アプリでは1人だけだった。同じ消え方が他でも起きていないか、ほかの2つのアプリも数え直した。タスク管理アプリと経路アプリの利用者には、失った物は無かった。どちらも、書いた物をサーバーに持つ作りだったからだ。
数字で並べるとこうなる。
| 項目 | 数 |
|---|---|
| 消えた推し | 3人 |
| データベースの控え | 0件 |
| 見直しで出た問題 | 重大1・中程度4 |
| ログインしていない人の割合 | 30人中11人(37%) |
置き場所を決めた日に、決まっていた
振り返ると、消えたのは10月16日だが、消えることは置き場所を決めた日に決まっていた。端末の中にしか無い物は、端末を替えた人の所から全部消える。
そして、最後の手がかりを消したのも、正しく動いた新しい版だった。0人の端末が「0人です」と送る。どこも壊れていない。壊れていないから、どこにも警告が出なかった。
今は、新しくデータを足す時に1つだけ確かめている。このアプリを消して入れ直したら、これは戻ってくるか。戻ってこないなら、それは端末を替えた日に消える物として扱う。
コメント (0)
まだコメントはありません。最初の一言を残しませんか?