iPadのObsidianをSyncthingで同期する方法|無料アプリSyncTrainを使う
iPadのObsidianボルトを、無料・オープンソースのSyncTrainでSyncthingに接続して同期した手順の記録です。Folder typeをExisting folderにしないとObsidianから開けない最大の落とし穴、.stignoreの編集方法、iOSのバックグラウンド同期の制約までまとめます。
目次
はじめに
iPadでも、パソコンやスマホと同じObsidianのメモを見たいと思ったことはありませんか。
Obsidian公式のObsidian Syncは有料なので、すでにSyncthingを使っているなら追加料金なしで同期したいですよね。
私はWindows PCとAndroidスマホ、自宅サーバーの間でObsidianのボルトを同期しており、そこへiPadを追加しました。
使ったのは、無料のiOS向けSyncthingクライアント「SyncTrain」です。
初回同期では8,396ファイル、約480MBのデータが最後まで同期できました。
この記事では、SyncTrainを選んだ理由から、実際のセットアップ、私が詰まったFolder typeの設定、iOSのバックグラウンド同期の制約まで紹介します。
既存のSyncthing環境がある方なら、iPad側は無料アプリだけで追加できます。
SyncTrainとは・選んだ理由
SyncTrainは、iPadやiPhoneからSyncthingへ接続するためのアプリです。
ソースコードはGitHubのpixelspark/sushitrainで公開されています。
iOS向けのSyncthingクライアントとしてはMöbius Syncもありますが、私は次の違いからSyncTrainを選びました。
| 項目 | SyncTrain | Möbius Sync |
|---|---|---|
| 価格 | 無料・アプリ内課金なし | $4.99 |
| ソース公開 | 全部を公開(MPL-2.0) | Syncthingコア以外はクローズド |
| App Storeのデータ収集宣言 | 収集しない | — |
| Obsidianコンテナへの同期 | Existing folderで対応 | Pick External Folderで対応 |
| Shortcuts連携 | あり | 限定的 |
Möbius Syncの公式FAQでは、外部フォルダ機能について次のように警告しています。
This feature is DANGEROUS ... there is a chance data corruption or data loss can occur
SyncTrainも別アプリのコンテナへ書き込む点は同じです。
そのうえで、無料で使えて、MPL-2.0でソースがすべて公開され、開発も続いていることが決め手になりました。
導入時点の最新版はv2.6.77で、公開日は2026年5月27日でした。
みなさんそれぞれ基準はあると思うので、価格やソース公開、Shortcuts連携などを比較して選んでみてください。
前提の構成
私の環境では、自宅サーバーでSyncthingが動いており、Windows PCとAndroidスマホはすでに同期済みです。
今回のiPadも、Windows PCやAndroidスマホとは直接つながず、自宅サーバーだけに接続しました。
構成は、どの端末も自宅サーバーとだけつながるスター型です。
- Windows PC ⇔ 自宅サーバー
- Androidスマホ ⇔ 自宅サーバー
- iPad ⇔ 自宅サーバー(今回追加)
iPadから自宅サーバーへの接続にはTailscaleを使っています。
TailscaleのIPアドレスは100.x.x.xのような形式で、SyncTrainに直接アドレスを追加する場合はtcp://100.x.x.x:22000のように指定します。
Syncthing自体の導入は、Obsidian SyncをSyncthingで無料代替する方法にまとめています。
Tailscaleの導入は、Tailscaleで自宅サーバーに外から安全にアクセスするをご覧ください。
それでは、iPadを追加する手順を紹介していきたいと思います。
セットアップ手順
1. iPadにTailscaleをインストールする
最初にiPadへTailscaleをインストールし、ログインして自分のtailnetへ参加させます。
これで、iPadからTailscale経由で自宅サーバーへ接続できる状態にします。
2. Obsidianをインストールして仮ボルトを作る
iPadへObsidianをインストールし、仮のボルトを1つ作ります。
この仮ボルトは使い続けるためのものではなく、Obsidianのコンテナをファイルアプリへ表示させるための捨て駒です。
仮ボルトを作らないと、ファイルアプリの「自分のiPad」にObsidianが出てきません。
後で同期先を選ぶために必要なので、先に作っておきます。
3. ファイルアプリで空のvaultフォルダを作る
ファイルアプリを開き、「自分のiPad」→「Obsidian」と進みます。
その中に、同期先となる空のvaultフォルダを作ります。
最終的な保存場所は「自分のiPad → Obsidian → vault」です。
この場所を後ほどSyncTrainのFolder typeで指定します。
4. SyncTrainをインストールする
iPadへSyncTrainをインストールします。
アプリ内課金はなく、無料で利用できます。
5. サーバー側でiPadを登録してフォルダを共有する
自宅サーバー側のSyncthingで、iPadをデバイスとして登録します。
続いて、既存のObsidianフォルダをiPadへ共有します。
操作にはSyncthingのWeb UIかREST APIを使います。
Web UIへTailscale経由で接続する場合は、http://100.x.x.x:8384のようなアドレスになります。
登録するデバイスIDには、iPadのSyncTrainに表示される値を使います。
6. SyncTrainへサーバーを追加する
iPadのSyncTrainで、自宅サーバーをデバイスとして追加します。
Syncthingは相互に承認する必要があるため、iPad側とサーバー側の両方で登録を完了させます。
アドレスはdynamicのままで大丈夫です。
外出先からTailscale経由で直接つなぐアドレスとして、tcp://100.x.x.x:22000のような値を追加することもできます。
7. 共有フォルダをExisting folder...で追加する
SyncTrainで「+ Add folder...」を開き、次のように設定します。
| 項目 | 設定値 |
|---|---|
| Folder ID | obsidian-vaultのような自分のフォルダID。共有オファー経由では自動入力され、変更できません |
| Folder type | Existing folder...を選び、Obsidian → vaultを指定 |
| Synchronize | All files |
| Share with | 自宅サーバー |
設定できたら、右上の「Add folder」を押します。
特に重要なのはFolder typeで、ここを既定値のまま進めるとObsidianからボルトを開けません。
理由は後の「最大の落とし穴」で詳しく説明します。
8. 初回同期を完走させる
フォルダを追加したら、SyncTrainを前面に置いたまま初回同期を進めます。
iOSではバックグラウンド実行に制約があるため、初回はアプリを開いたまま放置します。
途中で画面が消えないように、自動ロックを切っておくと確実です。
私の環境では、8,396ファイル、約480MBの初回同期が完了しました。
9. .stignoreへ競合対策を追加する
同期されたファイルの中にconflict-ignore.txtが到着したことを確認します。
確認できたら、SyncTrainの対象フォルダ設定にある「Files to ignore」を開き、.stignoreへ次の1行を追加します。
#include conflict-ignore.txt
私の環境では、このファイルでworkspace*.jsonを除外しています。
10. Obsidianの「Manage Vaults」でvaultを開く
Obsidianへ戻り、「Manage Vaults」から同期済みのvaultを開きます。
ここまで進めば、iPadで既存のObsidianボルトを閲覧できます。
11. 仮ボルトを削除する
最後に、手順2で作った仮ボルトを削除します。
仮ボルトはObsidianのコンテナを表示させるためだけに作ったものです。
私は、同期したvaultが問題なく開けることを確認してから削除しました。
最大の落とし穴:Folder typeは「Existing folder...」
私が実際に詰まったのが、フォルダ追加時のFolder typeです。
既定の「Regular folder」で追加すると同期自体は始まりますが、そのフォルダをObsidianから開けません。
Regular folderでは、SyncTrainのコンテナ内にFolder IDと同じ名前のフォルダが作られます。
たとえばFolder IDをobsidian-vaultにすると、SyncTrain側の領域にobsidian-vaultフォルダができます。
しかし、iOSのObsidianがボルトとして開けるのはObsidian自身のコンテナ内です。
そのため、SyncTrainのコンテナへ同期しても、Obsidianからはボルトとして開けません。
SyncTrainのAddFolderView.swiftでは、フォルダ追加時に次の処理が行われています。
コードの直後に日本語で説明するので、ここは読み飛ばしても大丈夫です。
if let fp = self.folderPath {
try BookmarkManager.shared.saveBookmark(folderID: self.folderID, url: fp)
try appState.client.addFolder(self.folderID, folderPath: fp.path(percentEncoded: false), ...)
} else {
try appState.client.addFolder(self.folderID, folderPath: "", ...)
}
日本語にすると、Existing folderではファイルピッカーで選んだパスがfolderPathへ入り、その場所がそのまま同期先になります。
Folder IDと同じ名前のサブフォルダは作られません。
一方のRegular folderでは、folderPathが空のまま追加されます。
その結果、SyncTrainのコンテナ内にFolder ID名のフォルダが作られます。
フォルダ名をFolder IDと一致させる必要があるのは、SyncTrainのコンテナ内へ置く場合だけです。
Existing folderでコンテナ外の場所を選ぶ場合、この制約はありません。
別のデバイスから共有されたフォルダではFolder IDを変更できませんが、Folder typeは選べます。
共有オファーを受けた場合も、Existing folder...を選んでObsidian → vaultを指定してください。
追加後は、設定画面から同期先のパスを変更できません。
間違えた場合は、対象フォルダを開き、右上の三点メニューから「folder actions」へ進んで削除し、正しい設定で作り直します。
その他の注意点
Synchronizeは必ず「All files」にする
フォルダ追加時のSynchronizeは「All files」を選びます。
「Selected files」には、READMEに記載された次の既知問題があります。
- ローカルでファイル名を変更しても、リモートでは削除と新規作成として扱われ、名前変更が同期されません。
- リモートでファイル名を変更した場合、選択していないファイルは表示されません。
- ローカルで新しく作ったファイルが未選択だと同期されません。
Obsidianのボルト全体を同期する今回の用途では、All filesで大丈夫です。
.stignoreはSyncTrainの画面から編集する
iPadの.stignoreは、ファイルアプリから直接編集するのではありません。
SyncTrainで対象フォルダを開き、フォルダ設定内の「Files to ignore」画面から編集します。
画面内には「Ignore patterns」セクションがあり、「Add line」「Set default patterns」「Remove all patterns」「Save」の各ボタンがあります。
#include conflict-ignore.txtを追加して「Save」を押した後は、確認画面で「Apply patterns」を選びます。
「Apply patterns and clean folder」は選ばないでください。
こちらは新しい無視パターンを適用するだけでなく、無視対象になったファイルをiPadのローカルフォルダから削除します。
画像の除外はしない(iOSでは不要)
Androidでは、同期した画像がギャラリーアプリに並んでしまうため、SyncthingでAndroidだけ画像を同期させないの設定で画像を除外しています。
一方、iPadでは画像を除外していません。
iOSの写真アプリはアプリのサンドボックス内をスキャンしないため、Androidのようなギャラリー汚染が起きないからです。
バックグラウンド同期の実態
iOSでは、SyncTrainをバックグラウンドで動かし続けることはできません。
これはiOSの制約で、Möbius Syncでも同じです。
開発者が挙げている同期手段は次の4つです。
| 手段 | 内容 |
|---|---|
| 短時間バックグラウンドタスク | 最大30秒。アプリ起動の30分後以降に要求され、低電力モードでは動きません |
| 長時間バックグラウンドタスク | 最大5分。外部電源とインターネットの両方へ接続している場合だけ動きます |
| 継続バックグラウンドタスク | iOS 26以降で最大1時間。アプリ内で明示的にタップして開始する必要があります |
| Shortcuts連携 | ループさせて同期を繰り返します |
どの手段も、実際のスケジュールと実行時間はiOSが決めるため、動作の保証はありません。
SyncTrain側には、バックグラウンド同期に関する3つのトグルがあります。
Shortcutsを組まない場合は、この設定に任せることになります。
| トグル | 内容 |
|---|---|
| While charging (long) | 充電中の長時間同期 |
| While on battery (short) | バッテリー駆動時の短時間同期 |
| Briefly after leaving app | アプリを離れた直後の短時間同期 |
Obsidianと組み合わせる方法としては、Shortcutsのオートメーションも紹介されています。
まず「Rescan folder」→「Synchronize for a while」の順に実行するカスタムショートカットを1つ作ります。
次に、Obsidianを開いたときと閉じたときの2つのオートメーションから、そのショートカットを呼び出します。
このとき「実行前に尋ねる」はオフにします。
ただし、私はまだこのShortcutsオートメーションを組んでいません。
当面はSyncTrainにある3つのトグルへ任せています。
iPadで読むだけなら、同期が遅れても表示される内容が少し古いだけで、コンフリクトは起きません。
iPadでも編集する場合は、書く前と書いた後に同期を走らせます。
まとめ
いかがでしたか。
既存のSyncthing環境があれば、無料のSyncTrainを使ってiPadのObsidianボルトを追加できます。
私の環境では、8,396ファイル、約480MBの初回同期を完走できました。
手順をまとめると次のとおりです。
- iPadへTailscaleを入れてtailnetへ参加させる
- Obsidianを入れ、コンテナを表示するための仮ボルトを作る
- ファイルアプリで
Obsidian → vaultの空フォルダを作る - SyncTrainをインストールする
- サーバー側でiPadを登録し、Obsidianフォルダを共有する
- SyncTrainへ自宅サーバーを追加し、両方の端末で承認する
- Folder typeをExisting folder...、SynchronizeをAll filesにして共有フォルダを追加する
- SyncTrainを前面に置き、自動ロックを切って初回同期を完走させる
- 「Files to ignore」で
#include conflict-ignore.txtを追加し、「Apply patterns」を選ぶ - Obsidianの「Manage Vaults」から同期済みの
vaultを開く - 同期後、不要になった仮ボルトを削除する
最大の落とし穴は、Folder typeを既定のRegular folderのままにしないことです。
ここさえExisting folderに変えて正しい保存先を選べば、後は手順どおりに進められるかと思います。
この記事が誰かの役に立てばうれしいです。
読み込んでいます…