Syncthing便利

TLDR: Google Drive経由で同期していたorgファイルなどの同期をSyncthingを使うように変更したら劇的に便利になった、という話。

最近はorg-modeを使いたおしている[1]のだが、いままではorgファイルの同期をGoogle Drive経由でやっていた。 これにいろいろ不満あった:

  1. grive2がちょいちょい動かなくなる
  2. grive2がちょくちょくビルドできなくなる or OAuth認証ができなくなる
  3. Androidとの同期が微妙

1は、Google Driveへの同期ツールとしてgrive2というのを使っているのだが、このgrive2がたまーにうごかなくなることがある。 これはほとんどの場合、ArchLinuxでgrive2は公式パッケージには入っておらずAURになっているがboostに依存している、というのが原因。boostが更新されてもAURであるgrive2はそのまま再ビルドされないままになってしまい、結果libraryが読めなくなってうごかなくなる。

2は、ビルドできなくなるのはArchLinuxが新しすぎるパッケージを採用しすぎるのが原因なきがするが、最近も最新のgrepが入ってるとビルドできない、みたいなのがあってこまった。OAuthのほうはよくわからないが(Googleのポリシー周り?)、しばらく新規認証できなくて新しいPCを同期対象にできなかったりもあった。

3はAndroidはGoogleケータイだしネイティブでGoogle Drive同期できるのでは? みたいに思うかもしれませんが、実際のファイルとして同期しようとするとサードパーティツールをつかわないとできないのですね。Autosync for Google Driveというのを使っていたが、これは無料だと1時間に1回しか同期してくれないのであった。 有料でもそんなに高くないのだけど、1,2の理由からGoogle Driveでのファイル同期は微妙だなという思いがあって購入しないままいまにいたる。

Androidでのorgの編集は

  • 出先でなにかおもいついたことをinboxにメモ(あとでPC上でグルーミング)
  • 習慣をやったよ、とマークする

だけなので、基本的に1時間syncでも問題がないというのもあった。

そんな感じでgriveをちょいちょい直して使う、みたいなことをしていたのだが、grepが原因でビルドできなくなったのをきっかけにもうこんなんやってられーん、という感じになってしまい重い腰をあげてなんとかしようとしてみた。

日常使っている端末(PC, Mac, Android)でいいかんじでファイル同期ができるものを探したところ、Syncthingがよさそうに思ったのでとりあえず評価してみた。[2] 結果、問題もなくはないが、同期の速度は爆速だし、Androidのバッテリー消費もそんなにわるくなってないように見えるし、体感としてはとてもよい。なにより、ふと気付いたらうごかなくなってる、みたいなgriveにあった不安さもないのが最高。

というわけでorgファイル以外もSyncthingをつかって同期するようになって、いまではこんな感じに。

My Syncthing sync flow
  • orgファイル同期
  • Pixel 7とPixel 3の写真同期
  • 一部ソースコードをLinuxとMacで同期

orgファイルの同期、PC/Mac間ではそこまで使い勝手に差はないが、やはりモバイルでした変更が即座にPCに反映されるのはあたりまえだけど便利だった。キッチンでコーヒーいれているときに思いついたことをinboxにいれて仕事部屋にもどってきても、その変更はまだきてない、みたいなことがなくなった。

Pixel 7と3の写真同期はまぁ単純にGoogle Photosの容量をケチってPixel 3経由でアップするようにする用。

ソースコード同期がやってみたら意外にも便利で手放せなくなった。 具体的には ~/dev/src/sync 以下が自動で同期されるようにした。基本的に進行中のprojectのソースコードを置いておく。 同期しないディレクトリも指定できるので、RustのtargetディレクトリとかNodeのnode_modulesディレクトリとかはsyncしないようにもできる。便利!

これによってキリの悪いところで作業が中断してレポジトリにpushできていなくても、そのままの状態を他の端末で再開できるようになってかなり快適になった。

ただ、問題がないわけではなくて、以下のような問題があった:

  1. Google Driveとはちがってバックアップがない
  2. Hyper-VのNATを超えられない
  3. Androidアプリが止まってることがある

1は上の図にもあるように、Windowsにもorgファイルをread onlyでコピーされるようにして、そこをGoogle Driveでバックアップする、というような運用にした。Windowsでやるのはgriveをつかいたくなかったからです。

このようにread onlyかread/writeかというような同期方法を選べるのも良いポイント。Pixel間の写真同期はあえてread/writeにしていて、こうするとPixel 3のほうのPhotoアプリでCleanup spacesするとPixel 7のほうも消えてくれて楽。

2は、自分のHyper-V VMのネットワークはNATを使って外に出ているのだが、このNATをSyncthingがうまくあつかえない模様。 Sync対象が外からみて同じグローバルIPを持っているとおなじLANにいる想定でうごいてしまうのか(?)、うまくおたがいをさがせなくなってしまう。 これは常時VPNを張っておくことで解決できた。PC/Macはもともとzerotierを使ってつながっていたので、そこにAndroidも追加する形。

3は、めったにないのだが、ごくまれにAndroidアプリが止まっていることがある。再起動したタイミングとかなのかな? まぁとにかく動作中は通知領域にアイコンがでるので、止まってる場合そのアイコンが消えているのでわりとすぐに気が付けるので良いのだけど、 ほんとはつねに通知領域にでているのはウザいので消してしまいたいのだが、そうすると止まっていることに気が付けないので消すに消せなくなっている…。これはちょっと残念ポイント。

そんなわけで良い点ばかりではないものの、トータルではとても良いものです。おすすめ。