11回目の過去問を追加し、1回目を削除したときの不具合

きっかけ

過去問を10回分収録しているアプリで、新しく11回目の過去問を追加し、いちばん古い1回目を削除しました。AIの解説データも同じように入れ替えました。

ところが入れ替えのあと、おかしなことが起きました。入れ替え前に、ユーザーが10回目のある問題にAIの解説を登録していました。入れ替え後もその問題には解説が残っていたのですが、新しく追加した11回目の同じ位置の問題にも、同じ解説が表示されていたのです。


原因を探る

このアプリでは、AIの解説を「問題ID」で探して表示します。ただ、IDで見つからなかったときは、「科目の中で何問目か」という番号で代わりに探す作りになっていました。

1回目を削除すると、2回目以降の問題が1回分ずつ前に詰まります。1回50問だとすると、追加前に10回目が入っていた位置(451〜500問目)に、追加後は11回目が来ます。

一方、AIの解説データは古い並びのまま端末に残っていました。そのため、11回目の問題をIDで探しても見つからず、番号で探した結果、同じ位置にあった旧10回目の解説が出ていました。元の10回目の問題はIDで正しく見つかるので、そちらにも解説が出ます。報告された症状とぴったり合いました。

では、なぜAIのデータが古いままだったのか。調べると、AIのデータを取り直すきっかけは、設定シートの「AIフラグ」を変えたとき、または手動の再ダウンロードボタンを押したときだけでした。過去問の追加ではスプレッドシートのIDを変えるので、過去問・模擬試験・画像は取り直します。しかし、AIは対象に入っていませんでした。

保存のほうも調べました。IDで見つからない問題にユーザーがAIの解説を登録すると、やはり番号の位置に保存していました。つまり、別の問題の解説を上書きしてしまうおそれがありました。


追加だけでも起きるのか

「過去問を削除せず、追加だけした場合はどうなのか」も確認しました。

番号がずれるかどうかは、新しい回のデータを過去問のCSVのどこに入れるかで決まります。運用では、新しい回は必ずいちばん下に足しています。この場合、既存の問題の番号は変わらず、新しい回の問題は古いAIデータにない番号になるので、「解説なし」になるだけです。

科目と回を入れ替えて表示するタイプのアプリでも、回の数自体は増えない設定なので、同じく問題は起きません。今回の不具合は、先頭の回を削除して全体がずれたことで起きたものでした。


どう直したか

修正は3つです。

1つ目。過去問の追加(スプレッドシートのIDの変更)を検知したら、AIも取り直すようにしました。ユーザーが登録した解説は、問題IDで新しいデータに引き継がれます。

2つ目。解説を表示するとき、IDの一覧があるのにIDで見つからない場合は、番号で探さずに「解説なし」とするようにしました。番号で探すのは、IDを持たない古い形式のデータのときだけです。

3つ目。解説を保存するとき、IDで見つからない場合は、番号の位置に書き込まずに、データの末尾に1件足し、IDの一覧にもその問題のIDを書き足すようにしました。これで、別の問題の解説を上書きすることはなくなりました。


ただし、3つ目には限界があります。末尾に足した解説は、AIのCSVにその問題が載っていないと、次にAIを取り直したときや、別の端末へデータを引き継いだときに消えます。引き継ぎの復元処理は、受け取る側の端末にあるIDの一覧に載っている問題だけを書き戻す作りだからです。運用で「過去問にある問題は、AIのCSVにも必ず載せる」ことにすれば、この状況はほとんど起きない見込みです。


さらに

過去問フラグや模擬フラグを変えたときにもAIを取り直すように変更しました。

変えたもの過去問模擬画像AI
1. AIフラグ−−−取り直す
2. 過去問フラグ取り直す取り直す取り直す取り直す
3. 模擬フラグ取り直す取り直す−取り直す
4. シートID取り直す作り直す取り直す取り直す