30人に「更新してください」を出した夜 — 強制アップデートは4回目でも、毎回ちがう所でつまずく — 制作日誌 #32
新しい版が公開された夜、古い版を使っている30人に更新をお願いする画面を出した。4回目の作業なのに、今回も手順書に無い穴が2つあった。古い版には新しい画面の部品が無く、そして画面は起動した瞬間にしか判定していなかった。深夜0時25分から2時20分までを順に書く。
店の改装に似ている。新しい売り場を開けたら、古い入口の前に「こちらからどうぞ」の案内板を立てる。ところが、古い入口には案内板を立てる金具が付いていなかった。さらに案内板は、店に入ってきた瞬間の人にしか見えない位置にあった。すでに店の中にいる人は、案内板の前を通らない。
自作のタスク管理アプリ「the task」で、9月26日の深夜にこれをやった。
そもそも何をする作業か
アプリには「この番号より古い版は使えません、更新してください」という画面がある。強制アップデートと呼ばれるものだ。サーバーに「最低の版の番号」を1つ置いておき、アプリは自分の番号とそれを比べて、古ければ画面を出す。
この画面を出すのは、今回が4回目だった。これまでの3回と並べる。
| 回 | 時期 | 引き上げた番号 | 古い版へ配り直した中身 | つまずいた所 |
|---|---|---|---|---|
| 1 | 7月2日 | 1.0.3 の版へ | 1本 | 通信に失敗すると素通りする作り |
| 2 | 8月6日 | 54 → 55 | 1本 | サーバーの数字だけでは出ない作りが残っていた |
| 3 | 8月21日 | 63 → 64 | 0本 | 無し(サーバーの数字だけで出た) |
| 4 | 9月26日 | 90 へ | 3本+直し1本 | 下に書く2つ |
3回目は、サーバーの数字を1つ書き換えるだけで済んだ。手順が固まったと思っていた。4回目は、配り直しが0本から4本に増えた。
00:25 — 新しい版が勝手に公開されていた
版1.0.31(ビルド90)は審査を通ると自動で公開される設定にしていた。気づいた時にはもう店頭に並んでいた。こちらは何もしていない。
公開を確かめてから動く。まだ並んでいないのに古い版を塞ぐと、更新先が無いのに使えなくなる「締め出し」になる。これは2回目の時に手順へ書き足した確認だ。
次に — 対象の人数を数える
誰に画面が出るのかを、アプリが起動した時の記録から数えた。
| 使っている版 | 人数 |
|---|---|
| ビルド75 | 22人 |
| ビルド72 | 8人 |
| 合計 | 30人 |
30人という数は、画面の中身を決めるのに効いた。これまでの更新画面は「新しい版があります」と1行出すだけだった。今回は、この版で何が増えたのかを一覧で見せる形に作り直していた。30人に手を止めてもらうなら、止まる理由を見せたかった。一覧にはウィジェットの見本も並べた。
文言は13言語ぶん用意した。題名、ボタンの文字、版の表記の3つを、言語ごとにサーバー側へ置く。アプリを焼き直さずに差し替えられるようにするためだ。
1つ目の穴:古い版に部品が無い
新しい更新画面は、最新の版の中で作った。ところが、この画面を実際に見るのは古い版の人たちだ。
アプリは2層になっている。
| 層 | 例え | 差し替え方 |
|---|---|---|
| 土台(端末に焼き込まれた部分) | 建物の骨組み | 審査を通して新しい版を出すしかない |
| 中身(画面や文言の部分) | 内装 | ネット越しに差し替えられる |
更新画面は「中身」なので、古い版へも配れる。ただし、配る中身は相手の土台に合わせて作る必要がある。今回の2つの古い版は、ちょうど9月下旬に土台を3世代まとめて上げる前のものだった。新しい画面が頼っている部品の一部が、古い土台には存在しない。
そのまま配ると、更新画面を出す前にアプリが落ちる。案内板を立てようとして入口ごと壊すことになる。
やったことは移植だ。古い版それぞれに「最後に配った中身」の時点まで戻り、そこへ更新画面だけを持ってきた。足りなかったのは主に2つ。
- 画面の文言の辞書に、8語ぶんの追加
- 顔アイコンを並べる部品。最新の版のものは使えないので、必要な所だけの最小版を書いた
これを古い版2つ(ビルド72用とビルド75用)に別々に作り、最新の版用と合わせて3本を配った。
なぜ最新の中身をそのまま配らないのか。以前、古い版へ最新の中身を送って、丸1日分の直しを巻き戻しかけたことがある。古い版の人が今動かしているのは、焼いた時点の中身ではなく、その後に配った直しの積み重ねだ。そこから枝を切らないと、配った直しが消える。
02:16 — サーバーの数字を90にする
3本が配られたのを確かめてから、文言13言語をサーバーへ置き、最低の版の番号を90に書き換えた。サーバーの返事が90になったことを実際に読んで確かめた。
古い版は、起動時に最大4秒だけ新しい中身を待つ設定を7月から焼き込んである。4秒以内に取れれば、1回目の起動から新しい更新画面が出る。取れなければ古い画面で出て、次の起動で新しくなる。どちらでも画面自体は出る。
ここで終わったと思った。
02:20 — 2つ目の穴:起動した瞬間にしか判定していない
確認のために手元の端末を眺めていて気づいた。更新画面は、アプリを起動した瞬間に1回だけ番号を確かめていた。
スマホのアプリは、ほとんど終了されない。ホーム画面に戻っても、アプリは裏で眠っているだけだ。次に開いた時は「起動」ではなく「裏から戻った」扱いになる。
つまり、すでにアプリを開いたことがある人は、完全に終了させるまで更新画面を見ない。30人のうち何人がそうなのかは分からないが、毎日使っている人ほど該当する。
| 開き方 | 直す前 | 直した後 |
|---|---|---|
| 完全に終了してから開く | 出る | 出る |
| 裏から戻る | 出ない | 出る |
「裏から戻った時にも番号を取り直す」直しを書き、4分後に最新の版向けに配った。
古い版2つには、この直しを配っていない。古い版は裏から戻った時に新しい中身を取りに行き、取れたらその場で立ち上がり直す作りになっている。立ち上がり直せば「起動」なので、判定が走る。最新の版だけが、立ち上がり直す理由が無い状態だった。
翌朝 — 確かめたこと、確かめていないこと
手元の端末で、更新画面が出ることを目で確かめた。見た目も問題なかった。
確かめていないこともある。30人がそれぞれ何分後に更新したかは、まだ数えていない。古い版の端末では実物を見ていない。見たのは手元の1台だけだ。
4回やって分かったこと
強制アップデートは、毎回「サーバーの数字を変えるだけ」の作業に見える。実際に数字を変えたのは、4回のうち1回だけだった。残りの3回は、数字を変える前に古い版の側で何かを直していた。
理由は単純で、更新画面を見るのは「こちらが一番触っていない版」の人だからだ。新しい画面を作るほど、古い版との距離は開く。今回も、画面を作り直した分だけ移植が増えた。
次からは作業の最初に2つを決める。
- 対象の版と人数を、起動の記録から先に数える
- 更新画面を変えたなら、古い版へ移植が要るかを最初に判断する
もう1つ、今回の2つ目の穴は、手順書をいくら丁寧に守っても見つからなかった。手順書は「数字を変えた後に画面が出るか」を確かめる作りで、「どの開き方で出るか」を分けていなかったからだ。出るかどうかは、開き方ごとに確かめる必要がある。
コメント (0)
まだコメントはありません。最初の一言を残しませんか?