| 
本プロジェクトでは,多様な環境で利用可能でかつユーザが容易に導入可能なファイル同期ツールpsyncの開発を行なう.これはプラットホーム,オペレーティングシステム,ネットワーク環境や通信環境等,動作環境の違いをpsync内部で吸収することにより,これらの違いをユーザに意識させることなく利用可能とするものである.
一言でファイル同期ツールと言っても,ターゲットとする環境によって,その要求仕様は大きく異なる.将来的には汎用的に利用可能なツールに仕上げるつもりであるが,本プロジェクトの開発期間内に全てをカバーするというのは現実的でないため,基本コンセプトを以下のように設定し検討を進めた.
・モバイル時代に適合したファイル同期
・メタデータ重視の効率的な同期
・ユーザが導入し易いツール
処理系には主にRubyを使用した.
(1) ファイル同期機構の設計
既存の同期アルゴリズム等を参考にしながら,ファイル更新やディレクトリ更新の監視機構並びにファイル同期機構の設計を行なった.
(1-1) モバイル時代に適合したファイル同期
オフィスや自宅の環境に適合したファイル同期のポリシーを設定する必要がある.同期パターンを登録しておき,それぞれの環境に応じて選択・実行すればよい.psyncは,「ユーザが導入し易い/使い易い」ツールたることを目指しているため,「現在の環境」をネットワーク構成情報より識別し,適用する同期パターンを自動設定する仕組みを考える.これは本プロジェクト内で実装することは難しいが,設計上は配慮しておく.
(1-2) はしょる同期
同期を取る双方でハードディスク容量等,リソースに大きな差異がある場合,完全な形の同期は難しい.対応策として,サムネイル情報やヘッダ情報等,必要最小限の情報を共有するとともに,必要な際には完全同期をとる仕組み「はしょる同期」を検討した.しかし,実装は期間内にはできないため行なわない.
(1-3) メタデータ重視の効率的な同期
当初,ファイルやディレクトリに対する各種イベントをリアルタイムで追いかける逐次型同期処理の実装を進めたが,実効性に疑問が生じたため,まず標準機能として「ユーザのリクエストに応じ同期処理」を実現することとした.これは,ファイル変更等をリアルタイムで監視し,更新ログを生成しておき,ユーザの同期リクエストに応じて,更新ログに基づく同期処理を実施する.
(1-4) ユーザが導入し易いツール
psyncは「ユーザが導入し易い/使い易い」ツールを目指しているので,ほとんどの機能をユーザ権限で行なえることとする.高機能化に伴い複雑になりがちな設定画面はシンプルさを心掛けた.
(2) ファイル同期機構の実装
(2-1) ネットワーク環境の扱い方
多様な環境に適応するため,VFS (Virtual File System) を用いるとともに,同期対象とするディレクトリはURI
(Uniform Resource Identifier) で指定することとした.また,GET/PUT型の転送ができるプロトコルをサポート対象と考えているが,終了時(3月時点)はSFTP
(Secure File Transfer Protocol) 対応で実装を進めている.なお,ファイル同期のポリシーや必要な設定情報については,「現在の環境」はifconfig,ipconfig等によりネットワーク構成情報より識別し,合致するものが自動設定される仕組みを整備する.
(2-2) 同期処理の実装
psyncでは,同期元や同期先という概念は存在しない.つまり,一方向の同期処理ではなく,同期対象として登録された領域を相互に比較し,タイムスタンプで新旧を判別し,最新の状態を維持する.
ファイル同期の流れは村崎・図2のようになる.ただし,OS等でタイムスタンプの解像度にはばらつきがあるため,注意が必要である.

村崎 図2 ファイル同期の流れ
(2-3) はしょる同期の実装
psyncは,同期を取る双方でハードディスク容量等のリソースに大きな差異がある場合,完全な同期はとらず,「はしょる同期」を実行する.たとえば,atime
(access time),ctime (change time) を活用し,最近利用されたファイルのみ同期させるといった処理や,サムネイル情報等,簡略版を共有するとともに,必要なときだけ完全同期を行なう仕組みの実装を進めている.
(2-4) 更新ログを利用した動作
psyncでは,ファイル変更等をリアルタイムで監視し,また周期的にディレクトリ走査を行なうことで,更新ログを生成・管理しておき,ユーザのリクエストに応じて更新ログに基づく同期処理を実施する.動作の概要を村崎
図3に,ファイル更新の監視の流れを村崎 図4にそれぞれ示す.
村崎 図3 更新ログを利用した動作
村崎 図4 ファイル変更の監視
(2-5) 受動的なファイル同期
psyncでは,インターネット上のストレージ等を経由して,隔離されたLAN上のコンピュータ間で,間接的な同期処理を行なうことも可能である.
|