IPA


IPAトップ





2004年度未踏ソフトウェア創造事業(未踏ユース)  採択案件評価書


 



1.担当PM


 竹内 郁雄   (電気通信大学教授)



2.採択者氏名


 代表者

安達 宜隆  ( 東京大学大学院修士課程 )

共同開発者

なし



3.プロジェクト管理組織

  株式会社オープンテクノロジーズ


4. 委託支払金額


  2,214,034 円



5.テーマ名


  複数PC間データ自動同期ソフトウェアの開発



6.関連Webサイト


 なし



7.プロジェクト概要


 PC の値段が下がり,また仕事や学業において PC の必要性が高まったことによって,複数台の PC を利用する人が多くなってきている.特に,自宅の PC と職場の PC ,デスクトップ PC とノート PC などのように,場所によって PC を使い分ける場面が多くなっている.このような場面で問題となるのがデータの管理である.すなわち,データファイル,メールデータ,アプリケーションの設定などをユーザーがきちんと同期する必要が生じる.

 現在,データ同期のために利用可能な技術としては以下のような方法が考えられる.

(1) Windows 搭載のオフラインフォルダ

(2) インターネットのストレージを利用

(3) ソフトウェアの利用

 しかし,これらの技術はどれも一長一短があり,ユーザーのニーズを真に満足させているとは言い難い.そこで,新たな同期ソフトウェアを開発することを提案する.この新ソフトウェアの特徴は以下の通りである.

(1) 3 台以上の PC 同期を考慮

ターゲットとして 3 台以上の PC 同期を初めから考える.

(2) プラグイン形式

 同期するデータは通常のファイルだけでなく,メールデータや,アプリケーションの設定データなど,多岐にわたる.数多いアプリケーションソフトウェアに対応するためプラグイン形式を採用し,拡張性を保つようにする.

 また, I/O に関してもプラグイン形式を考える.すなわち,ローカル, LAN (SMB) FTP HTTP など,様々な通信路に対応できるようにする.

(3) プラットフォームには Java を利用

Linux などの Windows 以外での利用を考慮し, Java で開発を行なうこととする.




8.採択理由

  類似のものがたくさんある中で,どういう特色があるのか気になったが,同期させたいデータを扱うアプリケーション ( たとえばメール ) ごとにプラグインをつくるというところがユニークで面白いと思った.あまりに一般的な同期ソフトウェアよりも,オープンなプラグイン仕様により,必要なものに対してそれぞれ固有な処理を行なうことにより,きめ細かい処理ができる可能性がある.逆にそれは欠点ともなり得るので,まずどこまでうまく行くのかをしっかり示すようにしてほしい.



9.成果概要

  複数 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

 

安達 図 1 基本的な同期の流れ

 

 

 同期対象のコンピュータやアイテムを指定するためのパートナーシップ定義は XML で行なう.

 同期処理では過去の状態との比較が必要となるため,過去の状態が取得できない状態では同期が行なえない.そのため,最初に初期化処理を行い,最初の過去の状態を保存する必要がある.初期化処理には次の 3 つの方法を用意した.

 

[1] マスター上書き : 一つのアイテムを指定し,そのアイテムで強制的に他のアイテムを上書き保存した上で,その状態を保存する.

[2] : 各アイテムの論理和を保存する.名前が同じアイテムが存在した場合は,競合解決処理を行なう.

[3] そのまま : 各アイテムの状態をそのまま保存する.そのため,各アイテムは一致せず,同じ状態にはならない.その後の更新処理に対してのみ同期処理が行われる.

 同期処理は図 2 の手順で行なわれる.同期をするときに競合が発生した場合,競合解決処理用のクラスに処理を委譲する.競合解決処理もプラグイン形式となっており,ユーザの好みの処理を記述することができる.競合解決後,必要なデータが確定し,新規作成されたもの,または更新されたものを取得する.

 データの取得を行った後,データの取得を行なったコンピュータ以外のコンピュータに対して,取得データを渡し,更新処理を行なう.たとえば,コンピュータが 3 台あり,「コンピュータ 1 」から取得した「更新データ 1 」があったとすると,「更新データ 1 」を「コンピュータ 2 」と「コンピュータ 3 」に渡し,更新処理を行なわせる.同様に,「コンピュータ 2 」の「更新データ 2 」は「コンピュータ 1 」と「コンピュータ 3 」に渡す.更新データの中には,各データに対する更新処理 ( 新規作成,削除,更新のいずれか ) と,新規作成と更新の場合のデータが含まれている.これらのやり取りの後,更新情報をファイルに保存し,次回の同期時に利用する.

 

 

安達図2

 

安達 図 2 同期処理の流れ

 

 

Progressync は,同期対応ソフトウェアを限定せず,プラグイン形式という形を取ることにより,後から対応ソフトウェアを追加可能である.たとえば,ブラウザのブックマークとして,現在 Internet Explorer Mozilla Opera Safari に対応しているが,他のブラウザ用のプラグインを作成することで,同期アルゴリズムを書き直すことなく,簡単に同期対応ソフトウェアを追加することができる ( 3)

さらにネットワーク処理や,競合解決処理に関してもプラグイン形式を採用しているので,ユーザや開発者は自由に機能を拡張できる.

 

 

安達図3

 

 

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

 








10. PM評価とコメント

  安達君は,マイクロソフトが 2 3 年前に始めた学生向けのじっくり型プログラミングコンテスト (ACM が行なっている瞬間芸的プログラミングコンテストと対照させる意味でじっくり型と呼ぶ ) の国際予選を兼ねている日本大会で, 2003 年度に 3 位入賞するなどの実績の持主である.プロジェクト期間は修士 1 年であったが,本業は 3 次元 CG とか CAD/CAM の研究であり,こういったテーマとは異なっている.すなわち,学校の外でのサイドワークとして開発を進めたことになる.未踏ユースにはこういうサイドワークでも力を十分に発揮できる人がときどきいる.

 安達君のソフトウェア開発への取組みの姿勢にはダレのない独自性を感じさせるところがある.実際, PM に対する月毎の報告にまったく抜けがなく, PM としては,プロジェクトの進行がよく把握できた.

 採択理由でも述べたように,この提案の売りは,同期を取りたい情報 ( メール,ブックマーク,テキストファイル, etc) の種類に応じて, OS や処理ソフトのたとえばファイル形式や文字コードなどの段差を埋めたきめ細かい同期が行なえる仕組みの基本をつくったことである.つまり, Java さえ動く環境であれば,基本同期メカニズムのコアと,同期に関する基本クラスが用意されているので,それを継承することによって簡単に個々のソフト向けのプラグインできるようにしたことである.最初から汎用同期プログラムをお仕着せで用意しなかったのが,将来の発展性を予感させるうまい方法論だった.これによって,単なるファイル同期を超えた「意味同期」のようなものが可能になったと思う.

Progressync というネーミングもグーである.今回の未踏ユースでは自分の開発したシステムに名前をつけない人が多かったのだが,このような明解で良い名前をつけることはプロジェクトの成功に少なくとも 10 %ぐらいは寄与すると思う.そういえば,昨年度の登君の SoftEther を思い出す.ネーミングが抜群によかった.

Progressync で計画された 3 つの特徴,すなわち,マルチプラットフォーム, 3 台以上の同期,プラグインはどれも実装・実証されている.もちろん,すべてが 100 %の完成度というわけではないが,短期プロジェクトでこのような同期ソフトウェアがきちんとできることを示したことは高く評価できる.そういえば, 3 台以上同期という話では,同一コンピュータ内の 3 つのディレクトリでもまったく同じ仕組みで同期が取れるという,実装のスマートさから来る余録 ( ) があり,プラグインでは,競合処理もプラグインでカスタマイズできるなどの余録が生まれている.基本設計がよければ,機能拡張の半分ほどは自然に実現されてしまっている良い例である.

 

 安達君は開発中から, Progressync GUI があまりよくない, GUI プログラミングの経験が少ないので,それに手間取っていると言っていたが,このソフトの場合, GUI は一番後回しにしてもよい.実際,そうアドバイスして, Progressync の本質部分の開発がうまく進んだ.というわけで,後回しにさせちゃった GUI はボチボチと改良してほしい.

GUI よりも先に取り組むべきことは,多くのユーザがプラグインをつくってくれるような仕掛けを磨き上げることである.見たかぎり,すでにかなりの準備はできているが,マニュアルとドキュメントの作成をさらに押し進めてほしい.ドキュメントはさっと読める入門手引の作成と,ソースの中に溶け込んだ (Knuth Web プログラミングまでいかなくても,それ的な ) コメントの整備である.実は,これもかなりのレベルまでできているので,磨き上げは時間の問題だと思われる.本人も言っているように,バグ出し,エラーメッセージ ( みんなこれを結構後回しにして,ツケが回ってくる ) が残った地道な作業かもしれない.

 安達君はこれをオープンソースで公開するつもりなので,あまり完璧主義を通さずに早い段階で公開するという戦略がある.

 安達君の緻密な段取りと,プロジェクト期間中に目標とした特徴をすべてもつソフトウェアを実証的に開発し終えた能力に対して,未踏ユースのスーパークリエータの称号を贈りたい.

 




  ページトップへ   






  Copyright(c) Information-technology Promotion Agency, Japan. All rights reserved 2004