豊田 孝

 本連載は早くも第9回目を迎え,次回からはいよいよWindows 2000/XPが持つ「名前空間」の世界に踏み込みます。そこで今回は,これまでの連載内容の要点を復習するとともに,名前空間という新しい世界を探検するための準備をしたいと思います。それではさっそく,復習からはじめましょう。

これまでの連載内容の復習

 この連載は,10行以内で構成される小さなサンプル・プログラムを通して,Windows 2000とWindows XPの世界を紹介してきました。これまでに紹介してきたすべてのサンプル・プログラムは,“相談相手を呼び出し,相談を持ちかける”という視点から作成してきました。この視点は今後の連載でも重要な意味を持っていますから,ここで多少時間を割いて復習しておくことにします。それでは,前回紹介した次のソース・コードを見ていただきましょう。


'*********************************************************
'“相談相手を呼び出し,相談を持ちかける”視点の意味
'プログラム行数 = 9
'機能:コントロールパネルの各種メソッドを自動起動する
'コピー・アンド・ペースト後,
'No9CPVerbs.vbsとして保存する
'*********************************************************
Dim myHelper, myCPHelper1, myCPHelper2, myCPHelper3, myCPHelper4, myCPHelper5
  Set myHelper = CreateObject("Shell.Application.1") '相談相手
  Set myCPHelper1 = myHelper.NameSpace(3) '「コントロールパネル」選択
  Set myCPHelper2 = myCPHelper1.Items '第5回連載参照
  Set myCPHelper3 = myCPHelper2.Item(2) '「ユーザーとパスワード」選択
  Set myCPHelper4 = myCPHelper3.Verbs '第8回連載参照
  Set myCPHelper5 = myCPHelper4.Item(0) '「開く」メソッド選択
  myCPHelper5.DoIt '「開くメソッド」実行
  Set myHelper = Nothing

 ご承知のように,このソース・コードはVBScript言語で記述されています。VBScript言語はプログラミング言語の一つですから,文法上の約束事や命令を覚える必要があります。そこで皆さん,このソース・コード内で使用されている文法事項を数えてみてください。次の6つの項目を挙げることができたでしょうか?

(1) Dim(相談相手との待ち合わせ場所を事前に予約する)
(2) CreateObject(相談相手に連絡し,都合を尋ねる)
(3) Set(相談相手を呼び出す)
(4) 「=」(相談相手に席についてもらう)
(5) 「.(ドット)」(具体的な相談内容を切り出す)
(6) Nothing(お礼を述べ,見送る)

 カッコ内に示した説明を読むと分かるように,これら6種類の文法事項は,Windows 2000/XP世界に住んでいる相談相手と交渉し,相談を持ちかけるための“道具一式”と言えます。ソース・コード内のNameSpace,Items,DoItなどは,上記の6項目のリストに入っていません。なぜでしょう? 理由は簡単ですね。NameSpaceなどはVBScript言語が提供する機能ではないからです。それは相談相手が持っている機能なのです。

 このソース・コードで呼び出している相談相手の実体は,Windows 2000/XPの「シェル」です。シェルは辞書で調べると貝殻や表皮という意味を持っていますが,ここでは「シェル」は,Windowsシステムが内部に持っている機能を,だれでも簡単に,しかも安全に使えるようにするための窓口である,と考えておいてください。シェルは,Windowsシステム自体をシャットダウンするような機能も持っています。

 このソース・コードを初めて目にした人の中には,VBScript言語文法を覚える必要があるな,と身構えてしまう人がいるかもしれません。確かに言語文法は大切ですが,私はそのような方にアドバイスしたいと思います。まず,上記の6項目の意味をきちんと理解しましょう。そして“使用する道具一式は,相談内容に応じて自然に決まるものである”,とゆったりと構えるようにしてください。大切なのは,相談内容,つまり,私たちの問題意識です。

 例えば,数カ月前に購入したWindows 2000 プレ・インストールマシンの調子が悪くなったとしましょう。サポート・センターに電話すると,“ところで,Windowsのビルド番号はいくつになっているでしょうか?”と逆に尋ねられるかもしれません。さあ,皆さんはどうしますか? 付属マニュアルのページをめくりますか? 最新のサービス・パックをインストールていれば,システム環境が変化しているかもしれませんよ。このような場合も,“相談相手を呼び出し,相談を持ちかける”という視点を身に付けておくことが大切です。本連載では,これからいろいろな相談相手を紹介していく予定です。Windows 2000/XPの世界には,ビルド番号なども瞬時に教えてくれる相談相手が多数いるのです。

 決して十分とはいえませんが,本日の復習はひとまずこれまでとし,これからのテーマである「名前空間」を理解するための準備を始めましょう。

「名前空間」とは?

 「名前空間」という用語を初めて耳にして,戸惑っている人もいるでしょう。そこで,まず,「名前空間」のイメージを掴んでしまいましょう。

 私たちはパソコン上で何らかのファイルを作成したり,編集しています。例えば,ワープロ・ソフトのWordを起動して拡張子「.DOC」を持つドキュメント・ファイルを作成する人もいれば,拡張子「.HTML」を持つファイルを編集して,自分のホームページ・コンテンツを日々更新している人もいるでしょう。作業が終われば,当然ファイルを保存します。

 ところで皆さん,新しく作成したファイルに名前を付けて保存するとき,そのファイルと同名のファイルがすでに存在していたらどのようなことになるでしょう。通常は使用しているアプリケーション側から,「上書きしてもよろしいですか?」などの確認メッセージが出されてきますね。これは視点を変えると,私たちがファイルに付けた名前が管理されている,ということになります。実は,このことは次回から取り上げる「名前空間」を理解するためのカギとなるのです。

 皆さんのWindows 2000システム内にはどれくらいの数のファイルがあるでしょうか? おそらくその数は1000を軽々と超えるはずです。多数のファイルの名前を管理しなけらばならないアプリケーション・プログラムの開発者からすれば,管理作業は効率的に行いたいと考えるのが自然です。そこで彼らが思いついたのが,「フォルダ」というWindowsシステムが用意している概念を応用することだったのです。先に結論を言ってしまうと,フォルダは「名前空間」といってよいのです。次に紹介するコードは,“フォルダは名前空間である”ことを証明しています。


'*********************************************************
'フォルダは名前空間である
'プログラム行数 = 4
'機能:音楽ファイルを自動演奏する
'コピー・アンド・ペースト後,
'No9NameSpace1.vbsとして保存する
'プログラム機能は第3回連載を参照すること
'*********************************************************
Dim myHelper

  Set myHelper = CreateObject("Shell.Application.1")
  myHelper.NameSpace("c:\winnt\media").Items.Item(0).Verbs.Item(0).DoIt
  Set myHelper = Nothing

 このサンプル・プログラムには「NameSpace("c:\winnt\media")」というコードがあります。名前空間を操作することを意味するこのNameSpaceは,相談相手であるmyHelper(Windowsシェル)が持っているメソッドの一つです。そして,このメソッドは「c:\winnt\media」というフォルダ情報を受け取って動作します。この事実を常識的に解釈すれば,シェルは「c:\winnt\media」フォルダを一つの名前空間として扱っている,ということになるのです。

 ところで,ファイルを管理しているのはWordなどのアプリケーションだけでしょうか? 違いますね。Windows 2000/XPシステム自身も,自分で使用するファイルは自分で管理しています。そのようなファイルは一般のファイルと区別して管理する必要がありますから,当然格納先フォルダ,つまり,名前空間もそれ専用のものが必要になります。Windows 2000/XPの世界では,このような専用フォルダはシェル特殊フォルダ(Shell Special Folder),あるいは単に「名前空間」と呼ばれています。このため,次のように表現することができます。

名前空間とは,シェルが内部で使用している特殊なフォルダである

 くわしい説明は次回以降の連載に譲りますが,今回用意した「No9ListNameSpaces.exe」という名称を持つ補助プログラムの実行結果を紹介しておきましょう(ダウンロードはこちら)。

図1●補助プログラム「No9ListNameSpaces.exe」の実行結果
 補助プログラムを実行すると,「No9ITProToyota.txt」という名称のテキスト・ファイルが「C:\」フォルダに作成され,その内容はブラウザで自動的に画面に表示されます(図1[拡大表示])。この補助プログラムも“相談相手を呼び出し,相談を持ちかける”という視点で作成されていることは言うまでもありません。

 私のWindows 2000とWindows XP(β2)環境で作成されたファイルの一部情報をリスト1に紹介しておきます。

 「数値=>3」という項目があります。そして,その下に「対応名前空間名=>コントロール パネル」という情報が表示されています。これは,名前空間がWindows 2000/XP内部では数値によって管理されていることを教えてくれています。また,「パス」や「タイプ」などの情報は,「コントロールパネル」という名前空間がまさに特殊なフォルダであることをはっきり示しています。

 ついでにその他の情報も見てみましょう。「相談相手」情報を見ると,Windows 2000の相談相手は「IShellDispatch2」,Windows XPの相談相手は「IShellDispatch4」となっています。末尾の数字を確認してください。2から4へと2倍になっています。これは相談相手(この場合はWindows「シェル」)がこれまで以上に機能強化されていることを示しています。このことから,Windows XPではより強力なシェル機能が実装されるのでは,と期待できます。また,「有効名前空間数」情報は,42から51に増え,Windows XPでは名前空間が9つほど増えています。「コントロールパネル」も名前空間の一つに数えられますから,名前空間が9つ増えているということは,Windows XPはWindows 2000に比べると,内部的には大きな変化を遂げているということを示唆しています。すでに紹介している「デスクトップ」や「ごみ箱」などもシェル特殊フォルダ,つまり,名前空間の仲間なのです。

 本日は,10行サンプル・プログラムを理解するための基礎を復習するとともに,次回以降の連載のテーマである「名前空間」を学ぶための準備を整えました。補助プログラムが表示する情報を初めて目にした人の中には,かなり驚いた方もおられるでしょう。その画面情報は,Windowsシェルの変化や成長の跡を端的に示してくれているからです。

 次回からは,本日紹介した補助プログラムの出力情報を参考にしながら,Windows 2000/XPの名前空間を理解するためのさまざまな10行サンプル・プログラムを作ります。次回からは私が一方的に“紹介”するのではなく,皆さんといっしょに“作っていく”という姿勢で臨みたいと思います。それでは次回またお会いいたしましょう。ごきげんよう!