IPA


開発成果一覧へ





2004年度第2回未踏ソフトウェア創造事業  採択案件評価書


 



1.担当PM

 

 鵜飼 文敏 (日本ヒューレット・パッカード株式会社 ヒューレットパッカード研究所 主幹研究員)



2.採択者氏名


 代表者

 江渡 浩一郎 (独立行政法人 産業技術総合研究所 情報技術研究部門 研究員)

共同開発者

 なし



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


 日本エンジェルズインベストメント株式会社



4.委託金支払額

 

  3,995,013円



5.テーマ名

 

 メール・Web・会議を垂直統合するグループウェア



6.関連Webサイト


  http://staff.aist.go.jp/k-eto/

  http://qwik.jp/qwikWeb.html    http://qwik.jp/



7.テーマ概要


 本プロジェクトでは、メール、Webによる情報共有を基盤とし、さらにハイレベルな情報共有を行う会議支援システムを開発する。
 開発者がかねてより開発を継続してきた、メイリングリストとWikiWikiWebを統合したグループ・コミュニケーション・システムqwikWebを改良し、スケジュール共有・調整などのグループウェアとしての必須の機能や、顔をつきあわせての会議を支援するためのリアルタイム編集機能、会議後の情報共有を支援するためのマルチメディア情報共有機能などを追加する。



8.採択理由

 

 本提案では、提案者が開発してきたメールとWebを統合したフリーソフトウェアのqwikWebというシステムをグループウェアとして改良していき、さらにマルチメディアデータを編集するシステムを統合したシステムの開発であり、新しいコミュニケーションインフラを提供するものとして期待できます。既にqwikWebの開発はできているので本提案の開発の遂行能力もあると判断しました。




9.開発目標


 仕事の上でもっとも重要なことは、組織内部における情報共有であると言われている。グループにおける情報共有を支援するシステムとして、グループウェアと呼ばれるシステムが存在しているが、一般に会社などの大規模な組織を対象としたものであり、小規模なグループを対象としたシステムには適切なものが存在していなかった。インターネットの発展にともない、ネット上のゆるやかなつながりを基盤とした共同作業のためのグループが多数存在するようになったが、そのようなグループは、従来の同じ組織に所属するグループとは違い、頻繁に顔をあわせるわけではない、などといった特徴の違いが生じる。
 qwikWebは、そのような小規模なグループを対象としたシステムを構築することを目標としたソフトウェアである。小規模なグループのコミュニケーションは、主としてメイリングリストを中心として行われることに注目し、メイリングリストに対してWikiWikiWebを補助的に用い、メイリングリスト上を流れるフロー型の情報と、Wiki上に蓄積されるストック型の情報とが相互に連携しあうシステムを目指した。これにより、従来のメイリングリストが持っていた利点を少しも損うことなく、Wiki上のコミュニケーションの利点を追加し、より緊密で、深いコミュニケーションを実現することを目標とする。
 本プロジェクトでは、このqwikWebに対して、さらなる現実世界の会議との融合を目指した。具体的には、会議のオーガナイズを支援するための機能や会議に必要な情報をうまく共有する機能、会議での作業を効率よくすすめるのを支援する機能などである。



10.進捗概要


 2005年2月13日、文京グリーンコート産総研オフィスで、高林哲氏主催の検索システム勉強会に参加し、検索システム利用者の立場から、どのような検索システムがあればいいのかについて議論した。
 2005年3月26日、文京グリーンコート産総研オフィスで、再び検索システム勉強会を開催し、Rast、Sennaの開発者とも意見をかわした。
 2005年5月28日、文京グリーンコート産総研オフィスで、中間報告会をおこない、最終的にどのような機能に的をしぼるかを決めた。
 2005年8月19日の未踏成果発表会で、本プロジェクトの成果を発表した。



11.成果


 本プロジェクトで開発した項目は、下記の四つの方向性に整理できる。
 ・時間軸情報共有
 ・リアルタイム情報共有
 ・マルチメディア情報共有
 ・全文検索機能

 

 時間軸情報共有

 

 WikiではWebブラウザを使って手軽にWebページを作成・編集できるので過去の情報を整理するのに適している。またqwikWebではメイリングリストも統合しているのでメイリングリストの配送およびメールに対応したWebページの作成で現在の情報を提示することもできている。本プロジェクトで開発したのは、未来の情報を扱う方法である。
 未来の情報を扱うための機能として予定表共有機能を開発した。予定を表す方法としてタイトルにタグで日付を埋めこむことにした。そしてそのような予定を提示するための機能として{{plain}}プラグインとメイリングリストへの埋め込みの2つを開発した。{{plain}}プラグインは日付をチェックして未来の予定を現在から何日先の予定かによって色を変えて表示している。{{plain}}プラグインはサイドメニューにうめこんであるので、特になにも設定しなくても予定は常にサイドメニュー上にあらわれることになる。Wikiやメールで予定日をいれて登録すると、その予定はWikiページ上にもメール上にも常に表示されるようになる。グループが使っているメイリングリストに常に予定が表示されるようになるので、予定を共有し、忘れないようにする効果がある。
 また会議などを開催する場合、常にやらないといけないのはスケジュールの調整である。本プロジェクトでは手軽なスケジュール調整機能を開発した。スケジュール調整でよくやられている方法は、候補となる日付と参加予定者からなる表を生成し、参加不可でその表を埋めていき、適切な日付を選択するというのが最も単純で一般的である。そのような方法を支援するものとして{{schedule}}プラグインを開発した。{{schedule}}をWikiページに書きこむと、これは自動的に5×5のテーブルとして表示される。それぞれの行が日付、列が参加者を表すようになっており、ブラウザから簡単に各参加予定者の参加不可情報を表に埋めていくことができる。また列、行ともに増やしたり項目名を変えたりすることも簡単にできる。入力されたデータはWikiの表としても表現されており、まとめて変更したい場合はWikiの表形式を直接編集することもできるようになっている。
 さらに、年表表示機能を実装した。これは、サイトに蓄積されたページが、どの時期に誕生し、どのような頻度で編集が行われたのかを、一覧することができる機能である。年表表示はアクションプラグインとして実装されており、URLの最後に「.time_walker」を指定すると年表が表示される。

 

 リアルタイム情報共有

 

 会議とは、事前にメール等でアジェンダを決めておき、会議中にアジェンダを見ながらそれぞれの議題について議論し、それをホワイトボードなどに用いて記録し、会議の後に誰かが議事録という形でまとめて参加者に配布するという活動である。つまり会議とは、アジェンダから議事録となる文書をみんな集って共同編集する作業であると考えることもできる。
 このような共同編集作業をよりよくサポートするための機能として、リアルタイム情報共有機能を開発した。これはWikiページのWYSIWYG編集機能とリアルタイム更新通知機能からなる。WYSIWYG編集機能によって、WikiページをHTMLによる表示の見た目のまま、編集することができる。リアルタイム更新通知機能により、同じページを見ている誰か他の人がそのページを編集したら、リアルタイムにページが更新されたことを伝えてくれる。このように、WYSIWYG編集機能と、リアルタイムページ更新通知機能とを組合せたWikiエンジンは、他にまったく例がなく、世界最初の機能である。
 WYSIWYG編集機能は、Internet Explorerにおけるcontenteditableと呼ばれる機能を使用している。ページ中のWikiテキストに対応するHTMLエレメントに、アトリビュート contenteditable="true" を埋め込んで表示させると、Internet Explorerはこのアトリビュートが指定された領域が編集可能であると認識し、その領域が編集可能となる。また、編集を行うために必要なボタン群や、更新するための保存ボタンが表示される。contenteditableを指定した領域はJavaScriptからHTMLとして取得できるため、保存ボタンがおされると、取得したHTMLをサーバに送信する。サーバは、受け取ったHTML文章をパースし、Wiki記法によるテキストに変換する。一般に、HTMLからWiki記法の変換は、情報が失われるため不完全となる。そのため常に元のWiki記法によるテキストに変換できるわけではないが、できるだけ元の文章に戻せるように工夫をしている。
 リアルタイム更新機能は{{watch}}プラグインで提供されるJavaScriptで実装されている。このプラグインが埋め込むJavaScriptは、タイマーによって一秒毎に起動する。現在監視しているページの元ファイルのハッシュ値(MD5)をサーバから取得し、そのハッシュ値と、現在保持しているページのハッシュ値とを比較し、もし違っていれば、そこで「Update!」と表示し、最新のページへのアクセスするためのリンクも提示する。

 

 マルチメディア情報共有機能

 

 テキストだけの情報では不足で、画像などの情報が重要な場合がある。特に数十枚といった多数の画像を保持する場合、その一連の画像を一度の並べてみたくなる。ホワイトボードを使って会議を進める場合、会議終了後にホワイトボードの情報は、デジカメを使って画像として保存しておくと便利である。そのような会議後の情報共有のために、一連の画像を並べてみるアルバム機能を開発した。これは{{album}}プラグインとして実装されており、このプラグインを使うとFlashによるアルバム画面を表示できるようになる。この機能は、神原啓介氏による「なめらかアルバム」を使用している。なめらかアルバムは、一つのフラッシュファイルだけで構成されており、同じディレクトリにおかれた設定ファイルを読み込み、それに従って動作する仕組みとなっている。本プラグインは、その設定ファイルを動的に生成している。
 また、地理的な関係における情報を整理する場合には、地図上に情報を埋め込めると便利だろう。例えば会議の開催場所を示す場合には、地図上の一点を示し、そこに直接情報を書けると便利である。Google Maps APIを用いて、地図上に任意の情報を配置することができる地図情報共有機能を開発した。{{map}}プラグイン記法で地図の場所と、各位置の情報をWiki記法で記述しておけば、その地点に見出しの中身を表示してくれる。
 マルチメディア情報共有として、そのような画像の共有機能、地図を元にした情報共有機能を実装した。この機能により文章以外に、画像、地図などの情報をシームレスに扱えるようになった。

 

 全文検索機能

 

  Wiki上で扱う情報が増えていった場合、その増大した情報にアクセスするための手段が必要となる。qwikWebはメイリングリストと統合されているため、ページの増える速度は通常のWikiよりも速い。Wikiサイトに蓄積された情報は大事な資産であり、過去のページにも効率的にアクセスできるような手段を提供する必要がある。そのため、Wikiエンジンへ、全文検索機能を統合した。ここでは全文検索ライブラリSennaを用い、超高速な検索機能を実現した。SennaはMySQLと統合して使用する全文検索エンジンだが、今回のプロジェクトにおいてRubyから利用するためのバインディングをSenna開発者に外注し、そのRubyバインディングでSennaエンジンを利用して実装している。{{isearch}}プラグインを使うと検索フォームが表示され、ここからSennaによるインデックスをもちいた全文検索をおこなうことができる。まだインタフェースが洗練されていないため、現状では単にその単語を含んだページへのリンクが表示されるだけである。関連度によるソート、スニペットの表示、類似文書の提示などといった高度な検索機能を今後行っていきたい。

 

 わびさび方式

 

 qwikWebは、基本的にWebサーバでもあり、ブラウザからのHTTPリクエストに対してはHTMLを生成して返答している。つまり内部でHTMLを扱う必要があるわけだが、HTMLをプログラム中でどのように扱うのかは、いろいろな方法がある。一般的には、テンプレートとなるHTMLファイルがあり、その該当する部分にプログラムが値を代入し、最終的なHTMLファイルが出来上がるという仕組みである。これを一般に、テンプレートシステムと呼んでいる。Rubyでは、erb, eRubyなど様々なテンプレートシステムが存在している。
 しかし、qwikWebでは、そのような仕組みではなく、「わびさび方式」と呼ばれる仕組みを採用している。わびさび方式とは、HTMLを、プログラム中の配列とシンボル、ハッシュ、文字列の組み合わせだけで表現する方式である。配列がHTMLのエレメントを表現し、配列の最初の要素がシンボルだった場合、そのシンボルをエレメント名とするタグとして表される。文字列は、単なる文字列として扱われる。二つ目の要素がハッシュだった場合、それはエレメントに対するアトリビュートを指定したものとして扱う。エレメントの中に他のエレメントが入った状態なども、配列の中に配列が入ったものとして、容易に表現可能である。
 このわびさび方式の大きな利点は、メタ文字のエスケープを考えなくてもすむという点である。エレメント名やアトリビュート名とその要素である文字列とを常に区別して扱うことによって、最終的なHTMLの出力から、エスケープしわすれた文字列を含んでしまっていた、などということが原理的に無くなる。これによって、XSS脆弱性を未然に防ぐことができるようになっている。
 また、このようにRubyが提供する基本的なオブジェクトの組み合わせだけでHTMLを扱うことができると、大変柔軟な操作を行うことができるようになる。例えば一旦生成したわびさびによるHTMLの表現を、その要素を解析して適当な構造のくみなおすといったことが可能である。erbなどの文字列に埋め込む方式では、一旦埋め込んだ後は一つの文字列になってしまう。それに対してわびさび方式では、なんらかの値を埋め込んだとしても、それを後から再度変更することができる。
 このわびさび方式による要素の変形を支援するために、わびさび方式に対してXPathによって一部分を取り出すという機能を追加した。これによって、div要素のclassがsectionのものを取り出す、などといった操作が容易に行える。またこのようにして得られた配列に対して破壊的に操作することによって、一つの配列をどんどん変形させていくこともできる。
 このわびさび方式は、元々は高林哲氏が、Gonzuiの開発のために発展させた技法であるが、qwikWebではその技法をさらに発展させ、わびさび方式に、コメントやDOCTYPE, CDATA, XML Declarationなどを埋め込むことができるようにした。


 以上の開発成果は http://qwik.jp/qwikWeb.html により GNU General Public Licenseのもと公開・配布している。 またこれを使ったサービスが http://qwik.jp/ で運用されている。



12.プロジェクト評価


 メール・Web・会議を垂直統合するという目標に対し、時間軸情報共有、リアルタイム情報共有、マルチメディア情報共有、全文検索機能の4つの観点で目的実現をサポートする機能を開発することができた。
 qwikWeb自体は、当プロジェクト以前から開発がすすめられているものであり以前から一般公開し、またqwik.jpでも運用されてきていた。今回の開発成果も既にとりこまれている点も評価したい。
 また、他のフリーなソフトウェアをうまく利用したり、それらに改良を加えていったりしている点もオープンソースならではの開発スタイルですばらしいと思う。



13.今後の課題


 WYSIWYG編集機能は、現状ではInternet Exploereのみで動作するが、Firefoxにおいても同等の機能は実現可能であるので、今後、FirefoxにおいてもこのWYSIWYG編集機能を利用できるようになるといいだろう。
 今回のプロジェクトでは、qwikWebはグループウェアとしての開発ははじまったばかりで、その発展はまだ途についたばかりである。いくつかの機能(全文検索機能など)についてはまだ洗練されたユーザインターフェースとは言えない。軽量なグループウェアとしての特徴を保持しつつ、それぞれの機能をより洗練化、高度化していくことが期待される。
 現在qwikWebはqwik.jpでの運用のみだけでなく、ソフトウェア自体もhttp://qwik.jp/qwikWeb.html で公開・配布しているが、qwik.jp以外での運用はあまりおこなわれていない。導入コストをさげるための工夫も必要だろう。


  ページトップへ   





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