はじめに
Obsidian Gitは、ObsidianのVaultをGitでバックアップできる便利なプラグインです。
自分はPCとiPhoneでVaultを同期しているんですが、ある日conflictが発生。調べてみるとauto commit-and-syncが意図通りに動いておらず、片方の変更がpushされないまま放置されていました。
設定を見直そうと設定画面を開いたものの、項目が多い上に相互依存していて正直かなり混乱しました。本記事では、一つずつ検証した結果をまとめています。
とりあえず動かしたい人向けの推奨設定
細かい話の前に、「とりあえずシンプルに自動バックアップしたい」という場合の設定を載せておきます。
Automaticセクション
| 設定 | 値 |
|---|---|
| Split timers for automatic commit and sync | OFF |
| Auto commit-and-sync interval | 5 |
| Auto commit-and-sync after stopping file edits | OFF |
| Auto commit-and-sync after latest commit | OFF(または ON) |
Commit-and-syncセクション
| 設定 | 値 |
|---|---|
| Push on commit-and-sync | ON |
| Pull on commit-and-sync | ON |
Pullセクション
| 設定 | 値 |
|---|---|
| Pull on startup | ON |
これで、5分ごと(または編集停止から5分後)に自動的にcommit→pull→pushが走ります。
なんでこの設定なのか、という部分は以下で詳しく解説していきます。
設定の全体像
Obsidian Gitの自動バックアップ設定は、大きく2つのセクションに分かれています。
- Automaticセクション: タイマーの設定(いつ実行するか)
- Commit-and-syncセクション: commit-and-syncの動作内容(何を実行するか)
この2つが連携して動くので、片方だけ見ても「結局何が起きるの?」が分かりづらく個人的に一番の混乱ポイントだったと思います。
Commit-and-sync とは
まず押さえておきたいのが、commit-and-syncが何をするのかです。以下の4つの動作をまとめて処理する単位のことを指します。また、pushとpullについてはONとOFFができるため、commit-and-syncに含まない設定ができます。
Commit-and-sync の動作:
staging → committing → pulling → pushing
Push/Pullの設定による動作の違い
| Push on commit-and-sync | Pull on commit-and-sync | 実際の動作 |
|---|---|---|
| ON | ON | staging → commit → pull → push |
| ON | OFF | staging → commit → push |
| OFF | ON | staging → commit → pull |
| OFF | OFF | staging → commit のみ |
Split timers for automatic commit and sync
Obsidian Gitの同期をするうえで一番重要な設定です。こちらを理解することで応用が利くと思います。
このセクションではcommit-and-syncをどのように定期実行するかを設定します。
Split timers OFF の場合
| 設定項目 | 説明 |
|---|---|
| Auto commit-and-sync interval | X分ごとにcommit-and-syncを一括実行 |
| Auto commit-and-sync after stopping file edits | ファイル編集停止後に実行 |
| Auto commit-and-sync after latest commit | 最新コミットを基準にタイマーリセット |
commit、push、pullがcommit-and-syncという1つの処理にまとめられて、1つのタイマーで管理されます。
ただし、pullだけは独立したタイマーで動かすことも可能です。複数デバイスで同期している場合、「commit-and-syncの間隔より短い間隔でpullしたい」というケースに対応できます。
Split timers ON の場合
| 設定項目 | 説明 |
|---|---|
| Auto commit interval | X分ごとにcommitを実行 |
| Auto push interval | X分ごとにpushを実行 |
| Auto pull interval | X分ごとにpullを実行 |
| Auto commit after stopping file edits | ファイル編集停止後にcommit |
| Auto commit after latest commit | 最新コミットを基準にタイマーリセット |
commit、push、pullがそれぞれ独立したタイマーで管理されます。
そのため、commit-and-syncでpushを無効化していたとしても、pushのintervalが0出ない限り、自動で実行されます。
どちらを使うべきか
| 用途 | 推奨設定 |
|---|---|
| シンプルに自動バックアップしたい | Split timers OFF |
| commit頻度とpush頻度を変えたい | Split timers ON |
正直、commitとpushの頻度を分けたいケースってあまりないと思うので、ほとんどの場合はSplit timers OFFで十分です。
自動コミットの追加オプション
Obsidian Gitには、自動コミットの挙動を調整する2つのオプションがあります。
どちらもOFFのままでも自動コミットは普通に動きます。 挙動を細かく制御したい場合に使う設定です。
| 設定 | 概要 |
|---|---|
| Auto commit-and-sync after stopping file edits | ファイル編集中は自動コミットを止め、編集が止まったらコミット |
| Auto commit-and-sync after latest commit | 手動コミット後の自動コミット頻度を減らす |
ちなみに、この2つは同時にONにはできません。どちらか一方を選ぶ形になります。
Auto commit-and-sync after stopping file edits
ファイル編集が停止してからinterval分後にcommit-and-syncを実行する設定です。Auto commit-and-sync intervalが 0 以外のときに動作します。
動作フロー
ファイルを編集中
↓
編集を停止(キー入力なし、別ファイルに移動など)
↓
interval分間待機(例: 5分)
↓
その間に編集がなければ
↓
commit-and-sync 実行
私の見落としかもしれませんが、.obsidianフォルダ以下の設定ファイル(プラグインの設定など)をObsidianの設定画面経由で変更した場合、「editsがstopした」と判定されないようです。つまり、設定を変更してもcommit-and-syncが走らない可能性があります。
Auto commit-and-sync after latest commit
手動コミットを行った際に、自動コミットの頻度を減らすための設定です。
動作フロー (interval = 5分の場合)
00:00 自動commit-and-sync
02:00 手動でcommit ← ここでタイマーがリセットされる
07:00 自動commit-and-sync(02:00から5分経過)
手動コミットを行うと、そのタイムスタンプが「最後の自動コミット時刻」として記録されます。 結果として、手動コミットからinterval分後まで自動コミットが延期される仕組みですね。
どのオプションを選ぶべきか
| 設定 | 向いているケース |
|---|---|
| 両方OFF | シンプルにinterval間隔で自動コミットしたい |
| after stopping file edits | ノート編集中は自動コミットに中断されたくない |
| after latest commit | 手動コミット直後の無駄な自動コミットを避けたい |
個人的には両方OFFかafter latest commitをONにする運用をおすすめします。
after stopping file editsは、さっき書いたように.obsidianフォルダの変更を検知できないという落とし穴があります。設定ファイルの同期漏れでconflictが発生するリスクを考えると、この設定は使わずにintervalベースで確実にcommitする方が安全だと思います。
まとめ
Obsidian Gitの設定は複雑ですが、以下のポイントを押さえると理解しやすくなります。
- Split timersのON/OFFで設定画面の構成が変わる
- commit-and-syncの動作内容は別セクションで定義されている
- after stopping file editsとafter latest commitはオプション(両方OFFでも動くし、同時ONは不可)
-
after stopping file editsは
.obsidianフォルダの変更を検知できない
シンプルに使いたい場合は、Split timers OFFでintervalを5分程度に設定するだけで十分です。追加オプションは両方OFFのままで問題ありません。
私の場合、after stopping file editsの落とし穴に気づかず、設定ファイルの同期漏れでconflictが発生していました。今回の見直しで原因を特定できて、やっとスッキリしました。同じ悩みを持つ方の参考になれば嬉しいです。
JISOUのメンバー募集中!
プログラミングコーチングJISOUでは、新たなメンバーを募集しています。
日本一のアウトプットコミュニティでキャリアアップしませんか?
興味のある方は、ぜひホームページをのぞいてみてください!
▼▼▼
https://projisou.jp