過去問追加時の「学習データ引き継ぎ」と機種変更時の「学習データ引き継ぎ」

過去問追加:新しい年度の過去問が収録され、アプリが更新されたとき

機種変更:スマートフォンを買い替え、6桁のコードで新しい端末にデータを移すとき


過去問追加のとき

年1〜2回の過去問追加のたびに、ユーザーの○×記録や集計表が全部消えていました。原因は、記録の保存場所を決めるのに「今使っているシートのID」を使っていたことです。過去問を差し込むと回番号がズレて記録の対応関係が崩れるので、事故を防ぐために毎回シートのIDごと変えていました。安全ではありましたが、そのぶん記録も全部消えていたわけです。


守るべきはユーザーのチェックした問題を示す☆マークユーザーの調べたAIの回答だけでいいのでは、という考えも最後まで残りました。この2つは、シートIDが変わっても引き継がれる仕組みが入っていたからです。それでも○×や集計表まで手を広げたのは、53アプリ×年1〜2回この消失を繰り返すコストと、既にある仕組みをほぼそのまま流用できることを天秤にかけた結果です。


直したのは主に3点です。

・回番号を使い切りにして、既存の回の番号を二度と動かさないようにした

・○×の記録を「位置」ではなく「問題そのもののID」で紐付けるようにした

・アプリの保存場所を「端末が最初に見た値」で固定し、シートを差し替えても動かないようにした


保持されるのは

過去問の○×・集計表・解答状況・チェックマーク・AIの回答。リセットされるのは模擬試験と腕試しの記録です(新しい問題が追加され、それまでの試験問題と中身が変わるので)。


機種変更のとき

過去問追加の改修が一段落したところで、今度は機種変更の6桁コード機能が動かなくなりました。


原因は、1つの変数に「端末がどこにデータを保存するか」と「今どの問題データを使っているか」という2つの役割を持たせていたことでした。過去問追加の改修は前者を「変わらないように」直し、機種変更機能は後者の変化を検知するために同じ変数を使っていた。別々のチャットで別々の理由から同じ場所を触っていたので、突き合わせるまで気づけませんでした。


直し方は単純で、変数を2つに分けました。

・保存先の名前:端末の中で一度決めたら変わらない

・問題データの世代:シートを更新するたびに変わる


機種変更のときは、まず世代を見比べて違えば復元を断り、同じなら保存先の名前だけ受け取る側に読み替えて書き込みます。これでインストール時期が違う端末どうしでも機種変更でき、かつ問題データの世代が違えばきちんと断ってくれるようになりました。


まとめ


どちらも根っこは同じで、「シートのID」という1つの値に複数の意味を詰め込みすぎていたのが原因でした。ひとりで全部作っていると、以前どんな理由でそう決めたかを忘れやすい。