オートセーブとバージョンの詳細な動きを追跡してみる

Lion以降のOSX環境ではオートセーブとバージョンという仕組みが展開中であり、Snow LeopardからいきなりMountain Lionに移行した身には、ちょっと戸惑い気味である...。自動的に保存されること、過去のバージョンをブラウズして簡単に戻れること、などの簡単な説明はあるが、それ以上の詳細な仕組みを調べようとしても、情報が断片的でいまだに未知なことが多い。(検索の仕方が悪いのかもしれないが)
そこで、いつもの通り実験してみることにした。オートセーブとバージョンを思う存分体感してみる。

バージョンブラウザにはTimeMachineのバックアッップも表示される

  • まず、テキストエディットを開いて、hello.txtを新規で作って、デスクトップに保存してみる。(内容は「hello.」と入力した。)

  • この時点でのバージョンは、たった一つのはずである。
  • そう予想して「ファイル」>>「バージョンを戻す」>>「すべてのバージョンをブラウズ」してみる。
  • 予想通りたった一つのバージョンしか表示されないと思いきや...

  • しばらく待っていると、複数の過去バージョンが表示されてしまった!

  • いちばん最初のバージョンまで戻って確認してみると...

  • なるほど。これは以前に実験で作ったhello.txtであると気付いた。(2012-10-08の修正日になっている)
  • 以前に削除したにもかかわらず、TimeMachineでバックアップされていたファイルである。
  • 同じファイルパスのhello.txtとして、バージョンのブラウズ画面に表示される仕様のようだ。
  • そういえば、バージョンのブラウズ画面にした直後「TimeMachineからバージョンを取得中...」と表示されていた気がする。
  • 同じファイルパスであれば、たとえ過去に削除されていようとも、TimeMachineのバックアップがある限り表示されるのだ!


「なるほど」と思うと同時に、注意も必要だと実感した。

  • たまたま同じファイルパスのファイルを作ってしまうと、最初のバージョンが予想外の内容になっている場合がある。

バージョンブラウザの操作

以下、自分が理解できた操作。

  • TimeMachineブラウザの操作とは微妙に操作が異なる。
    • escボタンを押しても終了しない。
    • ウィンドウのタイトルをクリックして過去バージョンに遡れるが、
    • 最新のバージョン側に進むには、右サイドのタイムラインの目盛りをクリックするしかない。
  • 復元しないでバージョンブラウザを終了するには以下の方法があった。
    • どこかのバージョンの書類ウィンドウを閉じる。(どれでもOK)
    • command-Wのショートカットでも終了できる。
    • 「完了」ボタンを押す。(「復元」を押さない限りバージョンが変更されることはない)
  • optionキーを押していると、「復元」が「コピーを復元」になる。
    • 「コピーを復元」=「現在の書類はそのままに、指定したバージョンを保存前の名称未設定な状態として復元する」
  • バージョンブラウザでも、書類の編集が可能。
    • 過去のバージョンから必要な部分のみ選択して、コピー&ペーストも可能。
    • 編集内容は、「復元」ボタンを押さずにバージョンブラウザを終了すれば、最新の書類にそのまま反映されている。
  • バージョンブラウザ右側にはタイムラインの目盛りがある。
    • TimeMachineでバックアップされているバージョンは紫の目盛り。
    • バージョン履歴に保存されているバージョンは白の目盛り。

オートセーブされるタイミング

  • 以下の操作は、システム環境設定 >> 一般 >> 「書類を閉じるときに変更内容を保持するかどうか確認」チェックなし の設定(OSXデフォルト)で試した。


1. 何も変更せずにバージョンブラウザを終了して、hello.txt書類に戻ってみた。


2.「world」を追記してみた。
  • hello.txtのウィンドウタイトルに「編集済み」と表示された。

  • 「バージョンを戻す」メニューに「最後に保存したバージョン」が追加された。
  • hello.txtの変更日が「world」を追記した瞬間の日時に変更された。

  • バージョンブラウザの現在の書類は「hello world.」最新バージョンは「hello.」のまま。

3. さらに「Hello, world!」に修正してみる。


  • バージョンブラウザの現在の書類は「Hello, world!」最新バージョンは「hello.」のまま。

4. 保存(command-S)してみた。
  • hello.txtのウィンドウタイトルらら「編集済み」が削除された。

  • 「バージョンを戻す」メニューから「最後に保存したバージョン」が削除された。

  • バージョンブラウザの現在の書類は「Hello, world!」最新バージョンに「Hello, world!」が追加された。

「保存メニュー」=「ファイルを保存すると同時に、バージョン履歴に追加する効果がある」

5. さらに「これがバージョンです。」を追記してみる。
  • すると、ウィンドウタイトルに「編集済み」が追加された。

  • 「バージョンを戻す」メニューに「最後に保存したバージョン」が追加された。

  • 最新バージョンは「Hello, world!」のまま。

6. ここで一旦閉じる。そしてまた開く。
  • すると、ウィンドウタイトルから「編集済み」が削除された。

  • 「バージョンを戻す」メニューから「最後に保存したバージョン」が削除され、「直前の保存」が追加された。

  • 右側の最新バージョンは以前と同じ。

ウィンドウを閉じるとファイルに保存する効果はあるが、バージョン履歴に追加する効果はない。

7.「バージョン」の部分を「オートセーブ」に変更してみた。
  • 再び、ウィンドウタイトルに「編集済み」と表示される。

  • 「バージョンを戻す」メニューから「直前の保存」が削除され、「最後に開いたバージョン」が追加された。

  • 「これがバージョンです。」世代がバージョンブラウザに追加された。

ファイルに保存された内容が変更されると、変更直前の内容がバージョン履歴に追加される。

8. では「最後に開いたバージョン」とは、一体どのバージョンなのだろう?

  • 実際に戻してみると、6. で開いたときの状態「これがバージョンです。」に戻った。
  • ウィンドウタイトルから「編集済み」が削除された。

  • 「バージョンを戻す」メニューから「最後に開いたバージョン」が削除された。

9. 今度は3行目に「これがオートセーブです。」を追加してみた。
  • ウィンドウタイトルに「編集済み」が表示された。

  • 「バージョンを戻す」メニューに「最後に保存したバージョン」と「最後に開いたバージョン」が追加された。

  • 右側の最新バージョンには、8. で「最後に開いたバージョン」に戻す前の状態もしっかり保存されている。


10. この時点で「最後に保存したバージョン」とはどのバージョンだろうか?
  • なるほど、6. で一旦ウィンドウを閉じたときの状態のようだ。
  • つまり、メニュー操作で「保存」しなくても、ウィンドウを閉じることで「保存」した扱いになっているようだ。

  • 「バージョンを戻す」メニューから「最後に保存したバージョン」と「最後に開いたバージョン」が削除された。


11. もう一度3行目に「これがオートセーブです。」を追加してみた。
  • ウィンドウタイトルに「編集済み」が表示された。

  • 「バージョンを戻す」メニューに「最後に保存したバージョン」と「最後に開いたバージョン」が追加された。


12. ここで運悪くテキストエディット.appが強制終了してしまった...。
  • 「再度開く」で再起動してみると、このような状態になっていた。

  • 残念ながら、強制終了する直前の状態は完全に復元されていない。
  • 「これがオートセーブです。」の「こ」しか復元されなかった。
  • オートセーブといえども、タイミングによってはこのような状態になるのだ...。
  • ところが「バージョンを戻す」メニューを確認すると、「最後に保存したバージョン」と「最後に開いたバージョン」が残っていた。

  • 「最後に開いたバージョン」を選択してみた。

  • しかし、ウィンドウの内容は変わらず。
  • ウィンドウタイトルから「編集済み」が消えただけであった。
13. さらにもう一度「これがオートセーブです。」を追加してみた。
  • ウィンドウタイトルに「編集済み」が表示された。

  • 「バージョンを戻す」メニューに「最後に保存したバージョン」と「最後に開いたバージョン」が追加された。
  • 「最後に保存したバージョン」の時間は、12. のときと同じである。


  • 今度は「最後に保存したバージョン」を選択してみた。

  • なるほど、6. で一旦ウィンドウを閉じたときの状態のようだ。
  • これは、10. で確認した状態と同じである。

つまり、強制終了によって結果的にウィンドウが閉じても、保存された扱いにはならない。
正常な操作でウィンドウが閉じられたときだけ、保存された扱いになるようだ。

14. ここでもう一度、強制終了のテストをしてみる。
  • 「強制終了のテスト。」を追記した。

  • 10秒くらい待って、command-option-escによってテキストエディットを強制終了してみた。
  • テキストエディットを再起動すると、追記した「強制終了のテスト。」は消えていた。


  • もう一度「強制終了のテスト。」を追記した。
  • 今度は60秒くらい待って、テキストエディットを強制終了してみた。
  • テキストエディットを再起動すると、今度は「強制終了のテスト2。」が残っている!(素晴らしい!)


  • いったい何秒待てば編集中の状態が保持されるのだろう?
  • 今度は30秒くらい待って、テキストエディットを強制終了してみた。
  • テキストエディットを再起動すると、今回も「強制終了のテスト3。」が残っている!(素晴らしい!)


  • その後30秒未満を5秒刻みで試してみると、強制終了すると編集済みの内容はすべて失われた。
  • オートセーブは30秒以上操作しない時間が続いたときに行われているのかもしれない。
  • また、以上の操作は常にテキストエディットをアクティブにしている状態で試している。
  • テキストエディットから一度でも他のアプリケーションに切り替えると、待機時間に関係なく編集済みの内容は保持されていた。
  • 以上の検証から、以下の仕様が見えてくる。

オートセーブは待機時間30秒以上、あるいはディアクティブになった瞬間に行われている。

  • これは、MacOS漢字Talkと呼ばれていた時代からあるスティッキーズに、30秒ルールの自動保存を追加したような仕様である。

バージョンを戻すメニューの正確な意味

  • 以下の操作は、システム環境設定 >> 一般 >> 「書類を閉じるときに変更内容を保持するかどうか確認」チェックなし の設定(OSXデフォルト)で試した。


  • ここまで、ファイル >> バージョンを戻す メニューには4つの文言が出現している。
    • 「直前の保存」
    • 「最後に保存したバージョン」
    • 「最後に開いたバージョン」
    • 「すべてのバージョンをブラウズ...」
  • 「すべてのバージョンをブラウズ...」でバージョンブラウザが起動するのは理解できている。
  • しかし、それ以外のメニューが意味する正確なバージョンを想像できるだろうか?
  • 自分には、どのバージョンが呼び出されるのか、まったく見当がつかなかった...。
調べてみた
  • 以下のようなversion.txtファイルを作った。
  • 1行ごとに、右側の()内の操作を繰り返した。

    • 「バージョン1(保存メニュー)」と書いて、ファイル >> 保存 を実行した。(ファイル名:version.txt)
    • 「バージョン2(閉じて、開く)」と書いて、ウィンドウを一旦閉じて、また開いた。
    • 「バージョン3(保存メニュー)」と書いて、ファイル >> 保存 を実行した。
    • 「バージョン4(閉じて、開く)」と書いて、ウィンドウを一旦閉じて、また開いた。
  • この状態で、「バージョンを戻す」メニューは、以下の状態になっている。


  • バージョンブラウザは、以下の状態になっている。


  • 「直前の保存」を選択すると、「バージョン3」に戻った。
  • 「直前の保存」は、ファイルを開いた直後、未編集の状態でないと表示されない。




  • 「最後に開いたバージョン」を選択すると、「バージョン4」に戻った。
  • ウィンドウを一旦閉じて、開いて「直前の保存」を繰り返すと、「バージョン3」「バージョン2」「バージョン1」と変化した。
  • 「バージョン5」を追記してみた。



  • 「最後に保存したバージョン」を選択すると、「バージョン1」に戻った。
  • 「最後に開いたバージョン」を選択すると、「バージョン2」に戻った。

以上の結果から、以下の仕様だと想像した。

保存の定義
  • 「保存」メニューを選択する、ウィンドウを閉じる、を実行したときの状態が保存される。
  • 「直前の保存」を選択してバージョンを戻したときも、一区切りの保存状態と認識される。
直前の保存
  • 書類ウィンドウを開いた直後は、最新の保存状態が見えている。
  • 「直前の保存」とは、そのとき表示されるメニューである。
  • 「直前の保存」を選択すると、最新の保存状態の一つ前に戻る。

つまり「現状の保存状態」=「最新の保存状態」の時、
「直前の保存」=「現状の保存状態の一つ前」に戻す。

最後に開いたバージョン
  • 「最後に開いたバージョン」=「その書類ウィンドウを開いたときの状態」に戻す。
  • 編集途中で、繰り返し保存しようとも、繰り返しバージョンを戻そうとも、決してひるまず、その書類ウィンドウを開いたときの状態に戻す。
  • 但し、実際にウィンドウを開き直さなくても、アプリケーションの切り替えをしただけで開き直されたと認識され、最後に開いたバージョンが変更されてしまう...。
最後に保存したバージョン
  • 「最後に保存したバージョン」=「以下のいずれかの操作をしたときの最新状態」に戻す。
  • 「保存メニューを選択する」「ウィンドウを閉じる」「直前の保存」


以上の検証はすべて「書類を閉じるときに変更内容を保持するかどうか確認」チェック無しの環境である。

「書類を閉じるときに変更内容を保持するかどうか確認」チェックありの場合

  • それでは「書類を閉じるときに変更内容を保持するかどうか確認」チェックありの場合どうなるのか?

  • 保存前の書類では、書類ウィンドウを閉じるボタンの中央に黒点が表示される。

  • これはSnow Leopard以前までの書類ウィンドウでは、ファイルが保存されていない状況を表現していた。
  • これでオートセーブが無効にできるのかと思いきや...
    • 現状のファイルをクイックルックで確認してみると、しっかり「バージョン3」になっていた。
    • 変更日も「バージョン3」に変更した日時になっている。

つまり「書類を閉じるときに変更内容を保持するかどうか確認」する以前に、ファイルにはしっかりオートセーブされているのだ。

  • そして、書類ウィンドウを閉じようとしたときに、「変更を元に戻す」か「保存」の選択を求められる。

    • 「変更を元に戻す」=「最後に保存したバージョン」に戻す
    • 「保存」=「そのままオートセーブ」される。

つまり、純粋に「書類を閉じるときに変更内容を保持するかどうか確認」する効果しかないのである。

  • また、「書類ウィンドウを閉じるときの保存ボタン」は、「保存メニュー」とは効果が違っている。
    • 「保存メニュー」=「ファイルを保存すると同時に、バージョン履歴に追加する効果がある」
    • 「書類ウィンドウを閉じるときの保存ボタン」=「ファイルを保存する効果しかない」

つまりチェックあり・無しに関係なく、オートセーブとバージョンの基本的な動作はまったく同じなのである。

所感

  • 今まで、「書類を閉じるときに変更内容を保持するかどうか確認」をチェックありにすれば、オートセーブが無効になると思っていたが、それは大いなる勘違いだった。
  • オートセーブに対応しているアプリケーションは、基本的に常にオートセーブされていたのだ。
  • Dropboxのフォルダ共有などを使っている時には、この仕様には十分注意しなくてはならない。
    • 相手が編集したかどうか、手元のバックアップの更新日と比較して判断することが多い。
    • ファイルを閲覧するだけのつもりでも、ちょっとした操作ミスで更新日が変更されてしまう可能性がある。
    • command-Zでundo(操作の取り消し)しても、更新日はアップデートされたままになってしまう...。
  • 更新日を元に戻したいなら、以下のいずれかの操作をしておく必要がある。
    • command-Zでundoしないで、書類ウィンドウを一旦閉じて「変更を元に戻す」ボタンを押す。
    • command-Zでundoしないで、ファイル >> バージョンを戻す >>「最後に保存したバージョン」を選択する。
    • command-Zでundo後なら、何らかの変更をして、上記どちらかの手順を実行しておく。
  • どうしてもオートセーブを無効にしたいなら、以下の対策で。(もっとエレガントな方法があれば、ぜひ知りたいです
    • ファイルをロックしてから開く。
    • ファイルをゴミ箱に入れてから開く。
    • ファイルのアクセス権から「書き込み権限」を取り除いて開く。


オートセーブとバージョンの未知なるところはまだまだあるが、今回はここで力尽きた...。

参考ページ

素晴らしい情報と翻訳に感謝です!