Syncthing

**Syncthing** は、Windows、macOS、Linux、Android、Solaris、Darwin、BSDで利用可能な、FOSSのP2Pファイル同期アプリケーションである。このアプリケーションはローカルネットワーク内のデバイス間、あるいはインターネット経由で遠隔地のデバイス間のファイルを同期できる。データのセキュリティおよび安全性はその設計に組み込まれている。バージョン1.0は、5年間のベータテストを経て2019年1月にリリースされた。

## 技術
SyncthingはGoで記述されており、同様に自由ソフトウェアである独自の Block Exchange Protocol を実装している。

このアプリケーションはBYO型のクラウドモデルであり、ユーザー自身が稼働に必要なハードウェアを提供する。IPv6をサポートしており、IPv4ネットワーク環境ではNATパンチングおよびリレーに対応する。相互に接続するデバイスは（Introducer機能を使用しない限り）明示的な承認を必要とし、メッシュのセキュリティを高めている。すべてのデータは、デバイス間で直接転送される場合もリレー経由で転送される場合も、TLSによって暗号化される。

競合が発生した場合、古いファイルは「sync-conflict」という接尾辞（および日時）付きでリネームされ、ユーザーが同名の複数ファイルの扱いを判断できるようにする。GUIラッパーはこれらのファイルを利用し、手動操作を介さずにユーザーが競合を解決できる手段を提供できる。

効率的な同期は、メタデータや転送データ全体の圧縮、ブロックの再利用、軽量なスキャンによって実現されており、完全なハッシュが計算・保存された後に適用される。Syncthing は、リモートデバイスからの更新を処理しない送信専用および受信専用のフォルダータイプ、さまざまなファイルバージョン管理方式（ごみ箱、シンプル、段階的バージョン管理、外部プログラムやスクリプトによる管理）、およびファイル・パスの無視パターンを提供する。2種類のSHA256ハッシュ実装が現在サポートされており、起動時に短いベンチマークを行ったうえで高速な方が動的に使用される。ファイルやフォルダーの移動・リネームは効率的に処理され、データを最初から再ダウンロードせずに済むようSyncthingが自動的に最適化を行う。

## インフラストラクチャ
デバイスの検出は、プロジェクト開発者によってホストされているパブリックにアクセス可能なディスカバリーサーバ、ブロードキャストメッセージによるローカル（LAN）ディスカバリー、デバイス履歴および静的なホスト名/アドレス指定によって実現されている。プロジェクトは、パブリックサーバの代替または補助として使用できる、自身のディスカバリーサーバをホストするためのSyncthing Discovery Serverプログラムも提供している。

コミュニティによって提供されたリレーサーバのネットワークにより、異なるIPv4 NATファイアウォールの背後にあるデバイスが、第三者を介して暗号化されたデータを中継することで通信できるようになっている。このリレーはTURNプロトコルに類似しており、トラフィックはデバイス間でエンドツーエンドにTLS暗号化されている（したがって、リレーサーバであってもデータそのものではなく暗号化されたストリームしか見ることができない）。必要に応じて、パブリックリレーの有無にかかわらずプライベートリレーを設定・構成することも可能である。Syncthingは、直接接続が利用可能であることを検出した場合、自動的にリレーからデバイス間の直接接続に切り替える。

Syncthingは、プロジェクトやコミュニティのサーバに一切接続せずに使用することも可能である。アップグレード、オプトイン方式の使用状況データ、ディスカバリーおよびリレーはすべて無効化または個別に構成できるため、メッシュネットワークおよびそのインフラストラクチャ全体を、プライバシーや機密性のために閉じたシステム内で運用することが可能である。

## 設定と管理

Syncthingは、ローカルまたはリモートのいずれでもウェブブラウザを介して設定可能であり（プロキシサーバを介したアクセスにも対応している）、設定ファイルを直接編集することも可能である。RESTおよびEvents API、あるいはコミュニティによって提供されたラッパープログラムのいずれかを使用することもできる。Dockerイメージへのリンクもコミュニティ貢献ページに掲載されており、Puppet、Ansibleなどの構成管理ソリューションへのリンクも提供されている。

## 評価

*『』第456回において、ホストのは、SyncthingをBitTorrent Syncのオープンソース代替候補として称賛した。その後も第603回、第698回、第727回で言及し、第734回および第781回ではさらに詳しく取り上げた。

*『LWN』のレビュワーは次のように記している。「Syncthingは好印象を与える。開発者たちは、有能で信頼性が高く、安全で、かなりの性能を持つシステムを作るための努力をしてきたように見える。しかし彼らは、それを簡単に設定・利用できるようにする努力もしてきた――多くの自由ソフトウェアプロジェクトが失敗しがちな部分である。Syncthingは、自身のデータ同期とレプリケーションのニーズを管理したいすべての人にとって魅力的なツールである」。

## 歴史

初の公開バイナリリリース（v0.2）は2013年12月30日に行われた。

2014年10月、開発者はSyncthingのブランド名を「Pulse」に変更すると発表した。しかし、同年11月17日、開発者はSyncthingをPulseに改名しないことを決定し、ind.ieとの協力を解消した。ind.ieによるPulseは、現在では公式に認められたSyncthingのフォークとなっている。

2015年4月22日にリリースされたバージョン0.11.0では、コンフリクト処理、UIでの言語選択、CPU使用率や同期速度の改善、Windowsでの長いファイル名のサポート、ドライブがアクセス不能になった場合などの自動再起動、外部バージョン管理システムのサポートが導入された。バージョン0.11は、旧バージョンとの後方互換性がない。REST APIの変更により、0.10.x系のSyncthingクライアントは自動更新されず、当時の多くのサードパーティ統合との互換性がなかった。

0.13.0は、それ以前のバージョン（0.12.x以下）との互換性がなく、フォルダIDとラベルを分離するなどの変更が加えられた。また、ダウンロード中のファイルの一部を他のクライアントに配信できる機能が追加された。

1.0.0（コードネーム：Erbium Earthworm）は、大きな機能追加は行われなかったが、開発者によると、長年の開発と広範な利用を受けての節目であったという。メジャーバージョンが変わったものの、開発者のヤーコブ・ボルグによれば内容は0.14.55-rc.2と同一である。

1.0.0のリリースと同時に、以下のようなsemver風のバージョン管理システムが導入された。
* プロトコル非互換の変更を含む新バージョンはメジャーバージョンとする。  
* REST API、データベース、設定ファイルなどの非互換な変更を含む新バージョンはマイナーバージョンとする。  
* それ以外の変更はパッチバージョンとする。

バージョン1.1.0では、Go 1.12が採用され、それによりWindows XPおよびWindows Server 2003との互換性が失われた。

1.2.0ではQUICのサポートが導入され、自動機能が追加された。また、固定サイズの小さなブロックが非推奨となり、バージョン0.14.45以前のクライアントとの通信サポートが打ち切られた。

1.8.0では、コピーオンライトファイルシステム上でファイルの変更をどのように保存するかを指定できる実験的なフォルダオプションが追加され、のサポートも追加された。

1.9.0では、新たに`caseSensitiveFS`オプションが導入され、ケースインセンシティブなファイルシステムに対する処理を無効化できるようになった。

1.10.0では、LAN IPをグローバルディスカバリネットワークにブロードキャストするかどうかをユーザーが選択できる機能が追加された。

## 関連項目

* 
* 
* 

## 脚注

## 外部リンク
*