|
複数
PC 間で簡単にデータの同期が行なえるソフトウェア
Progressync を開発した.
Progressync は
Java によって記述されているため,
Windows に限らず,
Macintosh や
Linux 上でも動作する.
Progressync を使用することによって,
2 台だけでなく
3 台以上の
PC 間で,ファイルの同期や,メールの同期,ブラウザのブックマークの同期を行なえる.また,対応するソフトウェアは,プラグインを作成することによって,自由に増やすことが可能である.
本プロジェクトでは,次の
3 つの特徴を持ったソフトウェアを開発した.
(1)
マルチプラットフォーム
Windows
だけでなく Macintosh
や Linux
上でも動作する.マルチプラットフォームを実現する技術として, Java
を使用した.
(2)
3 台以上の PC
に対応
設計の段階から,
3 台以上での同期を目指した.ただし,パフォーマンスに関しては,プロジェクト期間内では妥協し,開発目標を実現することにフォーカスした.
(3)
プラグイン形式
開発言語に
Java を使用したため,プラグインに関しても
Java で作成することにした.基本となるクラスを用意し,それを継承したクラスを作成することで,プラグインできるようにした.プラグイン作成者は,同期を取りたい個々のソフトウェアに対応したデータの読み書き部分を記述すればよく,同期のアルゴリズムなどに関しては考慮する必要がない.プラグインを利用する部分に関しては,
Java のリフレクションの機能を使用したが,性能面で問題となるところはなかった.
基本的な動作である同期は,図
1 の手順で行なう.

安達 図
1 基本的な同期の流れ
同期対象のコンピュータやアイテムを指定するためのパートナーシップ定義は
XML で行なう.
同期処理では過去の状態との比較が必要となるため,過去の状態が取得できない状態では同期が行なえない.そのため,最初に初期化処理を行い,最初の過去の状態を保存する必要がある.初期化処理には次の
3 つの方法を用意した.
[1]
マスター上書き :
一つのアイテムを指定し,そのアイテムで強制的に他のアイテムを上書き保存した上で,その状態を保存する.
[2]
和 :
各アイテムの論理和を保存する.名前が同じアイテムが存在した場合は,競合解決処理を行なう.
[3]
そのまま :
各アイテムの状態をそのまま保存する.そのため,各アイテムは一致せず,同じ状態にはならない.その後の更新処理に対してのみ同期処理が行われる.
同期処理は図
2 の手順で行なわれる.同期をするときに競合が発生した場合,競合解決処理用のクラスに処理を委譲する.競合解決処理もプラグイン形式となっており,ユーザの好みの処理を記述することができる.競合解決後,必要なデータが確定し,新規作成されたもの,または更新されたものを取得する.
データの取得を行った後,データの取得を行なったコンピュータ以外のコンピュータに対して,取得データを渡し,更新処理を行なう.たとえば,コンピュータが
3 台あり,「コンピュータ
1 」から取得した「更新データ
1 」があったとすると,「更新データ
1 」を「コンピュータ
2 」と「コンピュータ
3 」に渡し,更新処理を行なわせる.同様に,「コンピュータ
2 」の「更新データ
2 」は「コンピュータ
1 」と「コンピュータ
3 」に渡す.更新データの中には,各データに対する更新処理
( 新規作成,削除,更新のいずれか
) と,新規作成と更新の場合のデータが含まれている.これらのやり取りの後,更新情報をファイルに保存し,次回の同期時に利用する.

安達 図
2 同期処理の流れ
Progressync
は,同期対応ソフトウェアを限定せず,プラグイン形式という形を取ることにより,後から対応ソフトウェアを追加可能である.たとえば,ブラウザのブックマークとして,現在
Internet Explorer ,
Mozilla ,
Opera ,
Safari に対応しているが,他のブラウザ用のプラグインを作成することで,同期アルゴリズムを書き直すことなく,簡単に同期対応ソフトウェアを追加することができる
( 図
3) .
さらにネットワーク処理や,競合解決処理に関してもプラグイン形式を採用しているので,ユーザや開発者は自由に機能を拡張できる.

安達 図
3 プラグインによる実現

|