作成日

27 February 2009

不思議なエクスペリエンスのコラボGTDツール「Colabolo」

アドビシステムズのRIA(Rich Internet Application)実行環境である「Adobe AIR」が公開されてからおよそ1年が経過し、国内でも本格的な導入事例が増えつつあります。そのなかでも、AIRの特徴であるローカルDB(SQLite)やメッセージングをフルに活用したAIRクライアントの実装例が、イマヒマの「Colabolo(コラボロ)」です。

Colaboloは、イマヒマが2008年9月にベータ版の無償公開を開始したコラボレーションGTD(Get Things Done)ツールです。メール・クライアント風のリッチUIを備えており、Inboxやスマートフォルダ、ドラッグ&ドロップ操作などを利用して、個々の仕事を表す「課題」の作成や絞り込み、状態や優先度の設定、プロジェクトの各メンバーへの割り振りを行えます。その使い勝手は、おおよそiTunesを想像していただければよいでしょう。

このColaboloのひとつの特徴は、「デスクトップ・アプリのポータビリティと可用性」も備える点です。一般的なWebアプリケーションは、当然オンライン状態でなければ役に立ちません。しかしColaboloの場合は、唐突にLANケーブルを抜いたとしても表面上はまったく変わりなく利用でき、UIのフリーズやレスポンス低下は皆無です。もちろんメンバーとのリアルタイム連携は途絶えるものの、それ以外の機能やデータはすべて継続して利用でき、例えばネット環境のないミーティング・ルーム、または地下鉄の車内でさえ、GTDの収集や処理、分類、評価といった作業を進められます。つまりは“接続性フリー”なアプリケーションと言えます。

ローカルDB「SQLite」の活用がカギ

そもそもColaboloは、後述するように全機能がローカルDBで実装されているため、Webアプリのようにサーバやネットワークの調子もしくは混み具合によって反応が鈍くなったりダウンしたりすることはありません。このあたりの使い勝手は、WordやExcelといったデスクトップ・アプリそのものです。そしてネットワーク接続が復帰すれば、それまでの更新内容がほかのメンバーにも自動的に反映される仕組みです。

このColaboloをごく短く評するとすれば、「iTunes的なリッチUIとメッセンジャーのスピード感を持ち、Excel並にポータブルなタスク管理ツール」といったところ。この独特のエクスペリエンスを生み出すカギは、AIRのローカルDB「SQLite」の活用にあります。

SQLiteプログラミングは意外と簡単

ご存じのとおりAdobe AIRは、Flash Playerをベースとしたデスクトップ・アプリケーションの実行環境です。AIRがFlashやFlexといった既存のテクノロジーと大きく異なる点、そのひとつは、リレーショナル・データベース「SQLite」がAIRの実行環境そのものに組み込まれていることです。

例えばAIRクライアントでは、以下のようなActionScriptコードを記述することで、簡単にデータベースをオープンすることができます。

var conn:SQLConnection = new SQLConnection(); var dbFile:File = File.applicationStorageDirectory.resolvePath("foo.db"); conn.addEventListener(SQLEvent.OPEN, onDbOpened); conn.addEventListener(SQLErrorEvent.ERROR, errorHandler); conn.open(dbFile);

ここでは、ローカルPC上に保存されたデータベース・ファイルfoo.dbをオープンし、オープン処理が完了したら関数onDbOpenedを呼び出すことが記述されています。つづいて、例えば関数onDbOpenedには以下のようなコードを記述します。

var ss:SQLStatement = new SQLStatement(); ss.sqlConnection = conn; ss.text = "SELECT id, name, email, address FROM employees"; ss.execute(); for each (var record:Object in result.data) { trace(record.id, record.name); }

ここに示したように、SQL文を表すSQLStatementオブジェクトにデータベース接続とSQL文を渡したのち、executeメソッドを呼び出すだけで、SQLiteによるDB検索を実行できます。検索結果の個々のレコードはオブジェクトのかたちで取り出せるという流れです。

SQLiteのパワーをいかに引き出すか

このようにSQLiteは、1つのファイルに全データを格納するというAccessライクな軽量RDBであり、AIRクライアント内部でActionScriptコードを記述することで、比較的手軽に利用できます。その一方で、ひととおりのSQL構文やトランザクション管理をサポートし、性能的にもMySQLにそれほど引けを取りません。すなわちAIRは、クライアント単独でも動作する業務アプリケーションを、上述のような比較的シンプルなコーディングで構築できる能力を備えています。

そしてColaboloのミソは、個々のクライアントが内蔵するSQLite間を同期するレプリケーション機能と、同期のタイミングをリアルタイムに通知し合うメッセージング機能を組み合わせた「リアルタイムDB同期」にあります。これにより、それぞれのAIRクライアントは「個別のデスクトップ・アプリケーション」として完全に独立しつつも、オンライン状態では密接に連携し合って「プロジェクト単位のコラボレーション・ツール」として振る舞うのです。

ColaboloのリアルタイムDB同期は、以下の2種類のサーバによって実現されています。

  • DB同期サーバ
  • メッセージング・サーバ

このうち「DB同期サーバ」は、各メンバーのColaboloクライアントに内蔵されたSQLiteの内容を相互に同期する役割を担います。Colaboloクライアント上のユーザ操作によって何らかのデータが更新されると、DB同期サーバに対して更新データが送信される仕組みです。この同期処理はColaboloクライアントのバックグラウンドで実行されるため、サーバのレスポンス時間がUIのレスポンス性を律することはありません。

このリアルタイムDB同期のメリットはほかにもあります。例えば、DB同期サーバが「デスクトップ・アプリのバックアップ・サーバ」としても機能する点。すべてのデータがサーバ側にも保存されているため、もしクライアントPCがクラッシュした場合でも、Colaboloを再インストールするだけですべてのデータをクライアントへダウンロード可能です。すなわち可用性の面では、単純なWordやExcelのファイルよりも高いのです。また、AIR 1.5以降ではSQLiteのデータベース・ファイルは暗号化されており、かつデータ同期やメッセージングの内容も暗号化することで、WordやExcelのファイルに比べても高度なセキュリティを確保できます。こうした特徴は、Webアプリケーション譲りのメリットと言えるでしょう。

以上、本稿ではイマヒマのコラボGTDツールColaboloを軸に、AIR+SQLiteによって生み出された新しいユーザ・エクスペリエンスとそのメカニズムを紹介しました。ローカルDBが持つポテンシャルの高さを実感していただけたらなら幸いです。

コラム:イマヒマのコラボGTDツール「Colabolo」

イマヒマが2008年9月にベータ版の無償公開を開始した「Colabolo」は、メッセンジャー感覚でリアルタイムに課題(仕事)を共有できるコラボレーションGTD(Get Things Done)ツールです。ビジネス・チームの課題管理、ヘルプデスク、ソフトウェア開発、案件管理、文書のレビューや承認などのさまざまな「チームワーク」に対応し、GTDのアプローチで「さくさくお仕事」を進めるための基盤を提供します。Adobe AIRで実装されたメール・クライアント・ライクなリッチUIを備え、GTDの「処理」や「整理」での振り分け作業をInboxやスマートフォルダ、ドラッグ&ドロップを利用して手早く行えます。

更新内容はColaboloサーバを通じて瞬時にプロジェクト・メンバーに伝わるため、メッセンジャーや電話と同じスピード感覚でメンバー間の課題のキャッチボールを進められます。またGTDの「収集」のプロセスを支援する機能として、メールと課題を相互に自動変換する「メールto課題」機能や、アップロード時間ゼロ・容量無制限でドラッグ&ドロップによるファイル共有が可能な「ファイル四次元ポケット」機能を備えます。なお、商用版では1ユーザあたり月額3,600円前後での提供を検討しているとのことです。

イマヒマは、日本を拠点としてグローバルに活動するインタラクティブ・メディア・テクノロジーカンパニーです。決済ゲートウェイ「PayMe」や企業用のナレッジワーカー向けソフトウェア「JIRA/Confluence」などのビジネスを国内で展開します。これまでにはiモード版AOLインスタントメッセンジャー、Habboホテル、ハリーポッター公式モバイルサイトの立ち上げや運営の実績を持ちます。