MiDiccio のゴミ箱から完全に削除できるようになりました
単語帳アプリ MiDiccio の v1.4.4 で、ゴミ箱から言葉を完全に削除できるようにしました。あわせて、バックアップから「置換」で復元したときの扱いも見直しています。
前回の記事で「完全に削除はまだない」と書いた話の続きです。前半は使っている方に向けた変更点のまとめ、後半は開発者向けの仕組みの解説です。
変わったこと
セクション「変わったこと」ゴミ箱から完全に削除
セクション「ゴミ箱から完全に削除」- ゴミ箱の言葉を完全に削除できるようになりました。 1件ずつ削除するほか、ゴミ箱をまとめて空にすることもできます。
- 完全に削除した言葉は元に戻せません。 クラウド同期を使っている場合は、iCloud / Google Drive とほかの端末からも消えます。
- ほかの端末が v1.4.1 のままでも、完全に削除した言葉はその端末のゴミ箱から消えます。
置換で消える言葉はゴミ箱へ
セクション「置換で消える言葉はゴミ箱へ」- 「置換」で復元したとき、バックアップにない言葉はゴミ箱に移るようになりました。 これまでは、ゴミ箱に入らずに消えていました。
- ゴミ箱の言葉を「すべて元に戻す」ことができるようになりました。 間違ったバックアップで置換しても、まとめて戻せます。
- 同期を使っている場合、置換でゴミ箱に移った言葉は、ほかの端末でもゴミ箱に移ります。
- バックアップにも含まれる言葉は、これまでどおりバックアップの内容で上書きされます。上書きされた内容はゴミ箱に入らないので、置換の前に今のデータもバックアップしておくと安心です。
あわせて、プライバシーポリシーを v1.13 に改訂し、完全に削除した言葉の扱いを記載しました。
開発メモ
セクション「開発メモ」ここからは仕組みの話です。前回の記事の「同期のルール」と「削除は『印を付けるだけ』」を前提にしています。
前回の課題
セクション「前回の課題」前回、完全に削除がまだない理由として、次の3つを挙げました。
- 端末の中で消しても、ほかの端末やクラウドには残っているので、次の同期で戻ってくる
- 「完全に削除した」という情報を全端末とクラウドに伝える仕組みが別に必要
- 古いバージョンのアプリが混ざっている場合も考えなければならない
消さずに「中身を空にする」
セクション「消さずに「中身を空にする」」答えは、レコードを消さずに、中身を空にした削除レコードで上書きすることでした。
- 言葉・意味・メモ・タグを空にし、「削除済み」の印だけを付けたレコードにする
- 更新日時を新しくし、「未送信」の印を付ける
- あとは通常の同期で、Last-Write-Wins によりほかの端末とクラウドに伝わる
レコードそのものは残るので、次の同期でクラウドから「戻ってくる」ことはありません。残るのは、どの言葉かを見分ける ID と日時だけです。完全削除を「中身を消す編集」として扱ったので、ゴミ箱のときと同じく、同期に新しいルールを足さずに済みました。
古いバージョンが混ざっても困らない
セクション「古いバージョンが混ざっても困らない」古いバージョンとの互換性も、たまたま揃っていました。
- v1.4.1 のゴミ箱は、もともと中身が空の削除レコードを一覧から除外していた
- 以前のバージョンのアプリは、削除のときに中身を空にしたレコードを送っていた。今回の削除レコードはこれと同じ形
そのため、ほかの端末が v1.4.1 のままでも、完全に削除した言葉はゴミ箱から消えるだけで、不具合にはなりません。
置換を「削除」として同期する
セクション「置換を「削除」として同期する」これまでの置換は、端末のデータをバックアップの内容に入れ替えるだけでした。同期を使っていると、ここに問題がありました。
- 置換で消えた言葉は、クラウドにはまだ残っている
- 次の同期で「クラウドにだけある言葉」として戻ってくる
- → 「置換」という説明どおりにならない。逆に同期を使っていないと、消えた言葉を戻す手段がない
v1.4.4 の変更
- バックアップにある言葉は、これまでどおり ID ごとに上書きする
- バックアップにない言葉は消さずに「削除済み」の印を付け、更新日時を新しくして「未送信」にする
- もともとゴミ箱にあった言葉は変えない
ふだんの削除と同じ扱いなので、ゴミ箱に入り、同期でほかの端末にも削除が伝わります。「すべて元に戻す」で、置換の前の言葉をまとめて戻せます。
「復元の取り消し」は見送り
セクション「「復元の取り消し」は見送り」前回の「これからのこと」では、復元の直前の状態を1回分だけ保存して取り消せるようにする予定と書きました。今回は、置換で消える言葉をゴミ箱に移す方法で対応し、直前の状態の保存は見送りました。
- 間違ったバックアップで置換したときに困る「言葉が消えた」は、ゴミ箱から戻せる
- 残るのは「バックアップにも含まれる言葉が、古い内容で上書きされた」場合だけ。同期を使っていれば、クラウドにある新しい内容が次の同期で勝つ
- 直前の状態を丸ごと保存して取り消すには、取り消しをクラウドにどう伝えるか、保存した状態をいつ消すかなど、考えることが多い。個人で使うアプリの規模に対しては重い
ダウンロード
セクション「ダウンロード」v1.4.4 は App Store と Google Play で公開しています。