現在コンピューター間でのファイルの同期は主にはDropboxを使ってますが、 ある程度制限があるのとファイル自体が人のサーバーにある状態で場合によっては 余り嬉しくない事もあります。
その辺を解決してくれそうなオープンソースのSyncthingというアプリケーションを ちょっと試してみました。
Syncthing
SyncthingはGo言語で書かれたオープンソースの同期ツールで、 Windows、Mac、Linux等殆どのプラットホームで使えるアプリケーションです。 Androidのアプリケーションもあります。 ただ、iOSに関しては一応有料版の物があるのですが、 まだバギーな感じではあります。
Dropbox等と違い、中継サーバーを通さず直接端末間でファイルを同期します。 AeroFSと同じ様な感じです。
オープンソースなので色々な人が開発に参加していて、 特に、便利なGUIアプリ等の開発が第三者によって行われて公開されています。
また、特に開発者に向けてのドキュメントがとても充実していると思います。
Welcome to Syncthing’s documentation! — Syncthing v0.12 documentation
Specificationsとか、 同じような事をしたい時にとても参考になりそうです。
他の端末を探す際にはDevice IDと呼ばれるコードを使って探すのですが、 この際、LAN内だけで探すのであれば外部と一切関係せずに同期を行うことが出来ます。
インターネット上で他の端末を探す際には中継サーバーを使います。 デフォルトではhttps://relays.syncthing.net/endpointとなっています。
ただし、この中継サーバーも自前で作ることが出来ます。
Running a Discovery Server — Syncthing v0.12 documentation: https://docs.syncthing.net/users/discosrv.html
自前で作っても勿論その中継サーバー自体公開されてしまうわけですが、 まあより人に分かりづらくは出来ます(頑張ればIPを絞るとか色々出来ますし)。
ただ、そんなことをしなくても、Device ID等が他の人に漏れても 特に問題は無い、と言うスタンスです 1。
同期をするにはまず一方が他の端末のDevice IDを入力して待、 入力された方に知らせが行ってそれを了承するような作業になります。
各プラットホームでのアプリケーション
Starting Syncthing Automatically — Syncthing v0.12 documentation
これとかを見ると、コマンドをインストールしてから 特にWindowsなんかで何やら面倒な事が書いてありますが、 サードパーティー製を含むGUIアプリが色々あり、 それらを使うと簡単にセットアップして使える様になります。
これら、デスクトップ用のアプリの便利な面としては、Syncthingをバックグラウンドで 簡単に起動できる、という点と Web UIをメニューバーやタスクトレイから簡単に開くことが出来る点です。
それぞれアプリのGUI自体からも設定が出来たりはしますが、 Web UIがかなりきちんと作られている上、 多言語対応していて日本語もきちんとしたものがあるので 設定などはWeb UIから行うのが便利かと思います。
Windows
WindowsではSyncthing-GTKが使いやすいです。
Windows10ならChocolateyにSyncthing-GTKがあるので、PowerShellから
PS > Install-Package syncthing-gtk
でも入れられます。
Syncthing自体は入ってないので初回起動時に ダウンロードするか?みたいな事を聞かれますが、 言われたとおりにしておけば簡単に起動できるはずです。
Linux
Linux環境でもSyncthing-GTKが使えるのでデスクトップ環境ならSyncthing-GTKで。
Ubuntuとかでapt-get
が使える様なら
$ sudo add-apt-repository ppa:nilarimogard/webupd8
$ sudo apt-get update
$ sudo apt-get install syncthing-gtk
で入れられます。
CUI環境だけで使ってるサーバーみたいな物がある場合には Starting Syncthing Automatically 等に従ってCUIだけで起動させる事もできます。
Mac
Macではsyncthing-bar。
MacでHomebrewを使ってれば
$ brew cask install syncthing-bar
でインストール。
メニューバー常駐アプリで、SyncthingをStart/Stop出来ます。
Syncthing自体が入ってるので後はアプリを起動して SyncthingをStartさせるだけ。 Startさせた状態にしておくと、Macの再起動時にも自動でアプリとSyncthingが起動します。
HomebrewにはsyncthingというFormulaも用意されていてこれをbrew install syncthing
すればsyncthing
コマンドがインストールされ、
さらにServiceとして登録出来る様になります。
$ brew install syncthing
$ brew services start syncthing
GUIを使いたくない場合にはこちらでもOK。
Android
AndroidではSyncthing(syncthing-android というアプリがPlay Storeから手に入ります。
設定から常にバックグラウンドで実行、及び Wifi時のみ同期等にしておくと良いかと。
また、同期するフォルダーですが、デスクトップ版だと、
$HOME/Sync(Windowsなら/Users/user/Documents/Sync)がデフォルトのフォルダーで、
これをdefault
というIDで同期するようになっていますが、
Androidでは初期状態では
/storage/emulated/0/DCIMというフォルダーが、
nexus_5-写真というIDで、またフォルダーマスターにチェックが入った状態で
登録されていました。
フォルダーマスターにチェックが入っていると そのフォルダーについて他の端末からはREAD ONLYで変更が不可な状態になります。
DCIMというフォルダーの下にはカメラで撮った写真とかが入っているので、 Android版ではデフォルトではAndroidで撮った写真をデスクトップPCに送る、 と言った感じで使うようになっている感じです。
Syncthingは中継サーバーがあるわけではないので、もし同期しようとすると 同期するフォルダーの中身全てをローカルに持ってくる事になります。 (同期したいフォルダーやファイルを選択することは可能です。)
DropboxのAndroidアプリだと欲しいものだけ一時的に持ってくることが出来ますが、 その様な事が出来ないので容量の小さいAndroidでは基本送信専用で使ったほうが良いかな、と言う感じも。
小さいフォルダーをスマホとファイル交換専用として作るのもありかもしれません。
もし、Androidでdefault等、他の端末のフォルダーを同期したい場合には
そのフォルダーが必要になりますが、
取り敢えず、
/storage/emulated/0/syncthing/defaultというフォルダーを作ってそれを
default
というIDで登録して同期してみました。
ファイルを変更したりしてもちゃんとPCの方に反映されてることを確認できました。
試してませんが、SDカードを同期対象にしたい場合とかはちょっと面倒そうだったりはします。
Default sync folder on Android - Support / Android - Syncthing Forum
iPhone
iOSには上のリストには載っていません。
fsync という有料のアプリがあるみたいですが、使ってないですがまだちょっと完璧で無い感が 2。
Syncthing本家の方?でも作ろうとしてるみたいですが、 中々進んでないみたいです。 次のGoのバージョンでiOSに関するアップデートがあってそれがあると 簡単に今のものがコンパイルして使えそう、みたいな話もあって、それ待なのかな、と言う感じも。
iOS client: dare to beta test? - Development - Syncthing Forum
使い方
Syncthingを走らせるとWeb UIを通して設定をしたりすることが可能になります。
デフォルトではhttp://127.0.0.1:8384 を開くとこんな感じのページが出ます。
syncthing-barにもSyncthing-GTKにもOpen Web UI的なメニューがあるので そこから開けばOK。
Web UIは日本語に完全に対応しています(現時点で34程の言語に対応してる模様)。
ここで同期してるフォルダーや現在繋がっているデバイスを見ることが出来ます。
メニューにはIDを表示という項目があって、 これをクリックするとIDと対応するQRコードが出てきます。
他の端末からAdd Remote DeviceをしてこのIDを登録すると、 登録された側に
デバイスXXXが接続が求められています。新しいデバイスとして追加しますか?
みたいな表示が出るのでそこでデバイスを追加を選択すると 同期出来る様になります。
IDを登録する際に 照会者デバイスというチェック項目がありますが、 これにチェックを入れておくと登録したデバイスが他のデバイスと 同期している場合、そのデバイスとも同期できる様に情報が共有されます。 なので特に個人的に使っているだけだったら基本チェックしておいた方が良いです。
特にデバイスIDは7x8の56文字で長いのでコピペしてもよいですが、 スマホでQRコードで登録するのが簡単なので、 新しい端末を加える際、 スマホでその端末を加えてあげて、新しい端末側でスマホを紹介者デバイスにすれば 新しい端末にも全ての端末の情報が入って便利かな、と。
また、共有するフォルダーの選択では登録しようとしてる側の フォルダーの選択になりますが、 相手のデバイスにも同じ名前のIDのフォルダーがある場合、 そのフォルダーと同期を開始します。
もし、相手側に同じ名前のIDのフォルダーがない場合、相手側には フォルダーを追加のページが表示され、フォルダーパスの設定等を するようになります。
あるデバイスで新しくフォルダーを同期しようと新しいIDの物を作り、 Remote Devicesの設定から同期するフォルダーを追加 (一番下にこのデバイスと共有するフォルダーというチェックボックスがあるので そこでフォルダーを選択)すると 相手のデバイスに同じようにフォルダーを追加が表示されます。
各フォルダーの編集をクリックすると同じフォルダーの設定が面が出ますが、 ここの一番下に無視するファイル名という項目があって、 ここでパターンを入力すると対応するファイルを無視する事が出来る様になります。
Dropboxみたいに同期時にDropboxフォルダーの中から同期するフォルダーを選択、 といった形とはちょっと違いますが、 Syncthingの場合には特定のデバイス間で同期したいものがある場合は 専用のIDのフォルダーを作って同期、という感じに出来るので それはそれで便利なのかな、という感じ。
フォルダーの場所も特にどこでも構わないし全然別の場所に違うIDの物を作っても 同時に同期することも出来ます。
同期するフォルダーにした場合、そのフォルダーには.stfolderという空ファイルが出来ます。
また、フォルダーの設定でファイルのバージョン管理を指定していると .stversionsという過去ファイルを管理するためのフォルダも出来ます。
バージョン管理の方法としては
- バージョン管理をしない
- ゴミ箱によるバージョン管理
- 単純バージョン管理
- 期間別バージョン管理
- 外部バージョン管理
ゴミ箱によるバージョン管理、というのは、.stfolderをゴミ箱の様に見立て、 削除されたり変更があったファイルを.stfolderにコピーする、という感じです。 2回変更があったりした場合、最初にコピーされた物は上書きされます。
単純バージョン管理というのがこれの発展版みたいなもので、 同じく削除されたりした場合元のファイルを.stfolderにコピーしますが、 複数回分のコピーを保持します。(回数は設定可能。)
また、期間別バージョン管理も同じような管理ですが、 こちらは期間を決めて、その期間分の変更は保持しておく、と言った感じです。
最後の外部バージョン管理は自分で用意したスクリプトなどを 設定することが出来ます。
使ってみての感想的な
最初は上にも書いたとおり導入が大分面倒そう、と思ってましたが、 実際にはGUIなアプリがあってとても簡単に導入できます。
それこそDropbox等と同じレベルで設定、使用出来ると思います。
使い勝手もWeb UIが十分使えるし、日本語対応もしっかりしていて 使いやすいです。
スマフォとの同期がDropbox等と使い勝手が変わってきますが、 例えばDropboxの写真アップロード機能的な使い方としては syncthing-androidの初期設定で簡単に出来ます。
PCで使ってるファイルを同期したい、といった場合には少し注意が必要です。
また、synthing-androidではファイルを直接開く様な機能はないので、 X-plore みたいなファイラーアプリを別途使う必要があります。
SyncthingではファイルをHash化して、さらにはファイル自体は圧縮して暗号化されて送られます。 これらの作業にちょっとCPUを食うみたいで、大きなファイルを同期しようとすると CPUの使用が気になることがあるようです。
ちょっと使ってみた感じではそれなりの(数MB)のファイルを同期しようとしても CPUが目に見えて使われる感じはありませんでしたが。
Dropbox等もセキュリティーには非常に気をつけているとは思いますが、 完全に中継サーバー無しで行えるのは気分的に安心だという人も多いのでは、と。
また、LAN内だけでの共有、といった設定も出来るので より安全な共有も簡単に実現出来ます。
P2Pな接続になるので、場合によってはそのような接続が許可されてない ネットワークもあるかもしれないのでちょっと注意が必要です。 (ただ、そのような場合にはDropboxなんかの使用も許可されてない可能性が大きいかな、とも。)
P2Pなので、フォルダを同期しようとした場合、少なくとも他の1台が動いてないと 同期のしようが無いわけですが、 例えばサーバーマシンみたいな物を一台用意してそこで常にSyncthingを動かしておく、 ということも出来ます。
サーバーマシンを用意するのであれば、 ownCloudを使ってDropboxの様な環境を作ってしまう、 という手もありますが、Syncthingの方が手軽に作る事が出来ますし、 また、サーバー自体が落ちていても他の端末同士で同期することが可能という メリットも有ります。
ちょっと話がずれますが、 Dropboxでも先日Project infiniteという物が発表されてちょっと注目を集めています。 これは同期するフォルダ内にあるファイルを実際にローカルに持っていなくても ExplorerやFinder等でまるでローカルにあるように見ることが出来る、というものです。 所謂今のスマホ版のアプリと同じようなものだと思うのですが、 それがデスクトップでも出来る様になる、と。 (逆に言うとスマホで既にできてるので、出し惜しみをするほど難しい技術でも無いような気がするんですが。。。何か違うのか何か特別難しいのか。。。) まだ正式にどう提供されるかは発表されていませんが、 クラウドストレージもどんどん大きくなっているのであったら便利な機能かな、と。 また、この辺がSyncthingの様な中継サーバーを持たないものに対して 大きなメリットになるな、とも思います。
A revolutionary new way to access all your files Dropbox Business Blog
というわけで、使いやすさという点ではとても満足が行くものでした。 Windows/Mac/Linuxそれぞれで問題なく使えます。 今はまだDropboxの容量が足りているのでDropboxで良いかな、と言う感じもありますが、 Dropboxの容量が足りなくなってきたら、特にPC間でのみ同期する様なものに関しては Syncthingを使うのはありかな、という感じがします。
また、オープンソフトでアプリ等の開発もサードパーティー的な物も含めて まだまだ活発に行われてる感じなのでより便利になっていくとも思います。