Internet File Synchronization


■目的

このページは、”インターネット上でファイルの共有および同期を自動あるいは手動でHTTPを使ってセキュアに行う”ことを実現するためのページです。
なぜこれが必要かというと、PDICの履歴ファイルを自宅や会社などどこのPCからでも自動的に同じ状態にしたいからです。
LAN内であればファイル同期ソフトがフリーでたくさん出ているので問題ありませんが、プロキシーのある環境からだとHTTPの標準リクエストしか使えません。

■ソフト

WebDrive(WebDAV、Webフォルダー)
散々探した挙句、ようやく見つけました。このソフトが一番いいです。
WebDAVを任意のドライブに割り当てることができます。SSLにも対応で、最低限必要な機能はすべて揃っている感じです。
強いて欠点を挙げると:
・有料($40)
・大量のファイルをuploadしているとエラーが発生(WebDAV server - apacheが悪いかもしれません)
・copyコマンドで上書きコピーするとWebDriverが妙な挙動に
・timestampが一致しない!?(WebDAV - mod_davが対応していないため)

とても作っている時間がないので、$40を払って使うことにしました。
あとは、フリーか自作の自動同期ソフトを作れば完璧です。(1日あれば作れる!)
これで自宅、外出先、職場でシームレスでファイル共有・同期が可能になります。

しかし、人間は欲深い生き物で、versioning(history)もできるようにしたいと思ってきました。
これは、WebDAV Projects の成果を期待したいと思います。

関連リンク:
mod_dav: a DAV module for Apache - Apache2.0に統合されてからはメンテされていない?(だったらそう書いてくれ〜)
WebDAV Resources JP
本家 WebDAV Resources
WebDAV-jp メーリングリスト
Apache 2.0でWebDAV

timestampが一致しない問題:
apacheのmod_davが"getmodified"propertyの変更(PROPPATCH)に対応していないため、WebDriveからtimestampの設定に行っても、server上のtimestampがuploadした時刻になってしまいます。HPのアップロードという用途であれば問題ありませんが、ファイルの共有ではあまりよくありません。
mod_davに変更を加えようかと思っていますが、みなさんはどういうふうに対処しているのでしょうか?そんな細かいことなんか気にならない大らかな人達ばかりなんでしょうか?

i-sync
インターネットを探したところ、j-sync というソフトがこの要求にぴったりのように見えるのですが、
・停止中?
・規格がオープンでない?
・プログラムがオープンでない(自由に変更できない)
・有料?
現時点では試せないので、結論が出せません。

iFolder
Novell の iFolder というものもありました。

InternetDisk
ここを見ると、JUSTSYSTEMのInternetDiskが使い物になるらしい。けど、有料サービス。。。(月額800円〜)
WebDAVを使っているらしいので、本質的にはWebDAVと同様の問題は発生するはず。

ということで、これは自作するしかないのでしょうか・・・

■案その4(今のところ本命)

・プロトコルは標準のドライブのみ(A〜Z) - fopen()で扱えるファイルのみ。WebDAVはWebDriveなどでドライブを割り当てる必要がある。
・ファイルの更新確認は、timestampのみによって行う。マルチユーザーを考える場合は、ファイルのMD5などを使用する必要がある。
・大前提
・各PCの時刻は必ずあっていること(多少の誤差はOK)
・server側のファイルを直接編集・上書きなどはしないこと(=必ず当ソフトで更新する)
・マルチユーザーは一応可能だが、現状同一ファイルの更新がタイミングによってはうまく動作しない(タイムスタンプのみで比較するため、時刻の誤差が影響する)
・機能
server上の任意のdirectoryとlocal上の任意のdirectoryとの対応付け(VSSと同じ)
自動取得、手動取得をdirectoryごとに設定可能【未】 - GUIの問題
upload/download時、ファイルごとの確認が可能(確認あり・なしの設定可能) - GUIの問題
設定をlocal 固有にするのか、server上において共通にするのか設定が可能 - GUIの問題
ファイルマスクによるupload/downloadの指定可能
1つのGUIで複数のサーバーを同時表示可能(Explorerライク) - GUIの問題
・衝突発生時
ユーザーが不要ファイルを削除、またはエディターを使ってマージすることで対処
・開発状況
GUIを除けば機能的にはほぼ完璧に動作!近日公開予定
Windows専用常駐ソフト+Perl
・将来
ディレクトリ監視→変更時自動更新(ほぼrealtimeにできる)
GUIをつける
標準のドライブだけでなく、FTPなどの他のプロトコルによるファイル転送も可能にしたい
VSSのようなツリーによるディレクトリ設定を可能にする
マルチユーザー完全対応
adhocにする(できる??)
完成度が上がったらシェアウェアとして公開し、がんがん儲ける!というのは嘘でオープンソースにします。:-)

■案その3 - 廃案

といっても、いきなりすべて作るのは大変だし、最初から独自形式であってもそのまま使えるので、次のようにした。

自作同期ソフト<-> 独自(HTTP) <-> Firewall <-> HTTP server/CGI <-> WebDAV

あとからGPLのWebDAVクライアントを組み込むことにした。
これなら独自の機能も自由に追加することが簡単にできるのでGood。

■案その2 - 廃案

やはり独自の規格では長生きできないので、WebDAV準拠を前提に。

Windowsのネットワークプレース or 自作同期ソフト(WebDAV protocol) <-> WebDAV proxy <-> Firewall <-> HTTP server/CGI <-> WebDAV

しかし、WebDAVに頼りっきり、というのもあまり気持ちがいいものではありません。。
Basic認証はなるべく使いたくない・・・

■WebDAV server + WebDriveによるシームレス(Firewall free)なファイル共有

必要なもの

WebDAV server(ご自分で用意)
WebDrive

インストール

■要件(案その1) - 廃案

・任意のファイル・フォルダーを自動的に同期できること
・任意のタイミングで同期処理を行えること
・HTTPポート80番を基本とすること
・一般的なproxyを越えられること
・セキュアであること(ユーザー認証および暗号化)
・転送に必要なデータ量は必要最小限であること(圧縮処理、ダイジェスト、差分を利用)
・基本的にフリーのリソースが使えること(例えば常時接続の自宅のサーバー)
・基本設計はOSに依存しないこと
・巨大ファイルも扱えるだけのスケーラビリティを持たせる
・基本的にサーバークライアント型であり、高速化のためP2Pも利用可能であること。(サーバーとクライアントに大きな違いを持たせない)
・(できれば)WebDAVに対応
・フォルダー単位の同期(ファイル追加を許すかどうかの設定)
・ダウンロード時共有違反のとき、再起動時に自動更新

かなり立派なスペックです。。。

これだとかなり大変なので、ひとひねりします。
・基本機能を一般ドライブにネットワークドライブとして割り当てる(一般のバックアップ・同期ツールを使用)
これでほとんどの問題は解決できる?

■作ってみました(案その1バージョン) - 廃案

とりあえずのテスト版ですが、Windows clientとHTTP server(Perl)があれば使えます。
ダウンロード、アップロードの同期タイミングの調整もできます。
HTTP proxyに対応しています。
フォルダー単位の同期はできません。
Linuxをserverにした場合、日本語ファイル名や空白など、うまく行かない場合があります。
開発環境は、C++Builder5とPerl

作成し、しばらくの間使用していましたが、今ひとつなので廃案としました。。。

■リンク

j-sync
IETF WEBDAV Working Group
@ITのWebDAV関連記事
WebDAVの解説資料(PDF)
WebDAV / Proxy Interoperability
LowLife.jp
多ノード間ファイル同期アルゴリズム(pdf)
コブテSync ATOK16のAtokSync機能(WebDAV)を一般的なサーバー(CGI)で扱えるようにする - 私と似たような悩みを持っているようだ

libgHTTP 関数リファレンス リンク張る必要なんて無いのですが・・・

google で"WebDAV" "同期"で検索すると、このページが7番目にエントリされました。^-^ 2003.7.26現在

MIME
フォームデータの送信

WinInet
184352 - HOWTO: Upload Files to the Internet Information Server - 巨大ファイルをuploadする方法(HttpRequestSendEx)

C#?
「私がJavaからC$(違ったC#)に乗り換えた10の理由」このpageと関係ないけど
「C#」という提案これも関係ない

■書籍

WebDAV関連の書籍 - まだ少ないですね・・・
WebDAV分散ファイル共有環境の作成―遠く離れた場所でも、ファイルの読み・書きができる新しいプロトコル
WebDAV入門―ダヴとXMLがつくる情報共有の未来

■アイデア - 単語テスト

自分ひとりで単語テストを行うのはやっぱり辛いもの。単語テストをみんなで共有しよう!というプロジェクト。
・自分のランキングがわかる
・他人がわからない単語を自分でテストできる

■アイデア - 履歴の共有

自分の履歴ファイルを公開・共有し、・・・

Top Page