Windows XP Embedded アーキテクチャの基本
Jon Fincher Microsoft Corporation
December 18, 2001 日本語版最終更新日 2002 年 6 月 25 日
Microsoft® Windows® XP Embedded のコラムへようこそ。11 月の終り、ラスベガスでの Devcon で発表された Windows XP Embedded のリリースは多くの注目を集めました。私たちの講演はすべて満員で (実際、立ち見も出たほどです)、体験コーナーのチュートリアルも同様に人気を呼びました。多くのユーザーと話をすることができましたが、その質問の量とレベルの高さに感心しました。イベントに参加してくれた皆さんに感謝します。
本文に入る前に、細かいことですが 1 つ指摘しておきます。メインのコラム ページに掲載されている写真は、私の同僚の Mike Hall (左) と私です。Devcon では何人かの人が私の顔に見覚えがあったようですが、私を Steve Maillet と勘違いしていました。Steve と Mike が最初の記事を書いたからです。その結果、今では自分の名前だけでなく、"Not Steve" にも返答しています。
前回のコラムで、Windows XP Embedded アーキテクチャを紹介する約束をしました。構築プロセスの詳細を説明をしながら辿っていきます。Windows XP Embedded のアーキテクチャは非常に複雑なので 1 つの記事ではとても網羅できませんが、ここでは各ツールの背後にある構成を体系的に説明します。まず最初に、通常は見ることのできないツールの一部である CMI について説明します。
CMI : 心臓部
前回の記事でも説明しましたが、Windows XP Embedded は SQL ベースのデータベースを使用してすべてのコンポーネントを束ねています。このデータベースは、ローカル/リモートの Microsoft SQL Server またはローカルの Microsoft Data Engine (MSDE) (Windows XP Embedded CD-ROM で提供) に置くことができます。これとは対照的に、Windows NT® Embedded 4.0 は単一のローカル Jet データベース .mdb ファイルを使用して、すべてのコンポーネントおよび構成を統合しています。
あるツール群からローカルとリモート両方のデータベースへのシームレスなアクセスを実現するため、また瞬時にデータベースを切り替えることを可能にするため、アーキテクチャ全体にわたってデータベース通信レイヤが必要となります。このレイヤは、CMI (Component Management Interface) と呼ばれます。CMI の主な目的は、Windows WP Embedded ツール (Target Designer、コンポーネント デザイナ、および Component Database Manager) とコンポーネント データベース (ローカル、リモート、SQL Server、または MSDE) の間の標準インターフェイスを提供することです。コンポーネント データベースの中身に関連することは、CMI にも関連します。
すべてのツールではアクティブなデータベース接続を必要とします。どのツールでも最初にアクティブなデータベース接続を CMI に要求します。データベースに接続できない場合、CMI はエラーを返し、ツールはレポートを生成します。言い換えると、データベース接続なしでは、Windows XP Embedded を使用してできることは何もありません。
CMI は、あるレベルの非同期データベース アクセスも提供します。多くの場合、これはリモート SQL Server データベースと複数のクライアントです。データベース変更に関する操作はすべて SQL で処理されるので、操作失敗イベント時にロールバックが可能です。また、CMI は "読み取り専用" と "排他的" アクセス モードを区別します。いずれかのツール (現在は Component Database Manager のみ) でデータベース内のデータを削除するには、まず排他的モードでアクセスする必要があります。ほかのツールがデータベースを開いている間は、排他的アクセスはできません。逆に排他的アクセスが許可された場合、そのアクセスが解除されるまで、ほかのツールはデータベースにアクセスできません。
こちらでもオブジェクト、あちらでもオブジェクト
注 : このセクションでは、混同しやすい 2 つの用語、コンポーネントとインスタンスを扱います。簡単に定義すると、コンポーネントはデータベース内にあるリソースおよびプロパティの一群にすぎません。コンポーネントが構成に追加されるとインスタンスと呼ばれるようになり、修正、実行、および構築が可能になります。コンポーネントはお菓子のクッキーのパターン (抜き型)、そしてインスタンスはそのパターンから作られた実際のクッキーに例えることができます。パターンに変更を加えるのは容易ではありませんが、できあがったクッキーには好きなように手を加えることができます。コンポーネントとインスタンスのこの区別は、この記事だけでなく将来の記事においても非常に重要となります。
CMI はツール用の COM サーバーであるため、すべてがオブジェクトであるという Windows XP Embedded アーキテクチャの基本を必然のものにしています。構成、コンポーネント、インスタンス、リソース、ファイル、レジストリ エントリ、リポジトリなどはすべて本質的にオブジェクトなのです。このため Windows XP Embedded アーキテクチャは、オブジェクト指向 (OO) 理念の 3 つの原則であるカプセル化、継承、および多相性を体現しています。ここでは、オブジェクト指向デザインの優れた点についての詳述は行いませんが、Windows XP Embedded アーキテクチャに関連することは説明しておく必要があります。コンポーネントに焦点を当てて説明を進めますが、その概念は Windows XP Embedded オブジェクトすべてに当てはまります。
Windows XP Embedded オブジェクトはそれぞれ独立型ユニットです。コンポーネントにはそのプロパティや内部コードが含まれ、カプセル化によってほかのオブジェクトから分離されています。
コンポーネントは、ほかのコンポーネントからプロパティを継承することができます。例として、同一のチップセットをベースとするデバイスのセットを考えてみます。SoundExplosion 1A チップセットを使用するサウンド カード ドライバを想定します。このチップセットを使用するサウンド カードは 3 つありますが、それぞれがゲーム ポート、MIDI ポート、そして SCSI インターフェイスという機能を担います。この例と同じように、基本的には同じで、違いが少ししかないコンポーネントを 3 つ個別に作成するよりも、まず基本機能をカプセル化したコンポーネントを 1 つ作成します。次に、基本機能コンポーネントを "プロトタイプ" として使用し、3 種類のコンポーネントを作成します。この 3 つのコンポーネントはプロトタイプのプロパティとリソースを継承し、それに独自のリソースを追加されたものになります。
Windows XP Embedded オブジェクトの多相性は通常、DHTML 設定とビルド スクリプトで処理されます。DHTML 構成スクリプトにより、コンポーネントのエンド ユーザーは、コンポーネント インスタンスのプロパティを動的に設定できるようになっています。その後、プロパティをビルド スクリプトで検査および修正することができます。これにより、構成ビルド中に開発エンド ユーザーのニーズに合わせてコンポーネントの動作を変更することができます。
最後に、CMI によるオブジェクト指向の結果について説明します。Windows XP Embedded の各オブジェクトにはプロパティとメソッドの一群が含まれ、オブジェクトの中にはイベントに反応できるものもあります。プロパティは、標準プロパティ (コンポーネント名、コンポーネント作成者、著作権など) と詳細プロパティ (cmiNoHelpFiles など) に分類することができます。オブジェクトのメソッドには、単にベース コンポーネントから継承したもの (基本ビルド動作など) もあれば、そのコンポーネント独自のものもあります (ユーザー インターフェイスのコア コンポーネントなどでは独自の UI 機能を実装するためビルド スクリプトと共に DHTML 構成スクリプトも含まれています)。ビルド プロセス中にイベントが発生すると、コンポーネント スクリプトによって対応することができます。
詳細プロパティには事前に定義されているものがあります。代表的なものを挙げると、cmiNoHelpFiles (ビルドから Help ファイルを削除するためにビルド スクリプトが使用)、cmiLangEnableMUI (コンポーネントをサポートする複数言語ユーザー インターフェイス (MUI) を有効にするためにビルド スクリプトが使用)、cmiProtPropList (事前定義プロパティを保護するために Target Designer が使用) などがあります。コンポーネントの詳細プロパティの内容を確認するには、Target Designer の構成にコンポーネントを追加して構成エディタでコンポーネントを選択し、詳細設定ボタンをクリックします。
オブジェクト モデルを拡張する
Windows XP Embedded のオブジェクト特性と CMI の影響は、コンポーネントとインスタンスだけに限られません。構成も CMI によってオブジェクトとして処理されます。構成の標準プロパティには、構成の名称、所有者と作者、および著作権が含まれます。構成の詳細プロパティには、ターゲット ブート ドライブ、ブート ARC パス、およびヘルプ ファイル取り込みの設定があります。これらのプロパティは、構成エディタで構成名を選択し、詳細ペインで詳細設定ボタンをクリックすることにより、Target Designer で確認することができます。
コンポーネントやインスタンスがオブジェクトであるのと同様に、それらの構成要素もオブジェクトです。コンポーネント内のファイル、レジストリ、そのほかのリソースはすべて独自のプロパティを持つオブジェクトです。これらのプロパティは、インスタンスからファイル、レジストリ データ、またはリソース アイテムの順に展開して構成エディタで確認することができます。詳細ペインでリソースをマウスの右ボタンでクリックすると、標準プロパティが表示されます。詳細ボタンをクリックすると (不思議なことに) 詳細プロパティが表示されます。同様に Extra File、Extra Registry Data、および Extra Resource のプロパティも確認することができます。グループ、パッケージ、リポジトリ、およびリポジトリ セットも独自の標準プロパティと詳細プロパティを持つオブジェクトとして扱われます。
CMI の実際の働き
ランタイム イメージにアプリケーションを含める場合を考えてみます。通常の方法では、アプリケーションのコンポーネントを作成し、データベースにコンポーネントをインポートして、コンポーネントを構成に含めてからランタイム イメージを作成します。このプロセスで、CMI がどこに関わっているかを見てみましょう (コンポーネント作成に関しては、次回から 2 回にわたって詳しく説明しますので、ここでは簡単な説明に留めます)。
コンポーネント デザイナを起動すると、まずデータベース接続されていることを CMI が確認します。新規コンポーネント作成により、CMI による新規コンポーネント オブジェクトの作成がトリガされます。コンポーネント デザイナは、ユーザーが定義したコンポーネント情報の保管場所として、そのオブジェクトを使用します。基本的な作成プロセスには、コンポーネント名の定義、コピー元ファイルの指定、ランタイム イメージ内のコピー先の指定、および使用するレジストリ キーとその場所の指定などがあります。名前は標準コンポーネント プロパティなので、コンポーネント オブジェクトに含まれます。指定するファイルとレジストリ エントリは、CMI が作成してコンポーネント オブジェクトに結び付けるオブジェクトです。
コンポーネントをインポートする用意ができたら、Component Database Manager を起動します。最初の操作は、CMI を呼び出して、インストール時に指定したデータベースに接続させることです。CMI が接続に成功すると、SLD をデータベースにインポートできるようになります (SLD は、Source Level Definition の略で、"スライド" と発音します。SDL は、コンポーネント デザイナからの出力です)。Component Database Manager が行うのは、SLD を CMI に渡す処理のみです。データベースの参照、パッケージやコンポーネントの削除、オブジェクト プロパティの確認などはすべて CMI によって処理されます。その際、Component Database Manager が COM オブジェクト層の UI として機能します。
ランタイム イメージのビルド準備が整ったら、CMI がデータベース接続を再確認します (パターンが見えてきたでしょう)。新しい構成の作成は、コンポーネント ブラウザへの入力と同様に、CMI によるオブジェクトの作成に依存しています。構成にコンポーネントを追加するには、選択したコンポーネントに基づいて CMI がインスタンスを作成し、開いた構成にそのインスタンスを挿入する必要があります。インスタンスのファイル、レジストリ、そのほかのリソースにリソース オブジェクトも作成されます。依存性チェックでは、依存関係の識別、および依存解消に必要なコンポーネント リストの作成を CMI が担当します。ビルド中は CMI が呼び出され、コピーする実際のファイルへのアクセス、およびビルド要求を処理するための詳細プロパティ情報の提供を行います。
まとめと予告
今回は、Windows XP Embedded のアーキテクチャの概要を簡単に紹介しました。CMI がこのアーキテクチャの心臓部であり、COM サーバーの実装により、コンポーネント データベースにアクセスするための Windows XP Embedded ツールへの標準アクセスを提供するということを説明しました。ランタイム開発サイクルで必要なすべてのもののオブジェクトを CMI が作成し、このアーキテクチャのオブジェクト指向性に必然性を与えています。
さて、次回の予告です。今回は、Windows XP Embedded アーキテクチャを網羅して解説することはできませんでした。次回からは UI での明白な (および明白でない) アーキテクチャの決定や各ツールについて解説していきますが、今回の記事はそのための基礎になればと考えています。各ツールの解説 (次の 2 つの記事ではコンポーネント デザイナの予定) を通して、UI とその隠れたアーキテクチャの全体像を提供できるように努力します。新しい開発情報については今までと同様、Windows XP Embedded の Web サイト http://msdn2.microsoft.com/en-us/embedded/aa731409.aspx (英語) を参照してください。ではまた 1 月に。よいお年を。ニュースグループでお会いしましょう。
Get Embedded
|