前回は2004年6月21日に公開されたWindows XP Server Pack 2(RC2)をインストールし,その概要を紹介しました。前回の記事を読むと分かるように,RC2をインストールしてもこれまでのWindows XP環境が大幅に変更されるわけではありません。しかし新しい機能が追加されるのは事実ですから,今回は追加された機能を効率的かつ楽しく調査するためのツールを作ります。

図1●今回のサンプル・プログラムの実行結果

今回のサンプル・プログラム

 サンプル・プログラムの作成過程は後で説明することにし,まずはこちらのサンプル・プログラムをダウンロードし,実行結果を確認してください。筆者の環境では図1[拡大表示]のような画面が表示されます。

 この画面は,「コントロールパネル」名前空間に関する調査結果を報告しています。このサンプル・プログラムはコントロールパネルだけではなく,Windowsを構成するさまざまな名前空間を調査し,その結果を表示する機能を持っています。

 なお,コントロールパネルをはじめとする各名前空間に含まれるオブジェクトには,大別すると,ファイル・オブジェクトとフォルダ・オブジェクトの2種類があります。この画面は,2種類のオブジェクトを区別して報告しています。例えば,画面内の「プリンタとFAX」はフォルダ・オブジェクトであるため,赤色で表示されています(ファイル・オブジェクトは黒色表示)。

 筆者の環境の実行結果を見ると,コントロールパネルには合計で32個のオブジェクトがあり,そのうちの6個のオブジェクトはフォルダ・オブジェクトであることが分かります。オブジェクトの種類については,以降の連載で別のサンプル・プログラムとともに詳しく説明する予定です。

 RC2をインストールしていない方は,今回のサンプル・プログラムを現在のXP環境で実行し,本連載で紹介した画面情報と比較してみるとよいでしょう。それでは次に,このサンプル・プログラムを作成した背景を説明しておきます。

図2●「ListCPItems.exe」サンプル・プログラムの実行結果

ツール作成の背景

 筆者は以前こちらの記事で「ListCPItems.exe」という名称のサンプル・プログラムを紹介しました。そのサンプル・プログラムは,コントロールパネル内のオブジェクトを列挙し,表示するというものでした。3年ほど前に公開した「ListCPItems.exe」サンプル・プログラムをRC2インストール環境で実行すると,図2[拡大表示]のような結果が返されました。

 ご覧のように,表示情報が途中で途切れた,たいへん醜い画面です。「ListCPItems.exe」サンプル・プログラムを公開したのは2001年6月なのですが,この画面は,3年ほどの時間が経過する過程で,(予想しないほどの)多数のオブジェクトがコントロールパネルに新たに追加されたことを物語っています。この画面をいくら眺めてもコントロールパネルの正確な情報を把握することはできません。そこで今回の新しいサンプル・プログラムを作成することにしたわけです。

 新しいオブジェクトがいつ追加されるかは誰にも予測できません。また,一度作成した便利なツールは可能な限り長い間使いたいものです。このような場合,プログラム内部で収集した情報をデータベースへ格納したり,独立したファイルとして整理しておくと便利です。データベースに格納するためには,データベースを購入し,それを操作する知識を習得しなければなりません。これでは費用も時間もかかってしまいます。そこで,今回のツールでは,収集した情報をHTMLファイルとして格納し,表示しています。個人的には,ExcelなどのWindowsアプリケーションに格納するのも面白いと思います。

 今回のサンプル・プログラムは小さなものではあっても,Windowsのシステム情報を収集し,表示する機能を備えています。この種のツールを作成する場合,Windowsシステムの変更に応じて柔軟に対応できるように,プログラムの拡張性と保守性を考慮しておく必要があります。新たに公開されるサービスパックや修正パッチをインストールした途端に機能不全に陥るようでは困ります。このため,次のようなツール作成方針を定めました。

方針1:抽象度の高いインタフェースを使用する
方針2:クラスを使う

 これら2つの方針を手短に説明しておきましょう。

方針1:抽象度の高いインタフェースを使用する

 抽象度が高いインタフェースを使用するという意味は,簡単に言えば,私たち人間の発想を効率的に表現できるプログラミング言語を選択することです。今回のサンプル・プログラムは,VBScript言語で作成しています。この言語には,CreateObjectという命令が用意されています。CreateObject命令は,その名称から分かるように,「オブジェクトを作成する」という意味ですから,私たちの日常的な発想にきわめて近い意味を持っています。筆者は,こちらの記事では,「オブジェクトを作成する」というCreateObject命令の機能を,「相談相手を呼び出す」と説明しています。

方針2:クラスを使う

 クラスはこちらの連載で説明したように,自分の考えや思いを表現する道具です。今回のサンプル・プログラムのメイン部分は,次のようなコードで記述されています。

Set oClass = New SP2NameSpaces
oClass.ImportNameSpace(3)
retVal = oClass.DoIt()
retVal = oClass.TellMeWhatYouAre(strFileName,strEnjoyFile)

 今回のサンプル・プログラムのメイン部分はこの4行で構成されているにすぎません。この4行のソースコードは,出現順に次のように解釈できます。

  • 定義したSP2NameSpacesクラスのインスタンスを作成する
  • 識別番号3を持つ「コントロールパネル」名前空間をインポートする
  • SP2NameSpacesクラス・インスタンスに情報収集作業を行ってもらう
  • SP2NameSpacesクラス・インスタンスに収集した情報を表示してもらう

 プログラミング経験がなくても,それぞれの内容は理解できるのではないでしょうか(そうあってほしいと筆者は期待しています)。なお,解釈文内で使用されている「インスタンス」という用語ですが,ここでは,「クラス情報が格納されるメモリー」と考えておいてください。クラスを使用すると,分かりやすいプログラムが書けるのです。プログラムが分かりやすいものであれば,そのプログラムの拡張作業と保守作業は効率的に行えることを意味します。

 今回はサンプルツールの詳しい説明は省略します。皆さんは,サンプル・プログラム内に定義されているSP2NameSpacesクラスのソースコードを,時間のあるときにじっくり眺めておいてください。次回からは,このサンプル・プログラムを少しずつ発展させながら(具体的にいえば,SP2NameSpacesクラスの拡張),RC2の概要を実践的に探っていく予定です。RC2をインストールしていない方は,現在のシステム環境でサンプル・プログラムを実行し,以降の連載で紹介される画面と比較してみるとよいと思います。

今回のまとめ

  • ツールを作成するときには,作成方針を決めるとよい
  • クラスを使用すると,分かりやすいプログラムを作ることができる
  • 分かりやすいプログラムは拡張性と保守性が優れている

 今回は以上で終了です。次回またお会いいたしましょう。ごきげんよう!