haruki256

ファイル差分だけでSQLiteキャッシュを更新すると、削除したフォルダの警告が残る

結論

JSONファイルの読み込み結果をSQLiteへキャッシュするアプリで差分更新を実装するなら、ファイルの追加・変更だけをテストして終えてはいけません。フォルダ削除は差分として検出されず、古い警告が残ることがあるため、更新対象が0件になる削除ケースもテストに含めます。

指定フォルダ内のJSONファイルを読み、結果と警告を一覧表示するローカルアプリで、画面表示用データをSQLite(アプリ内に組み込めるデータベース)へキャッシュとして保存しています。僕の実装では、ファイル差分だけでキャッシュを更新したところ、削除したフォルダに紐づく警告が画面に残りました。そこで、更新時に警告の参照先を確認し、存在しない対象の警告を削除しました。

ファイルの削除は変更として検出できました。一方、フォルダの削除はファイルの変更として検出されないため、フォルダがなくなっても警告の行だけがSQLiteに残っていました。

対策として、キャッシュの更新時に保存済み警告の参照先が実在するかを確認し、存在しないファイルやフォルダの警告を削除します。変更されたファイルが1つもない場合でも、この確認は省きません。

このようなJSON読み込み・SQLiteキャッシュ・ファイル差分更新の構成を使うなら、フォルダ削除後にも古い警告が消えるかをテストする必要があります。差分更新のテストでは、ファイルを追加・変更する処理だけでなく、参照先が消えた後に警告を削除できるかも確認します。