rcmdnk's blog

20250224_obsidian_200_200

Obsidianの同期について。

同期したいOS

Obsidianを使う環境としては

  • Windows
  • macOS
  • iOS (iPhone)
  • (Android)

で使ってます。Androidは今は使ってませんが一応出来るようにはしてあります。

Evernoteなどはもともとクラウドストレージ的なサービスでもあるので 各環境でアプリを使って同期、という感じですが、 Obsidianはアプリ自体はMarkdownファイルを管理するためのものなので 他の環境との同期は別途設定が必要です。

各種動機方法

Obsidian Sync

一番手っ取り早いのが公式が提供している Obsidian Sync

ただ、1つのvault, 1GBまでで4ドル、10 vaults, 10GBまでのプランで8ドルと 同期だけの機能と考えるとちょっと高め。

Obsidianのアプリを含めたサービスとして、と思えば Evernoteとかも最安で800円位なのでまあ妥当といえば妥当。

ただ、せっかくMarkdownというシンプルなファイルで管理している訳ですし、 できるだけ外部サービスに依存しない形で管理したい、ということを考えると別の手段を考えてみたくなります。

これは実際に使ってないのであれですが、機能としてはやはり手軽な上に競合も起こりにくく安定しているようです。

クラウドストレージ

基本的には管理しているフォルダをそのまま同期すれば良いので そのままクラウドストレージの中に入れてしまうのも一つの手です。

ただ、iOSなどではDropboxなどのアプリで同期しているフォルダを直接Obsidianのアプリから 読み書きすることはできないのでモバイルを含む場合には少し面倒です。

iOSではiCloudであればvaultをそのまま置けるのでiCloud経由が候補になります。 ただ、iCloudはWindowsだと結構競合が起こるイメージがあります。

また、Androidでは直接使えるクラウドストレージはないので OSのフォルダに別のアプリを使って更に同期する、みたいな必要があります。

そんな感じで、一番シンプルな方法ではありますが、 モバイルを含む場合にはちょっと面倒です。

Syncthing

Syncthing はP2Pでファイルを同期するためのツールです。

クラウドストレージとは違い直接2つのデバイス間で同期するため、 外部依存度が下がります。またサービスとしての容量制限もありません。 一方で同時に起動していないと同期はできません。

これを使ってるという話も結構ありましたが、 iOSでは公式アプリがなく Möbius Sync というアプリで使えますが、20MBまでの制限があり、 制限のない Möbius Sync Pro の方は800円します。

買い切りなので一旦買ってしまえば、というところではありますが、公式アプリではない、というところもちょっとひっかかるところ。

ただ、全体的にこれを使っての同期は結構安定しているみたいです。

LiveSync

LiveSync は公式のSyncのようなサーバーを自分で作って同期するためのツールです。

プラグインの説明のページでは Fly.ioというサービス上にデータベースを立てて同期する方法が紹介されています。

以前はこのサービスの無料の範囲で使えたようですが、 現状は無料のでずっと使い続けるプランは無くなったっぽい?ので完全無料にするのなら 自分でサーバーを立ててセットアップする必要があります。

ちょっと手がかかりますが、自分でサーバーを立てられるなら良いかも。 同期も公式のSyncに比べると少し劣るようですがそれなりに安定している模様。

また、複数人での共有サーバーみたいな感じでファイルを共有するとかだと この方法はありかもしれません。

Git

Obsidian Git というプラグインがあり、これを使うとGitで管理することができます。

細かい履歴などもきちんと取れて参照できるので、Gitに慣れているのであれば結構便利ではないかと思うもの。

Gitで管理できるということで、GitHubなどを通して同期することが出来ます。

現状主にこのGitの方法で管理しています。

Windows/macOS上では定期的な同期の設定をしておけばそれなりに安定して同期してくれます。 たまに競合が起こりますが、Gitの競合ですがObsidianのプラグインのボタンからでも簡単に解決できます。

最初に少し同期するタイミングなどに関して調整した方が良い部分はありますが 基本的には安定して使えると思います。

ただ、 Mobile に関しては現状かなり制限があり、特に多くのファイルがある場合には同期が成功しません。

READMEだと3000ファイルほどで試したとありますが、 自分の場合は100ファイルほどにしても同期が成功しませんでした。

なので実際どうしていたかというと、Mobileは重要なメモだけと割り切って、 別にVaultを作って数十のファイルだけに絞って同期していました。

Working Copy というファプリを使って Git管理を別途行う、という方法もあるみたいですがPushしたりするのは有料で 年4000円程。 手間と値段を考えるとうーん、という感じ。

Remotely Save

Remotely Save はクラウドストレージなどを使って同期するためのプラグイン。

ローカルにあるクラウドストレージのアプリのフォルダに保存するのではなく、 APIを使ってクラウドストレージと直接やりとりしたりしてくれます。

Google Driveなどを使うにはProバージョンが必要ですが、 2025/3/1まではβ版ということで無料で試せるようです

これを使うとモバイル版でも直接同期が出来ます。 たくさんファイルがあると結構時間はかかりますが、 一度同期してしまえばモバイルでもかなり安定しています。

ただクラウドストレージ経由の同期だと競合が起こった場合などに管理するのが面倒なのと 特に複数で同時に操作していると問題が起きやすいということもあるので、 現在はGitとRemotely Saveの両建て使っています。

現行の管理状態

  • Windows/macOS: Obsidian Git + GitHub
  • Windows/iOS: Remotely Save + Dropbox

以下はGitとRemotely Saveそれぞれ始める時にやったこととかについてのメモ。

Git

Obsidian外での準備

  • GitHubに空のPrivateレポジトリを作成する。
  • モバイルから扱うため、GitHubで作ったレポジトリ用の
    • SettingsDeveloper SettingsPersonal access tokensFine-grained tokensGenerate new token
      • Token name, Expiration:
        • 適当に。ExpirationはFine-generated tokensでは最大1年。
      • Repository access
        • 該当のレポジトリ
      • Permissions:
        • Contents: Read and write
        • Metadata: Read-only
  • 使う端末でGitをインストール
    • WindowsならGit for Windowsを入れておく。
      • C:\Users\<User>\ の下に.sshディレクトリ、.gitconfigを作ってGitHub用のssh設定、ユーザー名、Emailの設定をしておく
    • ちょっと注意が必要なのが、Gitを入れる前にObsidianが立ち上がっているとプラグインを入れてもGitを認識してくれないのでObsidianのアプリを再起動する必要がある
  • レポジトリをClone
    • 適当な.gitignoreを作ってcommitしておく(.trashは端末毎のものとしてGitの管理外する、macOSでも扱う場合に.DS_Storeを無視したい。

            echo -e ".DS_Store\n.trash" > .gitignore
            git add .gitignore
            git commit -m "add .gitignore"
            git push -u origin main
      
  • 新たに始めるのであればObsidianで保管庫としてcloneしたディレクトリを指定して保管庫としてフォルダを開くを選択
    • そのまま新たな保管庫として使う場合、コミットが無い状態だとプラグインを有効にしたところでfatal: your current branch 'main' does not have any commits yetといったメッセージが出て使えないので上みたいに適当にcommitを作っておく必要がある。
  • すでに作成してある保管庫をGitで管理したい場合Cloneしたディレクトリから.gitディレクトリを保管庫のディレクトリにコピー
    • .gitignoreとかもあれば一緒にコピーしておく
    • Gitで管理しようとしたりWindowsで管理する際にいくつか問題が起こるので整理をする必要がある(以下参照)

大きいファイルの整理

Evernoteのフリープランだと現在はノートのサイズとして25MBまでですが、 有料だと200MBまで使え、大きなファイルを添付しておくことが出来ました。

一時期有料で使ってたのでその際に50MBを超えるようなファイルも添付していて、 これがGitだとそのまま扱えません。

もしそのまま管理をしようと思ったら Git Large File Storageを使って管理することを考えます。

自分で使っていたものとしては無理にノートの中に残しておかなくても良いかな、ということで、 それらのファイル自体を別途バックアップしておいてノートからは削除するようにしました。

WSLなら

find ./ -type f -size +10M

PowerShellでやるなら

Get-ChildItem -Recurse | Where-Object { $_.Length -gt 10MB }

とかで大きなファイルを見つけます。基本的に添付ファイルとして_resourcesの中に入っているもので、 直接削除するとノートからのリンクが切れますが、それでも問題ない場合は直接これで見つけて削除してしまうのが早いかと。

長いファイル名の整理

WindowsのWSLで上記findコマンドを打つと、Input/output errorのようなエラーで見れないことがあります(半角260文字以上)。 これはファイルのパス名が長すぎる場合に出ますが、Git for Windowsでもこのような長いパス名はError: warning: could not open directory... Filename too longといったエラーになります。

Gitに関しては

git config --system core.longpaths true

として長いパスも許可するようにすればadd/commit出来るようにはなります。

ただ、別のWindows環境でも毎回同じようにする必要があるので出来れば短くしておきたいところ。

Obsidianではノートの名前が元々のEvernoteのタイトル名で、長いものは大体がWebclipしたものでした。

一時期TwitterをClipしていたものもあって、それだとtweetの中身そのものがタイトルになるので簡単に半角ベースで260文字を超えるものが出てきます。 _resource以下だと加えてそのディレクトリ構造や中のファイル名も入ってくるのでかなり長く。

これらに関しては、いらないものは削除すれば良いですが、 ノートを処理するとしたらObsidain上でノートの名前を変えるだけだとだめで、 _resourceを展開してその中にあるノート名のディレクトリ名を変更する必要があります。 こちらを変更するとノートについているリンクは自動的にアップデートされます。

デスクトップ版でファイルエクスプローラーを表示してその範囲を画面いっぱいまで伸ばして中にある長い名前を探していくのが手っ取り早いです。

もし手では出来ないほど大量にある場合は直接削除するしかないかもしれませんが、 今回はファイルエクスプローラー使ってある程度のものは名前変更で、いらなそうなものはさっさと削除、という方向でやりました。

ちなみにWSLからだと長いファイル名は直接Linuxコマンドでは見えませんが、cmd.exe /c ...としてWindowsコマンドを使うことで見ることが出来ます。(もしかしたらWSLにも見ることが出来るオプションがあるかも?)

How do I find files with a path length greater than 260 characters in Windows? - Stack Overflow

PowerShellで日本語が使えない

https://qiita.com/zawazawa5809/items/d6f84cf92a56f47229ed

$OutputEncoding.encodingName

-> US-ASCII

はこのままでOK

ワールドワイド…の 設定後再起動が必要。

コマンドプロンプトなら最初から使える(システムが日本語であれば?)

小分けにcommit/push

たくさんノートがある場合(2GB以上1)、Gitで一気に扱ってしまうとGitHubへ送れないので手動で小分けにadd/commit/pushをしておく必要があります。

Evernoteから取ってきたノートは全部で10GB位ありましたが、ノートブックごとに別れた各ディレクトリは大きくても数100MB程度だったので以下のようなPowerShellスクリプトで各ディレクトリごとにpush。 このコマンドでは.obsidianやトップディレクトリにそのまま置いてあるファイルもcommitされます。

Gitを実行する場合、WSLの中から行ってしまうとファイルのパーミッションが全て777になってしまい、 その後でObsidianの中のGitから見るとパーミッションが別のものに見えてすべて変更、になってしまうので このコマンドはPowerShellなどWindows側でやった方が良いです。

Get-ChildItem  | Where-Object { $_.Name -ne '.git' } | ForEach-Object { Write-Output $_.Name; git add $_.Name; git commit -m "add $($_.Name)"; git push }

Macとかでやっているならシェルスクリプトで

for d in *;do if [ "$d" != .git ];then echo $d;git add $d;git commit -m "add $d";git push;fi;done

デスクトップアプリでの設定

  • コミュニティプラグインからObsidian Gitをインストールして有効化。
    • 上記で.gitディレクトリが正しく設置されていると設定項目の最初がAutomaticという項目になっているはず
      • もしMiscellaneousが最初に来ていたらGitが使えないか.gitディレクトリが正しく扱えてない(エラーのポップアップが出ているかもしれないので確認)
    • 最初有効にする際、初期設定?か何かで少し重くなる(数秒から数十秒止まることも)こともあるのでそうなったらちょっとまってみる
    • 有効化出来たら設定を開いて適当に好きな設定にしておく
  • 設定した項目
    • Automatic
      • Vault backup interval (minutes): 10
      • Auto Backup after stop editing any file: On
      • Auto pull interval (minutes): 0 (Pull changes before push in Backup is enabled)
    • Commit message
      • List filenames affected by commit in the commit body: On
    • Backup
      • Pull updates on startup: On

Installation · denolehov/obsidian-git Wiki

うまく行かない場合、Ctrl-Shift-Iでデバッグ用のConsoleを開いておくとプラグインでエラーが起きたときに何が起こってるかわかりやすくなるので、 開いた状態でプラグインのon/offを試してみたり、Commit all changesのコマンドを試してみたりすると良いかと。

モバイルでの設定(iPhoneアプリ)

  • Create new vault
    • 適当な名前をつけてStore in iCloudはオフのままCreate
  • 設定からCommunity pluginsTurn on community plugins
  • BrowseGitで検索Git by Vinzent, (Denis Olehov)をInstall, Enable
    • 最近表示がObsidian GitからGitに変わった2
  • Optionへ行き
    • Authentication/Commit Author
      • Username: ユーザー名を入れる
      • Password/Personal access token: 上で取得したTokenを入れる
    • これで一旦バツを押して戻る
  • New tabのページで下に引っ張るとコマンドパレットが出てくるのでそこでGit: Clone and existing remote repoコマンドを選択
    • Enter remote URL: 上のレポジトリを入れる
    • Enter directory for clone. It needs to be emp…: Vault Rootを選択
    • Does your remote repo contain a .obsidian directory: YES
    • To avoid conflicts, the local…: DELETE ALL YOUR LOCAL CONFIG AND PLUGINS
    • Specify depth of clone. Leave empty for full: からのまま

ただモバイルでは最初全ファイルの入ったvaultを取得しようとすると途中で何もなく止まってしまっていたので、 結局別途vaultを作り数十程度のファイルだけの別vaultを同期していました。

その後、Remotely Saveを使ってDropboxと同期するようになったのでモバイル側ではGitプラグインは削除しました。

Remotely Save

Dropboxとの連携

Dropboxは端末制限が入って以降全く使ってなかったのですが、 メインで使っているGoogle CloudはRemotely SaveのPro版が必要になるのと、 Dropboxは以前いろいろなキャンペーンで容量が増えて25GB程度あるので Obsidian専用として使うのも良いのではということで。

ちょっと気になったのが連携数。

現状端末としては3つまでしか連携できないようになっています。

APIでの接続が1つとして数えられると制限がきついな、と思ったのですが どうもAPI接続は接続数とはカウントされないようです。

まあ現状ではWindowsとiOSだけでの同期で、他には全く使ってないのでもう1つ増えても3つということで 端末カウントされてもいけるんですが、いずれにしろ問題にはならないので良かったな、と。

Gitと違ってRemotely Saveの設定画面でDropboxを選んで連携するだけで簡単に同期が出来ます。

初期設定のままだと、アプリ/remotely-saveというディレクトリがDropboxに出来てその中に同期されます。

絵文字の入ったファイルを除去

Dropboxでは絵文字や特殊文字を使ったファイル名が使えません。

Webクリップとかしていると絵文字や特殊文字が入ったファイル名が出来ることがあり、 それらが最初の同期の時にエラーになっていました。

数十とかある場合はなんらかスクリプトで処置しようかと思いましたが、 エラーするたびに不要なら削除、必要ならその部分だけちょっと名前を変えて、という感じで 数ファイルで済んだので手動で処理しました。

設定項目

設定項目としては

  • Schedule For Auto Run: every 30 minutes
  • Sync On Save: Enable

くらいが変更した点。

初期設定のままだと

  • Sync _ Files Or Foolders: Disable

となっていて、これだと画像ファイルが入っている_resourcesが同期されません。

現状では同期先はモバイルだけという状態で、できるだけ軽くしたいということもあり、 これはそのままDisableにしてあります。

同期時間

最初に同期した時に3000ファイル位がある状態でしたが、 正確には見てなかったですが、Windowsからアップロードする形で1時間くらいかかりました。

モバイルの方はダウンロードしてくるような形ですが、 多分3,4時間位かかりました。

その間ちょっと別のアプリを開いたりもしてましたが、 Obsidianを表に戻すと同期が進んでいって、なんだかんだそれくらい。

なので最初はちょっと時間が必要です。 ただ、アップロード時の絵文字によるエラー以外は特に大きなエラーもなく同期出来ました。

一度同期が住めばモバイルで編集して同期してもすぐに同期されます。

まとめ

Obsidian is now free for work でちょっと話題になっていたのでちょっと見直しがてら現状の同期環境を整理してみました。

Obsidianを応援する意味では公式Syncを使うのもありだとは思いますが、 出来ることとして現状はこんな感じで使ってます。

Evernoteから移行時に残っていた暗号化された部分を復号するためのプラグインを作ったくらいで まだあまり複雑なことをしてませんが、 またなんかプラグインとか作りたいところ。

Sponsored Links
  1. Troubleshooting the 2 GB push limit - GitHub Docs

  2. プラグインを公式に入れてもらう際、Obsidian、とつけないように、といったルールが最近はあるようですが、Obsidian Gitはそれ以前からあるもので、最近そのルールに従って名前を変えた模様。

Sponsored Links

« シェルスクリプトでなるべく外部依存を減らしてAIのAPIを使う

}