コンテンツに進む

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 で公開しています。

最終更新: