BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ アーティクル Rich Officeクライアントアプリケーション

Rich Officeクライアントアプリケーション

ブックマーク

ここ数年、"リッチクライアント"あるいは"スマートクライアント"アプリケーションと混同されることがないように、"RIA"("Rich Internet Applications"の新しい略号)の利用と作成が語られるようになりました。(この3つの違いはほとんどないといってもいいくらいですが、流行語あるいは新3文字略語の選択や利用で、技術的な正確性が問題にならないことはありえません。)

クライアントアプリケーションに隠れているこの新しい波の原動力は単純です。つまり、AJAX風のクライアント側スクリプト記述とつながったときでさえも、かなり制限されたHTMLのユーザインタフェース機能にユーザが飽きているからです。さらに、従来の実行ファイルをインストールするためにすべてのユーザPCを訪ね回る、いわゆる"ファットクライアント"がせいぜいで、非現実的であり、最悪の場合、完全にどうしようもない状態になるため、開発者は、サーバ側に配置するメリットを失いたいとは考えていません。そんなことから、クライアントアプリケーションの新しいハイブリッド型が誕生しました。これは、ほとんどの場合クライアント層で実行されるもので、従って、ローカル処理能力をうまく活用でき、(うまく行けば)非常に多くのネットワーク横断が避けられますが、サーバが提供する何らかの方法による更新は続けられます。このようにして、"リッチクライアント"が生まれました。さもなければ"スマートクライアント"が。さもなければ"リッチインターネットアプリケーション"が。さもなければ何でも。

リッチクライアントに利用する技術は何かが、議題であり幅広く討論するための課題です。中には、Eclipseリッチクライアントプラットフォーム(RCP)を好む人がいるのは、すでに、それがクライアント側のコードベースの自動更新を管理するのに必要なツールや技術が多数組み込こまれているからですが、一方、その他の人たちは、AJAXが既存のHTMLベースのサーブレット、JSPアプリケーションを、さらに優れたリッチクライアントに変形させるのは簡単であるため、AJAXの方を好みます。さらに、この人たちは、AdobeのFlashプレーヤと対応するFlex開発キットを感情豊かに称賛し、すべてのユーザのブラウザのほとんどにFlashプレーヤがあまねく存在していることを挙げました。

知恵のあるJava開発者をずっと避け続けている、興味深い一面に、別のクライアントプラットフォームがあります。これは、すでにユーザのデスクトップのほぼすべてに存在し、ユーザインターフェイスオプションとして驚くほどの量の能力と柔軟性を提供し、リリースされたすべてに集中的な研究を経た親しみやすいユーザ対話型形式を提供しています。もちろん、Microsoft OfficeプラットフォームのWord、Excel、Outlook、PowerPoint、InfoPathのことを話しています。

Officeの拡張性

Officeを拡張する方法に関する書籍、雑誌、および記事などに使われる紙のために、多くの森林がすっかり伐採されてしまい、そして、開発者がアプリケーション構築のため、Officeを拡張したり、あるいは、利用したりできるすべての方法ための(この記事も言うに及ばず)十分な空間がInfoQウェブサーバにはほとんどありません。Office自体の知識をさらに探求しようと、この記事の最後でいくつかのリソース調査が積極的に推し進められています。Officeの拡張には、ユーザが定義したツールバーをOfficeアプリケーション内に作成したり、新しい公式を追加してExcelを拡張する機能など、それ以上の機能が含まれています。ただし、今のところ、Office2003[GLOVA1]の非常に明瞭なUI要素である、スマートタグの1つに焦点を当てます。

スマートタグ

スマートタグは、Word内の単語の下に現れる紫の点線、あるいは、Excelのセルの右肩に現れる紫の三角形と、マウスをその上辺りに置くと現れる小さな"i"ボタンのことで、その言葉に関連するコンテキストメニューのどれかに重ねて、クリックすることができます。たとえば、Wordで916-555-1212のような電話番号と打ち込んだとき、ドロップダウンメニューには"アドレス帳に追加"があり、この電話番号をOutlookのアドレス帳に追加できます。この段落に書いたことがWordでどのようになるかを下記の図1で確認ください。

基本的に、スマートタグは文章内のある文字列を認識することで動作し、認識すると、アイコンとドロップダウンメニューが使用可能になります。これは、おのおの"認識"とそれに関連する一連の"動作"として知られ、これについては後ほど詳しく説明します。この特殊なスマートタグは、Officeに搭載され、初期設定時(電源投入時ではなく)にインストールされ、WordあるいはExcelの"オートコレクト"ダイアログ("ツール"、"オートコレクトのオプション"、次に、"スマートタグ"タブを選択)を探して"電話番号"のSmartTag機能をオンにすることで有効となります。

電話番号スマートタグの選択方法については留意してください。チェックボックスをクリアすると、明らかに特殊なこのSmartTag動作が無効になってしまいます。ユーザは、"スマートタグのラベルテキスト"チェックボックスをクリアすれば、すべてのスマートタグをオフにすることができます。

ExcelやPowerPoint、あるいは他のOfficeアプリケーションでスマートタグを使うとき、正確には動作と構成がわずかに異なります。たとえば、すぐ分かりますが、Excelの構成ダイアログはわずかに異なり、すでに述べたように、スマートタグの視覚的合図はセルの角にある小さな三角形で、Wordに見られる紫の点線ではありません。

スマートタグの実装

スマートタグは2つの方法で組み込みできます。1つは、低電力であることを示していますが、非常に簡単である方法と、もう1つは、非常に多くのコードと開発時間が必要ですが、より一層の柔軟性を実現しています。いくつかの点では、Visual Studio Tools for Office(別称、VSTOといわれる)パッケージを利用して.NETにスマートタグDLL(2番目のオプション)の書き込みを表示することは、非常に興味深く刺激的ではあるのでしょうが、Officeにスマートタグが入る簡単な方法があり、かなりうまくJavaを適合させると、すなわち、"スマートタグリスト"のXMLファイルを作成するとか、単純にユーザのハードディスクの妥当な場所に保存するなどを行うと起きます。(.NET言語でスマートタグを作成する方法の詳細については、CarterとLippertによる『Visual Studio Tools for Office』を参照いただくか、VSTO2005年セカンドエディションの見本例をダウンロードしてください。)

この特別なシナリオでは、従来のSpring "JPetStore"の見本アプリケーションを利用して、Tomcatの内部で走らせるつもりで(手元のマシンに関しては、現実のシナリオの公開サーバのどこかにこれがおそらく存在すると思われます)、ExcelにJPetStore製品とアイテムのID番号を認識する方法を教えるつもりです。認識されれば、スマートタグでコンテキストメニューを表示すると、ユーザーはブラウザを立ち上げて適切な製品やアイテムをブラウザに表示することができるため、ふさわしいペットについて話していることを確認することができます。現実のシナリオでは、このタグは、ユーザがペットオンラインで注文をしているときに利用したり、あるいは、販売員が顧客と話をしているときに利用する、非常によく整えられたExcel文書のテンプレートにおそらくあると思われます。

早速本題に入りますが、スマートタグの作成を簡単にするために、Microsoftは、特別なスキーマに従う、よく知られた場所にあるXMLファイルを認識できる単一スマートタグを作成しました(スマートタグSDK資料に説明されている)。これは、正式にはMicrosoft Office スマートタグリスト(MOSTL)として知られ、利用されているXMLドキュメントは、"スマートタグリスト"と呼ばれます。1つ作るのは明らかに簡単です。C:\Program Files\Common Files\Microsoft Shared\Smart Tag ディレクトリに通常のOfficeが組み込まれていると仮定して、"LIST"と呼ばれるサブディレクトリがあり、ここで、以下に示すものに多少似ている標準XMLドキュメントを作成することができます。

少しの間、電話番号を認識するためにここで述べられている複雑な正規表現を無視すれば、以下に述べられているように、スマートタグリストファイルは非常に簡単です。

  • 2つのネームスペースの使用に留意ください。これらは、Office2003用で、これらのタグがOfficeXPで使用可能を願うのなら、異なるネームスペースURIが利用されます(資料に説明されています)。また、この資料では、"FL"の接頭字は強制であり、すべての例がこれを使うことも提案しています。たとえ、必要がなくても、一貫性以外に理由がなくても、これを使用し続けることが強く推奨されています。
  • <FL:name>は、一目瞭然のことであり、必要です。<FL:lcid>は、スマートタグが使用可能な場所を述べ、任意に選択できます(すべての場所で利用可能であるという意味)。<FL:description>は、必要です。<FL:updateable>FL:autoupdate>は、スマートタグリスト自体を更新できるようにするために利用されます。早速ですが少し使ってみましょう。 
  • <FL:smarttag>は各スマートタグを記述しています。ここのケースでは、これは、前述された正規表現サポートよりはむしろ、認証テキストと動作で成っているでしょう。"タイプ"の属性には、固有のネームスペースを含む必要がありますが、前記の形である必要があり、"フラグメント"の接尾辞(#文字の後に来る部分)が付いたURIでなければならにことを意味します。フラグメントの限定詞を忘れると、このタグが取り消されてがっかりしますが、スマートタグリストが間違っていれば、ただ単にスマートタグダイアログにこのタグが現れないことをOfficeが伝えていないためです。
  • <FL:caption>は、ドロップダウンメニューに表示されるものです。

前述されていませんが、使用するのは、 <FL:terms>(スマートタグが認証するテキスト表現が含まれる)と、<FL:actions>(ドロップダウンメニューで使用できる動作を述べている)です。その結果、これを合わせると、JPetStoreスマートタグの最初の画面で見たものが、次のようになります。

ここで、2つのスマートタグ、1つは、JPetStore製品IDの一部を認証するためのもの、もう1つは、JPetStoreアイテムIDの一部を認証するものの一覧方法について留意してください。このとき、それぞれがJPetStoreウェブアプリケーションの適当なページにブラウザウィンドウを開き、URLの"{TEXT}"プレースホルダの場所に認証された言葉を渡します。"動作"要素の"id"属性に値を指定する場合は注意してください。ここでのあらゆる重複は、何の言及もなく障害を引き起こし、原則"後勝ち"の結果になってしまいます。

このファイルを前述したサブディレクトリに保存してください。ただし、インターネットエクスプローラや、スマートタグリストが起動時に一度読み込まれ、Officeのどれか実行中のインスタンスに共有されているのかも含め、まったくOfficeプログラムが走っていないことを確認ください。Excelを起動すると、スマートタグは、オートコレクトダイアログのスマートタグタブに記載され、チェックを受けると、スプレッドシートに入力された製造あるいはアイテムIDを認証し、実行中のウェブアプリケーションの内部の適切なウェブページにアクセスするチャンスをユーザに提供します。

前記の簡単なXMLファイルに関して非常に分かりきったことのひとつに、使用可能な製品とアイテムIDのわずかな部分だけの所有をこのファイルが実行するはもちろんのこと、現在では、スマートタグリスト自体の内部に製品とアイテムIDのハードコードを持っていることです。このどちらも、現実のシナリオでは行われないでしょう。あらゆる最新の製品やアイテムIDがサーバ上で使用可能になると、スマートタグリストが自身を更新できるようにと考えています。これを実行するのは、幸いにも非常に簡単です。つまり、スマートタグをヒットするためのURLを含め、いくつかの更新情報を含めるためにスマートタグリスト変更する必要があり、そのとき、ウェブアプリケーション内部に適切なリソースを提供して、更新され動的に生成されたスマートタグリストファイルを用意します。

これを実行するため、以下に示すように、元のスマートタグリストをほんの少し変更します。

今、5分ごとに(<FL:updateFrequency>要素で与えられる場合)、Officeは、<FL:updateURL>で与えられるURLにHTTP POSTリクエストを発行します。HTTPリクエストのもう一方端でのリソースは、以下に示すものに多少似ている必要があります。

(ここで、JPS構文は簡潔にするために利用されます。これがMIMEの"text/xml"タイプを設定する限りは、おそらくStruts、あるいは、Spring MVCビューである可能性があります)。次に、これは、<FLUP:smarttaglistdefinition>要素のコンテンツのダウンロードをOfficeに伝えます。ここには、新しいスマートタグリスト定義が含まれているでしょう。ここで、<FLUP:checkpoint>要素は、スマートタグリスト要素定義の<FL:lastCheckpoint>要素に対応し、サーバでのチェックポイントがユーザマシンでのlastCheckpointを越えると、更新が発生します。ここで、プログラムの中で値を400に固定しますが(これは、以前のスマートタグリスト定義に在った0よりも明らかに大きい)、現実のアプリケーションでは、これは、値をインクリメントする可能性があり、実行中のコンテナの内部でプロダクトID、あるいは、アイテムIDが変化するたびに変化します。

要約

スマートタグができることや、Javaアプリケーション、あるいは、サービスと統合できるさまざまな方法のほんの表面を実際には論じただけです。顧客のスマートタグを書く場合、たとえば、タグが、アイテム(一覧表、価格、その他)の現行情報のために、(Springコンテナに呼びかけるRPCを通してか、あるいは、多分、局所的にサーバ上に固定されたデータや、外部方式過程によって更新されデータを調べることで)おそらく直接サーバに問い合わせる可能性があります。

また、Officeは、Wordに"検索ウィンドウ枠"などの数多くその他の拡張機能を持っています。Word文書の右側にあるウィンドウ枠は、"さまざまな検索やレファレンスサービスで調べるため"、ユーザがテキスト入力できるために利用され、これらのサービスは、基本的には特別なWSDL定義済みインターフェイスを実行するサービスです。明らかに、これらのサービスを.NETで書く必要はありませんが、おそらく、あらゆるJ2EEコンテナ内部で実行中のJAX-WSサービスだと考えられます。

単にOfficeがMicrosoftの有標製品であり、エンドユーザのマシンに利用するために使用許諾が要求されるため、開発者の中には、Officeを使うという考え方にためらう人もいるでしょう。Officeを使うポイントの一部に、多くの場合、ユーザがすでにOfficeがインストールされたものを持っている(特に、ビジネス環境では)と言う理由がありますが、Microsoftは、WordやExcel、PowerPointを目的とした無料の使用許諾不要の"ビューア"も利用できるようにし、ユーザがドキュメントを"開き、見て、プリントする"ことができようにしています。一部の例として(オンラインで買い物したユーザに領収書を送る場合など)、ドキュメントの読み込み専用ビューで、特に簡単にセーブされるもので十分な場合があります。

最後に、何人かの開発者がこれらの特徴と機能の多くをOpenOffice(オープンソースで、Office2003とOffice2007に対してプラットフォームが移植可能な競争相手である)でも利用できることを指摘するでしょう。この点についての議論は目的とするところではなく、問題となっているユーザ基盤にすでにOpenOfficeがインストールされていれば、ここでOfficeについて議論したと同じように多くのことが考慮されるべきです。ただし、OpenOfficeの開発者には失礼ながら、Microsoftには、拡張可能であるOfficeを構築することに関する多くの経験があり、特に重要なのは開発者に対して引き出せる知識やサンプルが膨大にあります。

オフィス生産性基盤選択に関わらず、リッチクライアントアプリケーションの基準として、ユーザにすでにインストールされたソフトウェア基盤を利用すれば、相当信じられないほどの強力な解決策を導き出せ、信じられないほどかなりのユーザを幸せにすることができます。Officeは、すべてのプロジェクトには正しいクライアント解ではない可能性がありますが、システムのあるクラスに対しては公正な方策であり、クライアントとしてOfficeを利用すると、最初からSwingやSWT、あるいは、AJAXで完全に何かを構築しようとするよりも似ても似つかないほど非常に簡単であると思われます。

リソース

Microsoft Visual Studio Tools for Office Second Edition Runtime (VSTO 2005 SE) (x86)
http://www.microsoft.com/downloads/details.aspx?familyid=f5539a90-dc41-4792-8ef8-f4de62ff1e81&displaylang=en
は最新でもっとも優れたVSTOパッケージで、利用にはOffice2007が必要です。注意点としては、これはVSTO拡張を行うためのランタイムのみであり、別にSDKが必要です。

Microsoft Visual Studio 2005 Tools for the 2007 Microsoft Office System
http://www.microsoft.com/downloads/details.aspx?familyid=5E86CAB3-6FD6-4955-B979-E1676DB6B3CB&displaylang=en
はVSTO 2005 SE SDKです(2つのページ間で名前がちがうにもかかわらず)。

Office 2003: Smart Tag SDK
http://www.microsoft.com/downloads/details.aspx?familyid=c6189658-d915-4140-908a-9a0114953721&displaylang=en
はスマートタグSDKのダウンロードページです。これをダウンロードする主なメリットはドキュメントを手に入れる事が出来ることです。
ドキュメントはこちらでも手に入れることが出来ます。
 http://msdn2.microsoft.com/en-us/library/bb190881(office.11).aspx
特に注目したいのは"Microsoft Office Smart Tag List"で、このドキュメントではすべてXMLフォーマットを利用しています。

Excelや Word、 Outlook、InfoPathでのC#の使い方』著 Carter氏とLippert氏、Addison-Wesley出版

Microsoft Office アプリケーションの組み込み方法』著...。少し古くさい。このテキストでは、(VSTOに対しては前身に当たる)アプリケーション拡張機能とアプリケーションのための古い方法によるVisual Basicの構築について詳しく述べられていますが、Officeアプリケーション世界のいくつか興味深い見識、特に、作り上げられたさまざまな"利用事例"や解決策が提供されていません。

原文はこちらです:http://www.infoq.com/articles/rich-office-client-applications
(このArticleは2007年2月26日に原文が掲載されました)

この記事に星をつける

おすすめ度
スタイル

BT