これまでの連載で触れたように,インターネットが普及する時代の流れの中で,Windowsの「使いやすいさ」という長所は,「インターネット外部からの悪影響を受けやすい」という短所に変容してきました。これはあってはならないことですが,米Microsoft会長兼CFA(Chief Software Architect)であるBill Gates氏も認める事実となっています。

 Windowsユーザーの多くは,各種のWindowsアプリケーションが備えるGUI(Graphical User Interface)の恩恵を受けてきました。客観的に見ても,個々のアプリケーションが優れたGUI(操作性)を持つことは,歓迎されるべきことです。そして,優れたGUIの設計・実装には,人材と時間,そして,資金も必要です。C++の設計・実装者であるBjarne Stroustrup氏は,「C++にはなぜGUIが用意されていないのですか?」と問われ,次のように回答しています。

「C++には,多数の市販版とオープンソース版のGUIがあります。しかし,標準GUIというものはありません。C++標準化委員会には,そのようなGUIを用意できるほどの人的な余裕がないのです。

 ご承知のように,WindowsのPCクライアント市場でのシェアは90%を超えているとも言われています。これは営業的には偉業の達成といえますが,その原因の1つは統一的なGUIの実装・提供にあったといってもよいでしょう。しかし,ほとんどの人が当たり前に考えてしまっているかもしれませんが,Stroustrup氏の発言からも分かるように,ユーザーから高い評価を受けるGUIの設計・実装は並大抵の作業ではありません。Stroustrup氏の回答の詳細に興味のある方は,こちらをご覧ください。

 それではここで,復習も兼ねながら,GUIの役割について考えてみることにします。

図1●Microsoft Baseline Security Analyzer バージョン1.2

Windows GUIの役割

 GUIとはそもそも何か?,という視点からGUI議論を始めるとページ数が増えるだけで,生産的ではありませんから,図1[拡大表示]の画面をまずご覧いただきましょう。

 この画面は,Microsoft Baseline Security Analyzerのバージョン1.2(以下BSA)を起動した直後のものです。BSAは,2004月1月20日に鳴り物入りで公開されたセキュリティ検査ツールです。BSAの出荷当時の報道詳細については,こちらの記事をご覧ください

 検査ツールは,Windowsアプリケーションの1つであることには違いないのですが,平均的なWindowsユーザーにとっては結構敷居が高いソフトウエアの部類に入るといってよいでしょう。このため,検査ツールを出荷する際には,高度なGUIを定義・実装し,優れた操作性を提供する必要があります。つまり,検査ツールではGUIの役割がきわめて重要な位置を占めます。

 画面の左ペインを見ると分かるように,ヘルプ情報を表示するボタンが用意され,Windowsユーザーの緊張を和らげる工夫が凝らされています。また,画面の表示色は,青空を想起させる薄い青色が全体的に採用され,私たちの心を和ませてくれています。BSAにはコマンドライン版も用意されていますが,それはあくまでもベテランWindowsユーザー用のものといってよいでしょう。GUIとは何か?この疑問への回答は次のようになるでしょう。

「GUIとは,ソフトウエアとユーザーを結び付ける架け橋である」

 ところで皆さん,Windowsシステムで最も一般的なGUIは何だと思いますか? それは,Windowsエクスプローラです。Windowsエクスプローラ(%SystemRoot%\explorer.exe)の正体は,ご存知の方もいらっしゃると思いますが,Shell32.dll内部に実装されている各種シェル機能をビジュアル表現するGUIプログラムです。これは余談ですが,Shell32.dll内に実装されている機能を直接使用すれば,自分なりのエクスプローラを簡単に作ることができます。Windowsエクスプローラは,Shell32.dllとWindowsユーザーの架け橋,といえます。

 以上でGUIの便利さや役割などはお分かりいただけたと思いますから,今度は,Windows GUIの問題点を考えてみることにします。

Windows GUIの問題点

 美しいものには刺(とげ)があるといわれるように,優れた操作性を提供する,便利なGUIにも問題があります。私はある月刊誌でコマンドライン・レベルの入門記事を書いたことがあるのですが,ある読者から「あなたの記事は入門者用のものではなく,中級者用のものです。なぜなら,いまどきコマンドライン・レベルの記事を理解できる人などほとんどいません」という抗議を受けたことがあります。「そういうものなのだろうか」と私は当初唖然(あぜん)としていましたが,コマンドライン・レベルの知識も「絶対に」必要なのです。

 前々回と前回紹介したMyDoom駆除ツールを使用するには,コマンドライン・レベルでの知識が必要です。さらにいえば,GUIを持たないコマンドライン・プログラムには,そのプログラムならではの長所があります。例えば,(必要最小のGUIだけを備えている)MyDoom駆除ツールのプログラム・サイズは小さくなっており,ダウンロードに要する時間が少なくて済みます。

 WindowsエクスプローラがShell32.dllのGUIであることは間違いない事実ですが,冷静に考えてみると,WindowsエクスプローラはGUI(実体機能表皮)であり,あくまでもShell32.dll機能を使用するための手段にすぎません。このため,Windowsエクスプローラの操作にいくら精通したとしても,Shell32.dllそのものを理解したり,今後のShell32.dllの機能変更や進化を予測するような知識は身に付きません。

 ご承知のように,Windowsは良し悪しは別にして,頻繁にバージョンアップを繰り返してきました。それぞれのバージョンアップ作業では従来の機能が廃止されたり,変更されることが多々ありました。新しい機能が追加されたことも当然あります。GUI操作レベルで経験を積み,そのレベルに安住していては,Windowsのバージョンアップに対応できません。これは一種のGUIの問題点,といってよいでしょう。

 私は過去に,Windows 2000からWindows XPへのバージョン時にこのような連載"を担当したことがあります。その連載をご覧いただけると,Windowsエクスプローラ(GUI操作)とともに,その背後にあるちょっとした技術への関心を持つことはきわめて重要であり,同時に,結構楽しいことであることも分かるはずです。

 さらにいえば,今流行のオブジェクト指向的な発想でWindowsを理解できてしまうこともはっきり分かるはずです。Shell32.dllは名称から分かるように,Windowsシェルの実装コンポーネントです。しかも,複数の言語から再利用できるコンポーネントです。一部のWindowsパワーユーザーは,Windowsシェルがオブジェクト指向という視点から分かりやすく理解できるということを誇りとしています。

図2●BSAをApp Verifierで評価した結果
 GUI操作への安住。これは確かに問題の1つですが,個人の自覚次第で自分なりの解決策を見い出せない問題ではありません。ところが皆さん,美しく,かつ,便利なGUIから呼び出される実行コード内部に問題があったらどうでしょう? 結論を言えば,それは,私たちWindowsユーザーでは解決策を見い出すことができる種類の問題ではありません。例えば,図2[拡大表示]をご覧ください。

 この画面は,すでに紹介してある検査ツールBSAを第11回で紹介したApp Verifierで評価した結果を示しています。残念なことに,BSAは内部でいくつかの問題を抱えています。最大の問題は,CreateProcessというWindows APIの使い方にあります。CreateProcessの使い方については,第10回で詳しく説明していますから,興味のある方は,そちらの記事を復習しておいてください。

 この種の問題は,GUIには関係ありません。ましてや,GUIを使用する私たちWindowsユーザーの責任外です。App VerifierはMicrosoft社内のチームが用意したツールの1つです。Microsoftのセキュリティチームの一員であるMichael Howard氏はこの記事の中で,次のような社内事情を公開してくれています。

During security testing for Windows Server 2003,the Windows Application Verifier team recommended that the following minimum tests be enabled to check applications for security compliance:

・PageHeap
・Handles
・Locks
・SecurityChecks

図3●App Verifierのオプションを最低限4つ設定する
 この文章は,App Verifier開発チームとWindows Server 2003開発チーム間のやり取り風景ですが,具体的には,テスト時には,App Verifierのオプションを図3[拡大表示]のように「最低限」設定しなさい,とApp Verifierチームは主張しています。

 私たちWindowsユーザーは,BSAはこのような最低限のチェックを経た後で出荷されている,と期待したいところですが,残念ながら,そのようなチェック工程は経ていないのが事実のようです。これでは,Microsoft社内の各チーム間の連携はどうなっているのだろう,と私たちWindowsユーザーは不安になってしまいます。これは,私たちWindowsユーザーは最低限のチェックさえ受けていない検査ツールBSAを,「使わされている」ことになります。

 検査ツールBSAは,大変優れたGUIを備えたソフトウエアですが,残念なことに,その実装部は分かりにくくなっています。前回や前々回などで紹介したMyDoom駆除ツールや今回触れたBSA検査ツールは貴重なプログラムです。おそらく,今後もこの種のツールは多数ダウンロードできるようになるでしょう。このため,Microsoftの各開発チームには,チーム間の連携をお願いしたいところです。

今回のまとめ

  • コマンドライン・レベルの知識も必要である
  • 駆除ツールや検査ツールは今後も多数出荷される可能性がある
  • Microsoft社内の各チームの連携が望まれている

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