ObsidianのメモをiCloudで同期しつつGitでバックアップする
基本的にObsidianで取ったメモはiCloudで同期させていますが、Appleのエコシステムの外にバックアップを取りたかったので何とかしました
Gitリポジトリはクラウドで同期させてはならない
大前提として、GitリポジトリをiCloud等のクラウドの同期フォルダに突っ込むことは推奨されません
クラウドの同期フォルダは別端末からの変更・保存によって意図せぬ上書きが発生することがあります
Gitリポジトリをクラウドの同期フォルダに置いた場合、意図せぬ上書きや同期の競合によって内部データが破損し、コミットの履歴が読み込めなくなる恐れがあります
作業フォルダとGitリポジトリの実態を分ける
上記の解決手段として、Gitリポジトリの実態のみをiCloudの管理下から分離するという手法を取ります
通常、Gitリポジトリの実態は作業フォルダ直下の.gitフォルダ(隠しフォルダ)内にあります
Workspace/
├ .git/ #この中にコミット履歴等が保管されている
├ example.py
└ config.yml
まず、この.gitフォルダを任意の場所(クラウドの管理下でない、ローカルの場所)に移動させます
隠しフォルダが表示されていない場合、Macではcmd + shift + .で表示されるようになります
今回は/Users/foobar/Documents/GitAlias/Workspaceの下へ移動させたと仮定します
その後、元々.gitフォルダがあった場所へ.gitという名称のテキストファイルを作成します
Workspace/
├ .git #テキストファイルを作成
├ example.py
└ config.yml
テキストファイルの中には.gitフォルダのパス(絶対パス)を記述します
gitdir: /Users/foobar/Documents/GitAlias/Workspace/.git
これにより、Gitリポジトリの実態を分離させた後でも、各種GitクライアントからGitリポジトリとして認識されるようになります
あとはこのWorkspaceフォルダをiCloudの同期フォルダの中へ移動させるだけです
iCloudで同期されるものは作業中の各ファイルと.gitという名称のテキストファイルのみになる為、Gitリポジトリの破損リスクは有りません
逆に言えば、ブランチの切替で作業フォルダの中身が変わってしまうと、それらもiCloudへ反映されてしまうのでブランチの頻繁な切替は推奨されません
この場合、あくまでもGitの使用目的はバックアップのみに絞るべきでしょう
変更履歴をガチガチに管理すべきソースコードたちは、このような方法でiCloud配下へ置くべきではありません
コミュニティプラグインによる自動バックアップ
さて、Gitでバックアップを取る準備はできましたので自動バックアップできるようにします
方針の概要は以下の通り
- Gitを扱えるコミュニティプラグインを導入し、自動バックアップする
- 自動バックアップは母艦のMacでのみ有効にする
- iPhoneやiPadから作業する際はiCloudでのみ同期
自動バックアップをMacでのみとしたのは以下の理由によります
- コミットの競合を避けるため
- iOS系のアプリはサンドボックス内で動く為、
.gitファイルによるGitリポジトリの実態のパス指定が難しい - そもそもiOS系だとObsidianの中でGitを呼び出すのが難しい(or安定して動くか分からない)
コミュニティプラグインを導入して設定するだけなので、細かい導入法は省略します
Obsidianの設定を開いてコミュニティプラグインを検索し、ソースが以下のものと一致するプラグインをダウンロードします https://github.com/Vinzent03/obsidian-git
後はコミュニティプラグインの設定を自分好みにするだけです
- 「Split timers for automatic commit and sync」を有効化
- 「Auto commit interval (minutes)」と「Auto push interval (minutes)」の値を
5に設定 (5分毎に自動コミット&プッシュ) - iPhoneやiPadでは「Disable on this device」を有効にするか、コミュニティプラグイン自体を無効化する
OSにインストールされたGitを使う
私はKeybaseの暗号化Gitにバックアップを取っているので、更にコミュニティプラグインの設定を変更しています
- 「Custom Git binary path」の値を
/usr/bin/gitに設定 - 「Additional environment variablesの値を以下に設定
PATH=/Applications/Keybase.app/Contents/SharedSupport/bin:$PATH /usr/bin/git
手順は以上です
iCloudというエコシステムの恩恵を最大限受けつつ、Appleの管轄外へ安全にバックアップを取れるようになりました
Obsidianは独自機能に関連するファイル(canvasなど)もテキストベースのファイルとなっていますから、本当にGitと相性が良いです