ノートにバージョン管理は必要か?私の考えでは、創作や執筆に関連する成果物にはすべてバージョン管理が必要です。今日書いた文章の内容の変遷を後で追跡する必要が出てくるかどうかは、誰にもわかりません。

ノートのバージョン管理を行う理想的な方法は、Gitのようなバージョン管理システムを使用することです。これはプログラム開発時にコードのバージョンを管理するためのツールです。しかし、Gitに慣れていない場合や、より簡単な方法、より自動化された手順で実現したい場合は、diffzip プラグインを試してみる価値があります。

+ 警告

diffzipを使用した後、稀にObsidianのCPU使用率が急上昇する状況が発生することがありますが、数秒後には正常に戻ります。

1. diffzipの機能

diffzipを初めて実行すると、保管庫(リポジトリ)内のすべてのノートを最初のZIPファイルに圧縮します。同時に、バックアップフォルダ内にbackupinfo.mdというファイルを生成し、ノートファイルの変更時刻を記録します。それ以降のノートの変更は、差分として新しいZIPファイルに保存されます。

警告

backupinfo.md はバックアップ操作に影響を与える可能性があるため、手動で変更しないでください。

つまり、最初のZIPファイルにのみ、バックアップ時のすべてのノートが含まれ、2回目以降は新規追加および変更されたノートのみがバックアップされます。これにより、毎回大きなファイルが生成されるのを避け、ディスクスペースを節約し、必要なファイルを迅速に復元することができます。

コマンドパレットから Create Differential Backup を実行すると、変更があったファイルが直ちにバックアップされます。

2. 設定

  • Obsidian起動時に自動バックアップする機能を有効にすることをお勧めします。これにより、すべての変更が漏れなく自動的に記録されます。
  • Include hidden folder:.obsidianや.gitなどのフォルダをスキップするために、無効にすることをお勧めします。

3. バックアップ履歴

backupinfo.md を確認することで、特定のノートのバックアップ履歴を観察できます。復元時には、そのファイルがバックアップされているZIPファイルをフィルタリングして見つけることができます。

▼ 例

test.md:
  digest: dee824d7f626a1fc3ead477aeccf724718192fac37943d4245d144287b447d03
  filename: test.md
  mtime: 1709991840889
  history:
    - zipName: 2024-3-8-42820.zip
      modified: 2024-03-07T14:00:00.000Z
    - zipName: 2024-3-8-43824.zip
      modified: 2024-03-08T04:08:31.193Z
    - zipName: 2024-3-9-78930.zip
      modified: 2024-03-09T13:44:00.889Z

4. 復元

コマンドパレットから Restore from backups を実行すると、バックアップファイルを指定したフォルダに復元できます。

  1. まず、復元したいノートファイル名を選択します。
  2. 使用するZIPファイルを選択します。
  3. 復元先の場所を指定します。
    1. 設定済みの restored フォルダに復元する。
    2. 既存のノートに上書きして復元する。
    3. ノートの元の場所に復元し、ファイル名にZIPファイル名を付加する(例:test.mdtest-2024-3-8-42820.mdとして復元)。

gh|700

  1. restored フォルダ、またはZIPファイル名が付加されたファイル名で復元した場合、Beyond CompareやWinMergeなどのツールを使用して内容の比較やマージを行うことができます。

5. 🙋‍♂️問題点...

バックアップファイルが増えるにつれて、占有するディスクスペースも増加します。保管庫(リポジトリ)をクラウドストレージで同期している場合、スペース使用量を削減する方法を検討する必要があります。

利用可能な方法として、バックアップフォルダをシンボリックリンクに設定することが挙げられます。クラウドストレージは通常、フォルダリンクを同期しません(Dropboxは同期しません)。

バージョン管理の要件について:もしGitを使用できるのであれば、Gitの方がより包括的な解決策となります。

6. 関連リンク

💡 解説記事: https://jdev.tw/blog/8382/
✅ diffzip: https://github.com/vrtmrz/diffzip

7. チュートリアル動画

##