自作アプリ「サブスク番人」には、サービス名を入れると参考の値段を出してくれる一覧が入っています。値段は変わるので、あとからネットに置いた価格表を読みに行くしくみを足しました。
ところが、このしくみのせいで、AIが一覧に足したサービスが、ネットにつながると消えるという不具合が起きていました。この記事では、何が起きて、どう直したかをまとめます。
同じ話は、短い動画でも紹介しています。
何が起きたか
サービスの一覧は2つあります。
- アプリ内蔵の一覧:アプリの中に入っている。オフラインでも使える
- ネットの価格表:ネットに置いたファイル。値段を新しくするためのもの(作ったときは23件)
ネットの表は、アプリを開いたときに読みに行きます。前に読んでから12時間たっていれば取り直し、読んだ表は端末に残しておきます。こうしておくと、サービスの値段が変わっても、アプリを更新せずに参考の値段を直せます。
このアプリは、AI(Claude)が数日おきに小さな改善を1つ作る、というやり方で育てています。その中で、日本で人気のサブスクを内蔵の一覧に少しずつ足していました。
でも、ネットの価格表は23件のまま。そして、アプリがネットの表を読むと、内蔵の一覧が丸ごとネットの表に入れかわっていました。そのため、あとから足したサービスが候補に出てこなくなっていたのです。
なぜ起きたか

原因は、ネットの表を読んだあとの1行でした。「今の一覧 = ネットの表」と、そのまま置きかえていたのです。
作った日は、内蔵の一覧もネットの表も同じ23件でした。だから置きかえても困りません。ところが、内蔵の一覧だけが増えていくと、ネットの表に無いぶんが消えるようになりました。
しかも、読んだ表は端末に残しておくので、一度ネットにつながると、そのあとも同じ状態が続きます。オフラインで試すと全部出るので、気づきにくい不具合でした。アプリが落ちるわけでも、エラーが出るわけでもなく、ただ候補が少なくなるだけ、というのも見つけにくい理由でした。
どう直したか
置きかえるのをやめて、2つの一覧を合体(マージ)させるようにしました。決まりは3つです。
- 同じ名前のサービスは、ネットの表の値段を使う
- 内蔵の一覧にしか無いサービスは、そのまま残す
- ネットの表にしか無いサービスは、一覧の最後に足す
つまり、値段はネットの表が勝ち、サービスの数は減らないという形です。ネットの表は「値段を新しくするためのもの」で、一覧の中身を決めるのは内蔵の一覧、と役割を分けました。
あわせてテストも足しました。「ネットの表で値段が変わる」「内蔵だけのサービスが消えていない」「件数が内蔵+ネットだけの分になっている」を確かめています。ネットにつながらないときや、表が壊れているときは、今の一覧のまま動きます。
アップデートのお知らせには「ネット接続時に一部のサービスが候補から消える不具合を修正しました」と書きました。そのあとも内蔵の一覧は増え続けていて、今は170件をこえています。合体にしておいたので、ネットの表を毎回いっしょに増やさなくても、足したサービスはちゃんと候補に出ます。
作る人へ
- データの元が2つあるときは、「置きかえる」か「合わせる」かを最初に決めておく
- 作った日に同じ中身でも、片方だけ増えていくとずれが出る
- オフラインだけで試すと気づけない。ネットにつないだ状態でも確かめる
- AIに足してもらうときも、足した物が本当に画面に出るかをテストで守っておく
まとめ
- ネットの価格表(23件)が、内蔵の一覧を丸ごと上書きしていた
- そのせいで、AIがあとから足したサービスが候補から消えていた
- 今は2つを合体させて、値段はネット優先、サービスは全部残している
「サブスク番人」を作った話はサブスク番人を作った話に、ほかに作ったアプリは 作ったもの にまとめています。
ナノトイラボ 
