メニュー
ひとぅ
新しいもの好きな「ひとぅ」が2007年10月からガジェット製品や雑貨、面白いウェブサービスなどの情報を発信しています。お得な情報や役立つTIPSも人気です。
お知らせ

アーカイブ
カテゴリー

【解説】記事Obsidian Syncを卒業して「Syncthing × GitHub」へ。Win/Android環境で容量・履歴無制限の自作同期システムを組む

  • URLをコピーしました!

※当サイトではアフィリエイト広告を利用しています

目次

はじめに:3年の蓄積と、見えてきた「枠」

2023年1月から Obsidian を使い始めて、早いもので3年が経過しました。 日々の思考やナレッジを書き溜め、今や私のデジタルライフに欠かせない「外部脳」となっています。

当初は公式の Obsidian Sync を利用しており、その利便性には大変満足していました。iOS/iPadOSを含めた全デバイス対応、設定の簡便さは間違いなく最高峰の体験です。

しかし、3年間使い込み、ノートの数が万単位に膨れ上がってくると、いくつかの「枠」が切実な問題として浮上してきました。

  • コストと容量の制限: 月額プランによって1GB〜10GBという制限があります。画像やPDFが増えると常に残量を気にするストレスが生まれます。
  • 履歴の期限: 変更履歴の保存期間が最大1年間。10年、20年と使い続けたい一生モノのノート術において、過去の履歴が消えていく仕様に一抹の不安を覚えました。

そこで、3年の経験を経て辿り着いたのが、Windows・Android・Linux環境において「容量無制限・履歴永久保存・コスト最小」を目指した自作システムの構築です。

システムの全体像:Syncthing(動)と GitHub(静)

今回のシステムの肝は、「同期」と「バックアップ」の役割を完全に分けた二段構えです。

  1. Syncthing(リアルタイム同期): P2Pで端末間を直接結びます。スマホで書いた瞬間にデスクトップに届く爆速な「神経」です。
  2. GitHub(履歴管理): 同期ミスや誤消去を救う「記憶」。Gitの仕組みを使うことで、数年前の履歴でも正確に辿れます。

※ただし、iOS/iPadOSは標準ではSyncthingが動作しないため、今回は対象外(Windows/Android/Linux特化)という割り切りをしています。

構築手順 Step 1:Syncthingによる「母艦」の作成

まずは、24時間稼働の「自宅サーバPC(母艦)」と、各デバイスを繋ぎます。

  1. インストール: 母艦PCと各デバイス(スマホ等)に Syncthing をインストールします。
  2. フォルダ設定: 母艦PCでObsidianの保存フォルダ(例: D:\Sync\Obsidian)を指定し、「共有」設定を行います。
  3. ペアリング: 各デバイスと母艦PCをIDで紐付け、フォルダを同期させます。

これだけで、インターネットさえあればどこでも同期される環境が整います。この段階ではまだGitは登場しません。

構築手順 Step 2:GitとGitHubの準備

次に、母艦PC上で「履歴管理」の設定を行います。

  1. Gitの導入: 母艦PCに Git for Windows をインストールします。
  2. リポジトリ作成: Obsidianのフォルダ内でコマンドプロンプトを開き、git init を実行します。
  3. 除外設定: .gitignore ファイルを作成し、同期不要な設定ファイルを除外します。これをしないと設定変更のたびに履歴が汚れてしまいます。
# .gitignore の例
.obsidian/workspace
.obsidian/workspace-mobile.json
.trash/
  1. GitHub連携: GitHubで空のリポジトリを作成し、母艦PCから git remote add origin [URL] で紐付けます。

構築手順 Step 3:職人芸の「自動PUSHスクリプト」

ここが本システムの心臓部です。 通常なら git addgit commitgit 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の同期・バックアップ環境の構築を検討中の方の一助になれば幸いです。

この記事が気に入ったら
フォローしてね!

この記事をシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次