IPA


開発成果一覧へ





2005年度上期 未踏ソフトウェア創造事業  採択案件評価書


 



1.担当PM

   原田 康徳 (NTT コミュニケーション科学基礎研究所 主任研究員)



2.採択者氏名


開発代表者

川谷 宗之 (神戸大学大学院 自然科学研究科 情報知能工学専攻 博士前期課程)

共同開発者

なし


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


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



4.委託金支払額


  3,965,043



5.テーマ名


  スプレッドシートと様々なシステムを接続するオープンミドルウェアの開発



6.関連Webサイト


  http://midichlorian.net/



7.テーマ概要


 
本プロジェクトでは,スプレッドシートと様々なシステムを接続するオープンミドルウェア及び,それを用いた制約スプレッドシートを開発した。また、制約スプレッドシートを実現するためにC++用の制約プログラミングライブラリの開発も行なった。ミドルウェアは、Excel との接続に重点を置いて開発を行なったが、OpenOffice.org/Calc との接続を実現するプロトタイプの開発も行なった。



8.採択理由


Excelのアドインとして,制約解消機能をExcelに追加する面白いシステムの提案である.制約解消システムは研究レベルではよく知られたものであるが,なかなか一般人に普及しているとはいえない.うまく普及させることができたら,Excelの世界が大きく変わる可能性がある.
  また,Excelの制約解消システムに限定されるのではなく,他の表計算システムを統一的な方法で拡張できるミドルウェアとして開発する点も評価できる.



9.開発目標


 本プロジェクトの目的は、種々のシステムとスプレッドシートを接続するオープンミドルウェアを実現することである。
 現在、Excel に代表されるスプレッドシートシステムが広く普及し、様々な場面で利用されている。スプレッドシートシステムは、縦横に並んだセルに数値や数式を入力することで、その数式を自動的に解析し所定のセルに計算結果を反映してくれるシステムであり、直感的に分かりやすく、また汎用的なシステムである。
 このような特徴を持つスプレッドシートを種々のシステムと接続可能にすることで、スプレッドシートの応用範囲、可能性をさらに広げることができるのではないかと考えたのが、本プロジェクトの背景である。スプレッドシートと種々のシステムの接続を実現することで、具体的には以下の効果を期待する。
 様々なシステムのフロントエンドとしてスプレッドシートを利用できること、及び数値計算ライブラリ等と接続を実現することで、スプレッドシート自体の機能拡張を容易にする。
 一方、本プロジェクトが目指すスプレッドシートと種々のシステムの接続を実現する技術にはCOM、.NET、UNO などが既に存在する[2, 9, 10]。しかし、これらの技術の問題点として、COM や.NET はその開発元であるMicrosoft の製品・技術に強く依存しているという点が挙げられ、UNO はやはり開発元であるSun Microsystems の製品・技術に強く依存しているという点が挙げられる。また、3 つの技術に共通する問題点として、もともとスプレッドシートと他システムとの接続だけを目的として設計されているわけでは無いため、仕様が巨大であるという問題点が存在する。
 これらの背景、問題点を受けて本プロジェクトではターゲットをスプレッドシートと種々のシステムの接続にしぼり、
  ・可能な限り仕様がシンプルで、
  ・ベンダーフリー、かつ
  ・プラットフォームフリー
なミドルウェアの開発を行う。ただし、本プロジェクトで開発を行なうミドルウェアは、既存の技術の代替として開発するのではなく、既存の技術を用いた上で問題点を吸収する形で開発を行なう。
 一方、本プロジェクトでは提案ミドルウェアを用いて制約スプレッドシートの開発を行う。制約スプレッドシートとは、セルを変数と見立ててそのセル同士の関係(制約)をシート関数として入力することで、それらの関係を満たす値を求め、セルに反映してくれるシステムである。本プロジェクトで開発を行なう制約スプレッドシートと極めて類似したシステムとして、田村直之氏(神戸大学)らが開発しているCalc/Cream [1] が存在する。しかし、Calc/Cream には下記のような問題点が存在する。
  ・OpenOffice.org/Calc 上でのみ利用可能
  ・解の探索を行なうソルバがJava で実装されているためパフォーマンスが悪い
 これらの問題に対して、本プロジェクトではOpenOffice.org/Calc とMicrosoft/Excelの両スプレッドシートから利用できる制約スプレッドシートの実現を目指す。また、解の探索を行なうソルバをC++で実装することによりパフォーマンスの改善も目指す。



10.進捗概要


 本プロジェクトでは、スプレッドシートと種々のシステムを接続するオープンミドルウェアの開発及び、それを用いた制約スプレッドシートの実現を目指す。本項ではオープンミドルウェア、制約スプレッドシートそれぞれについての概要を述べる。


 1.オープンミドルウェア
 スプレッドシートと種々のシステムとの接続するためのオープンミドルウェアを開発する。開発ミドルウェアに対し、下記の項目を基本要求として設定し、開発を行う。
  ・汎用的
  ・ベンダーフリー
  ・プラットフォームフリー
 以下で、上記各項目についてより具体的に述べ、その実現方法、達成状況について述べる。システムの構成を図1 に示す。

 ・汎用的
 本プロジェクトでは、開発するミドルウェアによって数値計算ライブラリ、HTTP service、Web Service 等種々のものをスプレッドシートと接続可能にすることを狙う。しかし、

 

図1: Architecture

 

 それらのシステムが使用する通信プロトコル、送受されるデータ形式はそれぞれ異なるため、その差異を吸収しなければならない。そこで、まず通信データ形式をXML 形式に限定することにする。さらに、XML データ構造の差異をXSL 変換によって吸収することにする。プロトコルの差異は、シンプルなDLL を実装することで吸収することにする。
 この、XSL 変換を行うXSL ファイルとDLL をひとまとめにし、プラグインと呼ぶことにする(図1 中央下部)。開発者は、プラグインを開発するだけで種々のシステムとスプレッドシートが接続可能になる。このプラグイン管理を行なうモジュールをプラグインマネージャと呼ぶことにする(図1 中央)。プラグインマネージャはC++で記述されたダイナミックリンクライブラリとして開発を行う。以上のようなシステム構成により、開発ミドルウェアの汎用性を実現する。
 本プロジェクトでは、上で述べたような構成でミドルウェアを開発し、後に述べる制約スプレッドシートとの接続を実現できた。しかし、現状では開発ミドルウェアを用いてスプレッドシートと接続先システム間で送受信を行える情報は、スプレッドシート上の値と式だけであり、ミドルウェアの応用範囲は限られてしまっている。そこで今後、画像やグラフなどの情報も開発ミドルウェアを通じて送受信できるように拡張を行う必要がある。

 ・ベンダーフリー
 スプレッドシートと他システムとの接続を実現する技術として、COM、.NET、UNOなどが既に存在する[2, 9, 10]。これら3 つの技術の問題点の1 つとして、それぞれの技術の開発もとの製品・技術に強く依存しているということが挙げられる。開発ミドルウェアでは、そのベンダー依存性を吸収することでスプレッドシートとして最も広く使われているMicrosoft/Excel(以降Excel と記す)及びOpenOffice.org/Calc(以降Calc と記す)双方から利用可能にすることを目指す。上記のようにExcel、Calc 双方から利用可能なミドルウェアを開発する上で問題になるのは、スプレッドシート上のデータを直接操作する方法がExcel とCalc で異なることである。本プロジェクトでは、シートを直接操作するモジュールを前述のプラグインマネージャから分離し、スプレッドシート上のデータを操作するモジュールはExcel のためのものとCalc のためのものを別々に開発する。これにより、開発ミドルウェアをExcel、Calc双方から利用可能にする。この、シートを直接操作するモジュールをアドイン部と呼ぶことにする(図1 左)。なお、Excel 用のアドイン部実装にはVisual Basic for Applicationsを用い、Calc 用のアドイン部実装にはOpenOffice.org Basic、及びUNO コンポーネント技術を用いる。
 本プロジェクトでは、Excel 用のアドイン部の実装を行った。また、当初は実現可能性の検証にとどめる予定であったCalc 用アドイン部も実装を行い、Windows 上で動作するCalc からは開発ミドルウェアが利用可能にすることができた。しかし、前項で述べたように現状のミドルウェアではスプレッドシート上の図やグラフを操作することができない。そこで、今後、図やグラフの操作を可能にして行きたいと考えているが、それに伴いアドイン部の機能拡張も行わなければならない。

 ・プラットフォームフリー
 前項で、開発ミドルウェアをExcel とCalc の双方から利用可能にすることを目指すと述べた。しかし、Excel はWindows 上で動作するものだけでなく、Mac OS X 上で動作するものも存在する。また、Calc はWindows 上で動作するものとLinux/UNIX 上で動作するものが存在し、さらにMac OS X 上で動作させることも可能である。
 本プロジェクトでは、ミドルウェアの大半の部分をC++で開発するため、バイナリ形式ではOS に依存してしまう。しかし、ソースレベルでの依存性をおさえることでWindowsだけでなく、Linux/UNIX やMac OS X 上での利用も可能にすることを目指す。
 本プロジェクトでは、開発ミドルウェアをまずWindows 上で動作させることを目指し、実現した。次に、開発したミドルウェアのソースコードからWindows に依存したAPI の使用などを削除し、Linux/UNIX 環境への移植を行った。移植の結果、Linux/UNIX 環境でgcc によるコンパイルには成功したものの、動作までは実現しなかった。Linux/UNIX 環境での動作実現は今後の課題とした。


 2.制約スプレッドシート
 制約スプレッドシートは、スプレッドシート上のセルを変数とみなし、それらのセル同士の関係を表す式(制約)をシート関数として別のセルに入力することで、全ての関係式を満たすような値の組み合わせを求め、セルに反映してくれるというシステムである。制約スプレッドシートには下記のような応用例が考えられる。
  ・会計案の自動生成
  ・ 時間割やトーナメント表などの、組み合わせ自動生成
  ・計画問題やスケジュール問題などの最適化
 制約スプレッドシートでは、シート上に入力された条件式や値などを制約ソルバと呼ばれるシステムに渡すことで、条件を満たす値の組み合わせを求め、得られた結果をセルに反映する。本プロジェクトでは、前節で述べたミドルウェアを用い、制約ソルバとスプレッドシートを接続することで制約スプレッドシートを実現する。   
 また、制約スプレッドシート実現のために用いる制約ソルバの実装も行なう。
 開発するスプレッドシートでは、以下の機能の実現を目指す。

 ・使用できる制約
  ・+, -, *, /等の基本的な算術制約
  ・ALLDIFFERENT の様な組み合わせ制約
  ・CUMULATIVE の様なスケジューリング問題向けの制約
 ・探索機能
  ・全解探索(枚挙)
  ・最適化
 本プロジェクトでは、上記目標項目のうちCUMULATIVE 制約の実装および最適化探索の実装以外を実現することができた。今回、実装できなかった2 項目に関しては今後、実装を行って行きたい。



11.成果


 本項では、本プロジェクトで開発したミドルウェア及び制約スプレッドシートについて詳述する。


 1. Midichlorian: オープンミドルウェア
 本節では、開発したオープンミドルウェアにおける各機能、各開発項目ごとに分け、それぞれについて詳述する。なお、本ミドルウェアをMidichlorian(ミディクロリアンと発音) [8] と名付けた。以降本節では、Midichlorian という語を“開発したミドルウェア”の意味で使用する。


 1.1 XML 表現形式の定義
 10.進捗概要の1で述べたように、Midichlorian と接続先のシステム間ではXML 形式のデータによる通信を行う。そこで、開発にあたりスプレッドシート上のデータのXML 表現を定義する必要がある。一般的なスプレッドシート上に記述、配置することのできる情報には以下ようなものが存在する。

 ・セルの情報
  -値
  -数式
  -書式情報など
 ・その他
  -図形や画像など
  -グラフなどのオブジェクト
 本プロジェクトでは、上記の情報のうち値、数式のみを対象とし、XML 表現形式の定義を行った。数式に関しては、MathML [7] を用いて記述する様に定義を行なった。図2 に本プロジェクトで定義を行なったXML 表現の例を示す。
 本プロジェクトでXML 表現定義に含めなかった項目については、今後、表現方法を検討し、表現可能にしたい。

 

 1.2 アドイン部
 Midichlorian において、スプレッドシートの直接操作を行うモジュールをアドイン部と呼ぶ。本プロジェクトではMidichlorian のExcel 及び、Calc からの利用を目標とし開発を行う。しかし、スプレッドシートの直接操作を行なうアドイン部はExcel 及び、Calc それぞれに依存せざるをえない。本プロジェクトでは、アドイン部を後に述べるプラグインマネージャと切り離して開発を行うことにより、共通のプラグインマネージャに対し、Excel とCalc の双方から接続可能にする。したがって、アドイン部はExcel 用とCalc 用の2 つを実装する。
 プラグインマネージャは、具体的には以下の機能を提供する。
  ・シート上の値、式を読み取り、1.1 節で述べたXML 形式への変換を行う(図2)。
  ・プラグインマネージャに接続し、上記のXML データを渡す。
  ・プラグインマネージャから処理結果のXML データを受け取り、シートへ反映する。
  ・上記一連の処理を制御するためのGUI を提供する(図3)。
  ・Midichlorian 特有の宣言をシート上に記述可能にするための、シート関数を提供する。
 以下で、上記項目のうちアドイン部が提供するGUI およびシート関数について詳しく述べる。

 

図2: スプレッドシートのXML 表現例

 

 アドイン部が提供するGUI
  アドイン部が提供するGUI であるツールバーのスナップショットを図3 に示した。ユーザはこのツールバーを操作することによりMidichlorian を用いた一連の処理を制御することができる。ツールバーを用いたMidichlorian の操作の流れを下記に記述する。


 1. まず最初に、ユーザはツールバーの1 番左側にあるボタンを押すことで、接続先システムにシート上のデータを渡し、もし、あれば最初の結果を受け取る。


 2. 次に、左から2 番目の結果を何度か押すことで、他の結果を順に取得することができる。


 3. もし現在受け取っている情報を破棄し、接続前の状態に戻す場合には左から3 番目のボタンを押す。この際、現在接続しているシステムからは切断される。

図3: アドイン部が提供するツールバー

 

 4. 現在取得してる結果を確定し、接続先システムと切断する場合には左から4 番目のボタンを押す。Excel 版のツールバーにあるドロップダウンメニューは、接続先システムの選択に使用される。図3 では“csheet”が選択されており、“csheet”というシステムが現在の接続先システムとして設定されていることを示している。   
 Calc 版ではツールバー上にドロップダウンメニューを表示するのが困難であったため、接続先の指定にはポップアップメニューを用いた。


 アドイン部が提供するシート関数
  Midichlorian を用いて他システムと接続を行う際、シート上のどのセル範囲を接続先に送信するか、ユーザが指定できた方が都合のいい場合が存在する。アドイン部は、この接続先に送信するセル範囲の指定を行うためにMidichlorian 関数を提供する。
 一方、接続先システムに応じて開発者が独自のシート関数を定義できた方が都合がよい。これを実現するために、アドイン部はEmbed 関数を提供する。
 以下で上記2 つの関数について、さらに詳しく述べる。


 ・接続先に渡す範囲を指定するMidichlorian 関数
 他システムと接続の際、常にシート上のすべてのデータを渡すよりも、渡す範囲をユーザが指定できた方が都合が良い。これには、セキュリティ上の理由、ユーザビリティの理由、パフォーマンスの理由が考えられる。これを実現するために、アドイン部はMidichlorian 関数を提供する。ユーザは、接続先に渡したいセルの範囲をMidichlorian 関数の引数として指定することでその範囲だけを接続先に送信することができる。


 ・任意の式を記述するためのEmbed 関数
 後で述べるように、Midichlorian を用いて何らかのシステムとスプレッドシートとの接続を実現したい場合、開発者はプラグインの開発を行えばよい。さて、その際、開発者が独自のシート関数を定義したいと考える場合があるだろう。例えば、HTTP を用いた接続を行なうプラグインを開発するのであればURL という関数を定義したいと思うだろうし、メールを使った接続を行うプラグインであればMailaddress という関数を定義したいと考えるかもしれない。しかし、例えばExcel に対し、シート関数を追加するためには、VBA のプログラムを書かねばならず、Calc に対し、シート関数を追加するためにはUNO コンポーネントを作成する必要がある。  
 Midichlorian では、アドイン部でEmbed と呼ばれる関数を提供することで、VBA やUNO を用いた開発を行なわなくても任意の関数を記述できるようにしている。ユーザは、Embed 関数の第一引数の本当の関数名、第二引数以降に本当の引数を記述することで、任意の関数を記述できる。たとえば、Embed(”MYFUNC”,1, A1) と記述することで、Midichlorian ではMYFUNC(1, A1) と解釈し、接続先に渡す。

 1.3 プラグインマネージャ
 Midichlorian を利用してスプレッドシートと他のシステムを接続するためには、接続先システムに応じたプロトコル、データ形式を用いて接続する必要がある。 Midichlorianではこれをプラグインで行なう。したがって、Midichlorian を用いて何らかのシステムとスプレッドシートとの接続を実現するためには、プラグインを開発し、Midichlorian に組み込めばよい。プラグインは次のファイルから構成される。
 ・決められた型を持つ4つのAPI を実装したダイナミックリンクライブラリ
 ・API の関数名などを記述したプラグイン定義XML ファイル
 ・スプレッドシートをXML 化したデータを、接続先システムに応じたXML に変換するXSL ファイル
 ・接続先システムの処理結果を表すXML データをスプレッドシートのXML 表現に変換するXSL ファイル
 このプラグインの管理を行い、スプレッドシート側からの要求に応じて適切なプラグインを用いて他システムと接続を行うモジュールがプラグインマネージャである。プラグインマネージャは次のような処理を行う。
 ・アドイン部から渡されたスプレッドシートのXML 表現をプラグインが持つXSL で変換する。
 ・プラグイン定義ファイルを元に、XSL で変換されたXML をダイナミックリンクライブラリに渡す。
 ・ダイナミックリンクライブラリから返された結果をXSL で変換する。
 ・アドイン部へ処理結果のXML データを渡す。

 

 2.CSheet: 制約スプレッドシート
 本節では、Midichlorian を用いてスプレッドシートと制約解消システムを接続することにより、実現した制約スプレッドシートについて述べる。制約スプレッドシートとはスプレッドシート上で制約プログラミングを行うものである。
 制約スプレッドシートの説明を容易にするために、本章ではまず制約プログラミングについて述べる。次に、制約スプレッドシート実現のために実装したC++上の制約プログラミングライブラリCream++について述べる。最後に、Cream++ [4] と接続をするためのプラグインについて述べ、成果として得られた制約スプレッドシートについて、問題記述方法の例などを取り上げながら記述する。
 なお、本開発で実現した制約スプレッドシートをCSheet(シーシートと発音)と名づけた。本報告書では、「開発した制約スプレッドシート」の意でCSheet という語を用いる。

 

 2.1 制約プログラミング
 制約プログラミングとは、問題を変数と変数間の集合として定義し、後は制約ソルバに解を求めさせるという問題解決手法である。制約プログラミングの特徴をまとめると以下のようになる。
 ・制約の集合で表すことのできる問題一般を扱うため、汎用性が高い。
 ・ユーザは解法をプログラムする必要が無いため、問題のモデル化に専念しやすい。
 ・プランニングやスケジューリングなど、幅広い応用分野を持つ。
 ・処理にかかる計算量が大きい。
 近年、制約プログラミングは注目を集めており、商用の制約ソルバなども登場してきている。また最近では、ERP やSCM 等の分野で実社会の問題にも応用されてきている。

 2.2 Cream++: C++上の整数制約プログラミングライブラリ
 Cream++はC++の構文で自然な制約プログラミングを行うための整数制約プログラミングライブラリである。Cream++は、田村直之氏(神戸大学)、大西秀志氏(神戸大学)らによって開発されているJava 上の整数制約解消系Cream [3] の強い影響の下、開発を行っている。Cream++には以下のような特徴がある。


 ・C++の構文で自然に制約を記述可能
 Cream++では、演算子のオーバーロード等を活用し、C++の構文で自然に制約問題を記述することができる。Cream++を用いた制約プログラミングでは、変数はC++の変数と同様に定義することができ、変数の算術演算や等式や不等式を用いた関係制約もC++の演算子をそのまま用いることができる。これにより、制約問題記述のために新しい言語習得をする必要はなく、C++の知識があれば容易に制約プログラミングを行なうことができる。また構文エラー等の検出はC++のコンパイラに任せることができる。Cream++を用いて鶴亀算の記述を行なった例を付録A に掲載した。


 ・XML インターフェイスを持つ
 Cream++はXML インターフェイスを持つため、Web サービス等のXML データを内部で用いるシステムとの親和性も高い。またCream++では他の処理系との連携も考慮し、数式の表現にはMathML [7] を用いている。これにより、他の数式処理系などで処理した結果をMathML で受け取り、XSLT などで変換を行ない、Cream++で制約問題として解くなどの連携が容易になると考えられる。


 ・ソースレベルで処理系依存がほとんどない
 Cream++では、できるだけANSI C++に準拠し開発を行った。また、OS やコンパイラに依存するAPI も一部を除き使用しておらず、移植性が高い。また、前述のXML インターフェイス実装のためにはXerces-C++ [12] およびXalan-C++ [11]を用いており、MSXML のように処理系に依存したライブラリ等の使用も極力避けた。現時点で動作が確認されている処理系のリストを付録C に掲載した。


 ・小数定数をそのまま利用可能
 Cream++は整数制約プログラミングライブラリであるため、変数の領域(ドメイン)は整数に限られるが、定数に限り、小数をそのまま記述することができる。これにより消費税計算など
 なおCream++はオープンソースソフトウェアとしてAPI ドキュメントとともに無償で公開されている[4]。

 

 2.3 CSheet プラグイン
 CSheet は、本プロジェクトで開発を行ったMidichlorian を用い、前節で述べたCream++を接続することにより実現した制約スプレッドシートである。
 ここで、本プロジェクトにおけるCSheet の開発はCream++との接続をするためのプラグインを開発することに他ならないが、具体的には以下の項目(プラグインの構成要素。1.3 節参照)について開発を行った。


 ・プラグイン定義ファイルの作成
 プラグイン定義ファイルの内容を図4 に示す。このXML では、モジュール名(module)、DLL ファイル名(libfile)、DLL 中で接続に使用するAPI 名(api)及び、XML形式の相互変換に用いる2 つのXSLファイル名(sourcexsl、resultxsl)の指定を行っている。



図4: プラグイン定義XML

 

 ・スプレッドシート上のデータのXML 表現を、XML 形式で表現された制約問題に変換するXSL(source.xsl)スプレッドシートからはシート上のデータがすべてXML 化されて送られてくるため、その中から制約変数として扱うセル、制約式として扱う式を抽出する。まず、シート中に記述された式で参照されているセルをすべて変数として抽出する。次にシート中に記述された式の中でCream++が扱うことのできる式だけを抽出する。これらをまとめ、制約問題を表すXML になるように変換を行う。


 ・Cream++が発見した解を表すXML をスプレッドシートを表すXML に変換を行なうXSL(result.xsl)Cream++から返されるXML では、変数として渡された各セルのアドレスになっている。そこで、変数名をアドレス、変数への値の割り当てをセルの値となるようにXML を構築するような変換を行う。図5 はCream++が制約問題を解いた結果として返す解の例であるが、この解は変換によってセルA1 に10 が、セルD3 が2 になるようなXML に変換され、スプレッドシートに反映される。

 

 2.4 CSheet の機能
 先に述べたようにCSheet を含む制約スプレッドシートとは、セルを変数と見立ててそのセル同士の関係をシート関数として記述することによりスプレッドシート上で制約プログラミングを行うシステムである。本節ではCSheet の機能について、使用例を挙げながら述べる。



図5: Cream++が返す解の例

 

 図6 にCSheet で鶴亀算の問題を定義した例を示す。B2 及び、B3 は問題の答えを入れるための変数セルとする。C2 及び、C3 は鶴と亀それぞれの足の数を表すセルであり、(鶴の足の数) = B2 ? 2 及び、(亀の足の数) = B3 ? 4 が入力してある。B4 及び、C4 には頭の数の合計数10 と足の数の合計数24 が定数として入力されている。B5 及び、C5 にはそれぞれ頭の数に関する制約及び、足の数に関する制約が記述してある。C6 のセルには制約ソルバに渡すべきセルの範囲B2:C5 が記述されている。ここまで入力したところで図3 に示したツールバーの接続ボタン(図中左端)を押すことでこの問題の解が求まり,シートに反映される(図7)。
 次に、図8 に文房具購入案を算出する例を示す。この例で、D2:D5 の範囲が各商品の購入数であり、求めたい値である。E2:E5 の範囲には各商品ごとにかかる費用を表す式が入力されており、F1:F5 の範囲には購入数の非不条件が入力されている。G2 及び、G4 には各商品の購入に関する制約が記述されており、E6 には購入にかかる費用の合計値(各商品の購入費用の合計£ 消費税)を表す式が入力されている。また、G6 には予算に関する制約が記述されている。この状態で先ほどの例と同様に図3 の接続ボタンを押すと解が求まり、シートに反映される(図9)。



図6: CSheet の例(鶴亀算

 

図7: 図6 の問題の解

 

 ここで、E6 に入力された式に小数が含まれているところに注意していただきたい。本来、CSheet で解くことのできる問題は整数制約問題であり、小数を含む問題を扱うことができないが、CSheet では定数に限り小数を直接記入可能にしてあり、消費税計算など小数を含む経理計算等を扱う際にも自然に記述することができる。次に、先ほど求めた購入案(図9)を実施に移そうと思ったところ、あいにくボールペンが2 本しか手に入らなかったとする。そこで、とりあえず手に入るボールペン2 本は購入し、他の物品をいくつずつ購入すればよいか再計算をしたい。この場合、D2 に定数2 を入力し、再度図3 の接続ボタンを押す。すると、D2 に入力された2 という値はそのままにし、他の商品の購入案を再計算して解が反映される(図10)。
 このように、CSheet では値が入力されているセルは定数、入力されていないセルは変数として扱う。このような使用をすることにより、会計案を生成後、確定したところから値を固定し、残りを再計算するなどの利用ができる。

 

図8: CSheet の例(文房具購入リスト)

 

図9: 図8 の解



12.プロジェクト評価


 本章では、本プロジェクトで開発を行なったミドルウェアであるMidichlorian および制約スプレッドシートであるCSheet それぞれについてその特徴を述べる。

 

図10: 図8 修正後の解

 

 1. Midichlorian の特徴
 本プロジェクトで開発したMidichlorian と同様に、スプレッドシートと他のシステムとの接続を実現する技術として、
  ・COM
  ・ .NET
  ・UNO
 の3 つが挙げられる。いかにこれら3 技術とMidichlorian の相違点について述べる。まず、これら3 つの技術はもともとスプレッドシートと他システムとの接続だけを目標に設計されてはおらず、他にも様々な応用が存在する一方使用が巨大である。Midichlorianはスプレッドシートと他システムの接続にポイントを絞ることで、応用範囲は限定されものの、その仕様はかなりシンプルである。この、仕様のシンプルさが上記3 技術との相違点としてまず挙げられる。
 次に、COM と.NET はMicrosoft の技術であるため同社の製品技術の親和性は高いものの、それ以外の製品技術との連携、Windows 以外のプラットフォーム上での利用は困難である。また、UNO はSun Microsystems 社独自のコンポーネント技術であり、Calcのような同社の製品技術以外との連携はほぼ不可能である。それに対しMidichlorian はベンダーフリーを目標に設計されており、Excel 及び、Calc 両システムとの連携が可能である点が異なる。

 

 2.CSheet の特徴
 CSheet の類似技術の主なものとして
  ・Excel ソルバー
  ・Calc/Cream [1]
  ・Knowledgesheet [5]
 などが存在する。以下でこの3 技術とCSheet の相違点について述べる。
 まず、Excel ソルバーとの相違点としてCSheet では制約の記述や変数の領域(ドメイン)の宣言等も全てシート上で行える点が上げられる。また、CSheet ではALLDIFFERENTやCONTAINSALL などのような集合に対する制約記述を行うことができる点が異なる。
 Calc/Cream は田村直之氏(神戸大学)らが開発している制約スプレッドシートである。Calc/Cream との相違点としては、Calc/Cream はCalc からの利用しかできない点がまず挙げられる。また、内部で用いている制約ソルバのCream に比べCSheet で用いているCream++の方が高速であるためシステムのパフォーマンスがCSheet の方が上である点も異なる。
 Knowledgesheet はGospal Gupta 氏(テキサス大学ダラス)らが開発したCLP(FD)のスプレッドシートインターフェイスである。Knoledgesheet は既存のスプレッドシートシステムに制約ソルバを組み込んだのではなく、スプレッドシート自体を新たに実装しているのに対し、CSheet はExcel やCalc のような既存のスプレッドシートの拡張として実装されているため、もとのスプレッドシートの機能がそのまま利用できる。また、既にExcel やCalc で作成したシートに対して制約を加えることで問題を解くことができるという点にもKnowledgesheet に比べ優位性があると言える。



13.今後の課題


 本章ではMidichlorian およびCSheet それぞれについて今後の課題、展望を述べる。

 

 1.Midichlorian
 Midichlorian に関する今後の課題は下記の通りである。


 ・ Linux/UNIX 上のCalc への移植および、Mac OS X 上のExcel、Calc への移植Midichlorian をLinux/UNIX 上のCalc と接続する方法は基本的にWindows 上のCalc との接続と同様の手法で行うことができる。そこで、Midichlorian の処理系依存をなくすことで、Linux/UNIX 環境への移植を行いたい。また、今回調査を行うことができなかったMac OS X 環境への移植方法の調査も行い、移植を実現したい。


 ・書式情報や図、グラフ等の送受を可能にする
 現在、Midichlorian を用いて接続先のシステム間で交換できる情報はセルに書かれた値と式だけである。これを拡張し、セルの初期情報や図、グラフ等の送受に対応させたい。これにより、例えばExcel で書いた図をPostscript として出力したり、Excel ではかけないようなグラフを数式処理系で描画し、Excel に表示するなどといったことが実現可能になると期待する。


 ・プラグイン開発キット
 本プロジェクトでは、極めてシンプルな仕様でMidichlorian の開発を行った。しかし、さらに開発を容易にするため、プラグイン開発キットの開発を行いたい。プラグイン開発を容易にすることでユーザの増加を期待する。

 

 2.CSheet
 CSheet に関する今後の課題は下記の通りである。


 ・扱える制約を増やす
 スケジュール問題などの定義にしばしば用いられるCUMULATIVE 制約等、CSheetがまだ対応していない一般的な制約ソルバに取り入れられている制約を追加したい。


 ・最適化問題に対応
 現在、CSheet では解の枚挙のみ対応している。今後、目的関数を最小化(最大化)するような最適化問題にも対応させたい。また、最適化問題の中には局所探索を用いなければ実質解けないような問題が存在するため、CSheet でも局所探索を利用可能にしたい。


 なお、CSheet の機能はCream++に強く依存している。そこで、上記のような課題を克服するために適宜Cream++ の機能拡張も行なわなければならない。


  ページトップへ   






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