ファイルシステムでHello World
この連載では"ファイルシステムの作り方"をご紹介します。第1回目の今回は簡単なイントロダクションと単純なHello Worldファイルシステムの作り方を説明します。次回以降で詳しい解説と本格的なファイルシステムの作り方をご紹介しようと思います。

作者 Ted Neward, 翻訳者 編集部 投稿日 2008年1月15日 午後9時44分
ここ数年、"リッチクライアント"あるいは"スマートクライアント"アプリケーションと混同されることがないように、"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を拡張したり、あるいは、利用したりできるすべての方法ための(この記事も言うに及ばず)十分な空間が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つのスマートタグ、1つは、JPetStore製品IDの一部を認証するためのもの、もう1つは、JPetStoreアイテムIDの一部を認証するものの一覧方法について留意してください。このとき、それぞれがJPetStoreウェブアプリケーションの適当なページにブラウザウィンドウを開き、URLの"{TEXT}"プレースホルダの場所に認証された言葉を渡します。"動作"要素の"id"属性に値を指定する場合は注意してください。ここでのあらゆる重複は、何の言及もなく障害を引き起こし、原則"後勝ち"の結果になってしまいます。
このファイルを前述したサブディレクトリに保存してください。ただし、インターネットエクスプローラや、スマートタグリストが起動時に一度読み込まれ、Officeのどれか実行中のインスタンスに共有されているのかも含め、まったくOfficeプログラムが走っていないことを確認ください。Excelを起動すると、スマートタグは、オートコレクトダイアログのスマートタグタブに記載され、チェックを受けると、スプレッドシートに入力された製造あるいはアイテムIDを認証し、実行中のウェブアプリケーションの内部の適切なウェブページにアクセスするチャンスをユーザに提供します。

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


スマートタグができることや、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日に原文が掲載されました)
この連載では"ファイルシステムの作り方"をご紹介します。第1回目の今回は簡単なイントロダクションと単純なHello Worldファイルシステムの作り方を説明します。次回以降で詳しい解説と本格的なファイルシステムの作り方をご紹介しようと思います。
あなたのチームが、既存アプリケーションを「シングルトンの入れ子」設計から依存性注入(DI)へ移行しようとしているなら、この論文に心引かれるでしょうが、DIへの移行は難しいことが分かっています。論文にはGoogleのJava DIコンテナ(Guice)の名を入れていますが、Javaや.NET、Python、Rubyなどにも当てはまります。
アジャイルの「自己組織化チーム」のパラダイムでは、チームのメンバに新しいスキルが要求されます。この記事では、発展しつつあるチームの自己組織化を壊さずに、新たなスキルを伝えるためのいくつかの戦略を提案します。そして、新しいスキルを身につけるのに役立つ資料のありかを提示しています。
今回の記事では、非同期ワークフローと呼ばれるワークフロー機能の面白い使用法を考察しますが、非同期ワークフローは.NETの非同期プログラミングモデルを単純化することを目的としています。
アーキテクチャは一般に、Word文書に主として見られるような極めて実体のない、ソフトウェアシステムの概念的な側面であるか、または完全に技術によって駆動されるものかのいずれかです。そのどちらも間違っています。では、どう対処すればよいでしょうか? この記事ではアイデアを説明します、そしてアプローチのキーポイントを要約します。
Werner Schuster氏が、簡単な例を示しながら、Javaのようなプロパティをメタプログラミングを使ってRubyに追加する方法を示します。
現在のRIAアーキテクチャにおいて、クライアント/サーバーの通信は重要な位置を占めています。本稿では、James WardとShashank TiwariがアドビによるオープンソースのBlazeDSメッセージングサーバーの世界へ飛び込みます。
ウィルス対策ソフトや情報漏えい防止用のソフトは、いわば影の存在です。ユーザの操作性やGUIを工夫する以上に、いかに目立たない存在となるかにその技術を注ぎ込んでいます。ここでは日立ソフトが開発した「秘文」の事例を紹介します。
No comments
返信