いよいよ2007年にはMicrosoft Windowsの新版「Windows Vista」が登場します。米Microsoftにとっては,6年ぶりとなるクライアントOSの新版です。度重なる仕様変更や,それに伴う発売日の延期など,いろいろなことがありましたが,まもなく目の前にやって来ます。

 Windows Vistaは,高速な検索,より強固なセキュリティ対策,RSS(Really Simple Syndication)を扱うAPI,新しいInternet Explorerなど,数多くの新機能が搭載され,Windows XPとはかなり違った印象のOSになります。

 数ある新機能の中で,プログラマに最も関係が深いのは,新しいアプリケーション開発/実行環境である「.NET Framework 3.0」です。開発段階では,既存のWin32 APIを置き換える新しいAPI(開発コード名:WinFX)になると言われていましたが,その後スケールダウンして最終的には.NET Framework 2.0への追加コンポーネントとして提供されます(図1)。

図1●Windows Vistaに標準搭載される.NET Framework 3.0の位置付け。肌色の部分が3.0で新たに登場する要素。基本クラスライブラリやCLRといった基盤の部分は.NET Framework 2.0と共通のものを使う。3.0対応アプリケーションから2.0のライブラリを使うことも可能
図1●Windows Vistaに標準搭載される.NET Framework 3.0の位置付け。肌色の部分が3.0で新たに登場する要素。基本クラスライブラリやCLRといった基盤の部分は.NET Framework 2.0と共通のものを使う。3.0対応アプリケーションから2.0のライブラリを使うことも可能
[画像のクリックで拡大表示]

 .NET Framework 3.0が2.0の機能追加として実装されるということは,Windows Vistaには .NET Framework 2.0の実行基盤も搭載されるということです。つまり,ADO.NETやASP.NETなどの2.0が提供する機能もそのまま使えます。また,既存の.NET Framework 2.0向けに作成したアプリケーションはほとんどの場合,そのままWindows Vistaでも動作します。

 では,.NET Framework 3.0は新たに何を提供するのでしょうか。.NET Framework 3.0は,大きく4種類のコンポーネント群に分けられます。一つ目は,柔軟なユーザー・インタフェース構築を可能にする「Windows Presentation Foundation(WPF)」。二つ目は,Webサービスなどを使った分散アプリケーションの構築を容易にする「Windows Communication Foundation(WCF)」。三つ目は,アプリケーションの処理の流れを「ワークフロー」という形でとらえ,アプリケーション構築を省力化する「Windows Workflow Foundation(WF)」,最後はWebサイトの認証などを楽にする,新しいオンライン認証の仕組みである「Windows CardSpace(WCS)」です。

 中でもWPFは,従来のWindowsアプリケーションのユーザー・インタフェース構築法をがらっと変えてしまうほど大きなインパクトを持っています。表現力の幅が大きく広がったと同時に,従来とは全く異なる手法が要求されます。この特集では,Windows Vistaの目玉であるWPFを,新しいWindowsフォーム・アプリケーションの構築方法を具体的に示しながら解説します。

XMLベースの言語でUIを開発する

 WPFを簡単に言うと,今までのWindowsフォームとは全く違う見た目のユーザー・インタフェースを提供するための仕組みです。そしてWPFには,ユーザー・インタフェースのデザインをプログラム・コードから分離するという目的もあります。

 ユーザー・インタフェースというと,Windows Vistaが新たに搭載するGUI「Aero Glass」を思い浮かべる方もいるかもしれません。Vistaのデモなどで,アルファ・ブレンディング(アルファ値を使った合成)を利用して半透明表示させたウィンドウをご覧になった方も多いでしょう。また,デスクトップ上に開いた複数のウィンドウを3D空間に浮かぶ板としてとらえ,立体的に並べる「Windowsフリップ3D」も見た目に印象的な新機能です。このようにAero Glassは,ウィンドウを透過したり,合成したりすることで見た目の効果を実現する仕組みです。

 それぞれユーザー・インタフェースがらみの技術ですが,WPFとAero Glassは直接関係するものではありません。開発者の観点から見ると,Aero Glassはプログラミングに直接影響するものではないのです。従来と同じようにアプリケーションを作って,Windows Vista上で実行すれば,自動的にAero Glassのウィンドウで表示されます(図2)。

図2●.NET Framework 2.0対応アプリケーションをWindows Vista上で実行したところ。特別修正することもなく,半透明のタイトルバーなどWindows Vistaの標準的なスタイルで表示される
図2●.NET Framework 2.0対応アプリケーションをWindows Vista上で実行したところ。特別修正することもなく,半透明のタイトルバーなどWindows Vistaの標準的なスタイルで表示される

 WPFの最大の特徴は,ユーザー・インタフェースの形を定義するマークアップ言語「XAML(eXtensible Application Markup Language),ザムルと読む」を導入した点にあります。サンプルを使って説明しましょう。例えば,図3のような簡単なWindowsフォームのアプリケーションがあります。実行するとテキストボックスをもつフォームが現れ(図3(a)),名前をテキストボックスに入力して,[OK]ボタンを押すと,入力した名前を含むメッセージを表示します(図3(b))。通常こうしたアプリケーションは,Visual Studio(VS)でフォームをデザインして,ボタンのイベント・ハンドラにコードを入力するといった手順で作ります。

図3●WPFの機能を利用して作成した簡単なアプリケーション。テキストボックスに名前を入力して,[OK]ボタンを押すと(a),入力した名前を含むメッセージを表示する(b)
図3●WPFの機能を利用して作成した簡単なアプリケーション。テキストボックスに名前を入力して,[OK]ボタンを押すと(a),入力した名前を含むメッセージを表示する(b)

 WPFを利用すると,アプリケーションの構成や作り方がちょっと変わります。このプログラムはリスト1リスト2の二つのファイルから成り立っています。

リスト1●図3のアプリケーションの画面レイアウトを定義したファイル。XAMLというXMLベースの言語で記述されている
リスト1●図3のアプリケーションの画面レイアウトを定義したファイル。XAMLというXMLベースの言語で記述されている
[画像のクリックで拡大表示]

リスト2●図3のアプリケーションのロジックを実装したC#のコード
リスト2●図3のアプリケーションのロジックを実装したC#のコード
[画像のクリックで拡大表示]

 リスト1はXAMLのコードです。ファイルの拡張子は「.xaml」です。XAMLはXMLベースの言語で,画面レイアウトなどのユーザー・インタフェースの記述に利用します。では,XAMLコードの中身をちょっと見てみましょう。

 (1)のWindowタグ(<Windows>)はウィンドウに相当します。(2)や(3)は,フォーム上のテキストボックスやボタンをそれぞれ表しています。「Margin」や「Height」という属性から,大きさや位置を指定していることがわかるでしょう。このようにWPFでは,タグを利用した記述でフォームを表現します。実際,Windows Vista上で,.xamlファイルを直接ダブルクリックすると,「Windows Presentation Foundation Host」と呼ばれるアプリケーションが起動して,.xamlに定義された通りの画面をInternet Explorer上に表示します。

 一方,リスト2はC#を使ったロジックの実装です。簡単なコードなので,すぐに読み解けると思います。(1)の「Window」という名前のクラスは,WPFが提供する新しいクラスです。WPFでは,新しいユーザー・インタフェースを提供するクラスライブラリが用意されています。(2)ではメッセージボックスを表示しています。ただし,これは従来からある .NET Framework 2.0のライブラリを使用しています。このように .NET Framework 3.0のプログラムでは2.0のライブラリを併用することが可能です。

 この二つのファイルは,実行時にそのまま使うわけではありません。.xamlファイルは,C#やVisual Basic(VB)のソースコードにいったん変換され,ロジックのファイルとともにコンパイルされます。その結果,.NET対応のEXEやDLLファイルが出力されます。

デザインとロジックの分割による二つのメリット

 ここで重要な点は,リスト1とリスト2の位置付けです。ファイルを二つに分けたことによって,ユーザー・インタフェースとロジックの実装をそれぞれ違う人で分担できるようになったのです。このことによるメリットは二つあります。一つ目は,デザインのプロにアプリケーションのユーザー・インタフェース・デザインを依頼しやすくなったということ。WPFを利用した開発では,まずデザイナがXAMLを使用して,コントロールを配置した画面をデザインできます。そして,開発者は,そのXAMLを見て,コントロールの名前を理解して,C#などでロジックだけを実装するという役割分担が可能になります。XAMLを共通の媒体として,デザイン担当者と開発者が共同でアプリケーションを作りこんでいけるのです。

 ユーザー・インタフェースの実装とロジックの実装を分離することによって得られるもう一つのメリットは,いったん作成したアプリケーションのユーザー・インタフェースを後から簡単に変更できるという点です。ユーザー・インタフェースのデザインを後から修正するには,XAMLの記述を変えるだけで済むのです。したがって,開発者がロジックを作っている間に,デザイン担当者は,XAMLにいろいろな視覚効果を盛り込むなど,見た目をどんどん改良するといったことが可能です。コントロール名を変更したりしない限り,デザインを変えてもロジックには影響がないからです。

この先は会員の登録が必要です。有料会員(月額プラン)は初月無料!

日経 xTECHには有料記事(有料会員向けまたは定期購読者向け)、無料記事(登録会員向け)、フリー記事(誰でも閲覧可能)があります。有料記事でも、登録会員向け配信期間は登録会員への登録が必要な場合があります。有料会員と登録会員に関するFAQはこちら