

はじめに:3年の蓄積と、見えてきた「枠」
2023年1月から Obsidian を使い始めて、早いもので3年が経過しました。 日々の思考やナレッジを書き溜め、今や私のデジタルライフに欠かせない「外部脳」となっています。
当初は公式の Obsidian Sync を利用しており、その利便性には大変満足していました。iOS/iPadOSを含めた全デバイス対応、設定の簡便さは間違いなく最高峰の体験です。
しかし、3年間使い込み、ノートの数が万単位に膨れ上がってくると、いくつかの「枠」が切実な問題として浮上してきました。
- コストと容量の制限: 月額プランによって1GB〜10GBという制限があります。画像やPDFが増えると常に残量を気にするストレスが生まれます。
- 履歴の期限: 変更履歴の保存期間が最大1年間。10年、20年と使い続けたい一生モノのノート術において、過去の履歴が消えていく仕様に一抹の不安を覚えました。
そこで、3年の経験を経て辿り着いたのが、Windows・Android・Linux環境において「容量無制限・履歴永久保存・コスト最小」を目指した自作システムの構築です。


システムの全体像:Syncthing(動)と GitHub(静)
今回のシステムの肝は、「同期」と「バックアップ」の役割を完全に分けた二段構えです。
- Syncthing(リアルタイム同期): P2Pで端末間を直接結びます。スマホで書いた瞬間にデスクトップに届く爆速な「神経」です。
- GitHub(履歴管理): 同期ミスや誤消去を救う「記憶」。Gitの仕組みを使うことで、数年前の履歴でも正確に辿れます。
※ただし、iOS/iPadOSは標準ではSyncthingが動作しないため、今回は対象外(Windows/Android/Linux特化)という割り切りをしています。


構築手順 Step 1:Syncthingによる「母艦」の作成
まずは、24時間稼働の「自宅サーバPC(母艦)」と、各デバイスを繋ぎます。
- インストール: 母艦PCと各デバイス(スマホ等)に Syncthing をインストールします。
- フォルダ設定: 母艦PCでObsidianの保存フォルダ(例:
D:\Sync\Obsidian)を指定し、「共有」設定を行います。 - ペアリング: 各デバイスと母艦PCをIDで紐付け、フォルダを同期させます。
これだけで、インターネットさえあればどこでも同期される環境が整います。この段階ではまだGitは登場しません。


構築手順 Step 2:GitとGitHubの準備
次に、母艦PC上で「履歴管理」の設定を行います。
- Gitの導入: 母艦PCに Git for Windows をインストールします。
- リポジトリ作成: Obsidianのフォルダ内でコマンドプロンプトを開き、
git initを実行します。 - 除外設定:
.gitignoreファイルを作成し、同期不要な設定ファイルを除外します。これをしないと設定変更のたびに履歴が汚れてしまいます。
# .gitignore の例
.obsidian/workspace
.obsidian/workspace-mobile.json
.trash/
- GitHub連携: GitHubで空のリポジトリを作成し、母艦PCから
git remote add origin [URL]で紐付けます。
構築手順 Step 3:職人芸の「自動PUSHスクリプト」
ここが本システムの心臓部です。 通常なら git add → git commit → git push を手動で行いますが、これを PowerShell で完全自動化します。
以下は、私が作成したスクリプトの要点です。これを obsidian-sync.ps1 などの名前で保存します。
# 監視設定(OSのイベント通知を利用)
$watcher = New-Object System.IO.FileSystemWatcher
$watcher.Path = "D:\Sync\Obsidian" # ※自分のパスに書き換え
$watcher.IncludeSubdirectories = $true
$watcher.EnableRaisingEvents = $true
while ($true) {
# 変更があるまでここで待機(CPU負荷ゼロ)
$change = $watcher.WaitForChanged([System.IO.WatcherChangeTypes]::All, 1000)
if ($change.TimedOut -eq $false) {
# .gitフォルダ自体の変更は無視
if ($change.Name -like "*.git*") { continue }
# ★ポイント:同期の揺らぎを吸収するため60秒待つ
Start-Sleep -Seconds 60
# ロックファイルが残っていたら削除(お守り)
if (Test-Path ".git/index.lock") { Remove-Item ".git/index.lock" -Force }
# 変更をまとめてGitHubへ送信
git add .
git commit -m "Auto-sync: $(Get-Date -Format 'yyyy-MM-dd HH:mm:ss')"
git push origin master
}
}
このスクリプトのこだわりは、変更検知後にあえて「60秒待つ」ことです。これにより、Syncthingの同期中のファイルロックを回避し、かつ断片的な変更をひとまとめにして履歴を綺麗に保ちます。
構築手順 Step 4:完全バックグラウンド化(黒い画面を消す)
PowerShellをそのまま実行すると「黒い画面」が出続けて邪魔です。 そこで、VBScriptを使って、PC起動時にこっそりと裏で実行させるようにします。
以下のコードを launcher.vbs として保存し、Windowsのスタートアップフォルダに入れておくだけです。
Set ws = CreateObject("Wscript.Shell")
' パスは実際の場所に書き換えてください
ws.run "powershell -WindowStyle Hidden -File ""C:\Path\To\obsidian-sync.ps1""", 0
これで、PCを再起動しても勝手にシステムが立ち上がり、あなたのノートを守り続けてくれます。
運用レポート:3万ファイルでもサクサク
現在、約2.8万ファイル(約200MB)のノート群をこのシステムで運用していますが、極めて安定しています。
- 容量効率: テキスト主体のノートなら、Gitの圧縮技術で履歴を含めても100MB以下に収まります。容量制限に怯える日々は終わりました。
- 安心感: 「書き終えて1分経てば、世界最強のバックアップ(GitHub)に載る」という感覚は、創作の大きな支えになります。


まとめ:自分に合わせた「土台」を作る楽しみ
Obsidian Syncのような洗練された既製品も素晴らしいですが、3年使い続けた結果見えてきた「自分なりの課題」を、自作の仕組みで解決する。これこそが、ガジェット好き、IT好きにとっての醍醐味ではないでしょうか。
iOSをメインに使わない方であれば、この「Syncthing × GitHub」構成は、コスト・自由度ともに最強の選択肢の一つになるはずです。
Obsidianの同期・バックアップ環境の構築を検討中の方の一助になれば幸いです。


