特集:WPF 4とSilverlight 4

これから業務アプリを開発するならどっち?

グレープシティ株式会社 八巻 雄哉
2010/04/20
Page1 Page2 Page3

開発容易性

 ここまでご紹介してきた導入容易性と保守容易性は、どちらかというと開発者よりも運用管理者が気になる部分だろう。後半は開発者にとって重要となる開発容易性と要件実現性の2点について紹介していく。

アプリケーション・モデル

 一般的にクライアント/サーバ型というと、下の図のようなクライアントから直接データベースに接続して処理を行う2層アーキテクチャを思い浮かべる人が多いのではないだろうか。

クライアントから直接データベースに接続

 2層アーキテクチャはVisual Basicの普及ともに広く採用されてきたモデルで、構造が単純であることが大きな長所である。一方、.NETの普及とともにマイクロソフトが“スマート・クライアント”という言葉で提唱したのが3層アーキテクチャだ。

サービス層を介してデータベースに接続

 一般的には、データ・アクセス部分が分離されることによる保守作業の軽減や並行開発の容易性といった部分が長所とされるが、それらの長所は論理的に層を分離する方法でも同様だ。3層アーキテクチャが、すべての処理をクライアント層に詰め込む2層アーキテクチャよりも大規模開発に向いているのは間違いないが、その分、構造が複雑になるため開発に時間がかかる。

 そして、ここで比較のポイントとして取り上げたいのは、Silverlightは最低でも3層アーキテクチャのモデルを採用する必要があるという点である。

  2層アーキテクチャ n層アーキテクチャ
Windowsフォーム
WPF
Silverlight
各UIテクノロジで選択可能なアーキテクチャ

 SilverlightはWebブラウザのプラグインとして動作するため、当然ながら直接データベースに接続するなどということはできない。必ず何らかのサービスを介してデータ・アクセスを行わなければならない。また、通信はWebブラウザの通信機能を間借りして行われるため、非同期通信に限られる。

 このような制約は、開発者、特に旧来の2層アーキテクチャの開発経験しかない人にとって相当な負担となるのは間違いない。比較的小さなプロジェクトであれば、2層アーキテクチャで構築可能なWPFが有利であるといえるだろう。

WCF RIA Services

 しかしながら、マイクロソフトもこの問題を認識しており、そのソリューションの1つとしてWCF RIA Servicesという機能の提供が今後予定されている。

 WCF RIA Servicesは、ひと言でいえばフレームワークとVisual Studioのサポートを通じて、サーバ側のモデルから必要なクライアント・コードを自動生成する機能である。これによりアプリケーション・ロジックの一部や検証機能などの実装がサーバ側に集約され、開発が単純化される。

WCF RIA Servicesの概略図
WCF RIA Servicesの中心はDomainServiceクラスで、これはモデルを操作するためのエンドポイントとして機能する。WCF RIA Servicesに対するリンクが設定されているSilverlightプロジェクトでは特殊なビルドが行われ、サーバ側のDomainServiceがコード生成によってSilverlihgtプロジェクトに射影される。クライアント側では射影されたDomainContextを使ってデータの操作を行うだけでよく、サーバ側や非同期通信を意識する必要がない。DomainDataSouceコントロールを使えばコーディングレスでデータ操作を行うことも可能である。

 Visual Studio 2010では、WindowsフォームやWPFにあるような[データ ソース]ウィンドウから画面へのドラッグ&ドロップ操作がWCF RIA Serviceでもサポートされるため、単純なデータの表示や更新であれば、ほぼノンコーディングで構築可能だ。非同期通信の煩雑なコーディングを減らしてくれるという意味でも、非常に有用な機能といえる。

要件実現性

 最後のポイントとして要件実現性を取り上げる。まずは機能面で顧客要件を満たせるかどうかという点だ。

機能要件

 .NETテクノロジが全面的に採用されたSilverlight 2が登場したとき、多くの.NET開発者がSilverlightに注目した。このバージョンで.NET言語やコントロールによる画面構築など、これまでの.NET開発とほぼ同等の基盤がSilverlightに用意されたからである。

 しかしながら、業務アプリケーションという観点で見ると細かな部分で機能が不足していることは否めなかった。Silverlight 3では、ナビゲーションやブラウザ外実行のサポートなど業務アプリケーションにとって重要となる機能がいくつか追加されたが、あくまでSilverlight 2の延長線上にあるバージョンという印象だった。

 例えばクリップボードへのアクセス機能などはアプリケーションにおけるごく基本的な機能といえるが、この機能はバージョン2、バージョン3と実装されてこなかった。このことから、SilverlightのターゲットはあくまでパブリックなWebアプリケーションであり、少しでもセキュリティ・リスクの可能性があるものについては実装しない方針なのだと筆者は理解していた。

Silverlight is Ready for Business

 ところが、このような方針が変更されたのか、それともそもそもそのような方針が存在しなかったのかは定かでないが、Silverlight 4ではそのようなこれまで実装されてこなかったアプリケーションの基本機能が多数追加されている。

 業務アプリケーションにとって重要となるSilverlight 4の新機能は以下のものが挙げられる。

  • クリップボード
  • 右クリックとマウス・ホイール
  • ドラッグ&ドロップ(専用イベントの追加)
  • IMEサポートの改善(入力モード切替、変換中のイベント取得)
  • 印刷
  • ブラウザ外実行の信頼モード

 この中でも方向転換の象徴といえるのが「ブラウザ外実行の信頼モード」だろう。信頼モードは、これまでのサンドボックスが拡張されるモードで、ユーザー・プロファイル内のローカル・ファイル・アクセスやポリシー・ファイルなしでのクロスドメイン・アクセスなどが可能となっている。

 その中でもCOMオートメーションのサポートは非常に強力で、Windowsプラットフォーム限定にはなるもののMicrosoft ExcelといったCOMインターフェイスを持つアプリケーションをSilverlightから操作できる。事実上Windows OSが持つリソースの大半にアクセス可能となるためセキュリティ面を懸念する声が上がっているのも事実だが、Silverlightでは不可能な機能を実現する最終手段になることが予想される。

Silverlight is a subset of WPF

 一方で、Silverlightはどこまで行ってもWPFのサブセット(=機能縮小版)であるということを忘れてはならない。SilverlightにあってWPFにない機能も存在するが、多くはアプリケーションの動作形態の違いからくるものであり、その数もWPFにあってSilverlightにない機能に比べればごく少数である。

 例えば、Silverlight 4で印刷機能が追加されたが、これによりWPFと同レベルで印刷が可能になったなどと思ってはいけない。Silverlightの印刷機能はあくまでも簡易的なものであり、UI要素をラスタライズしてプリンタに送信する仕様だ。

 そのため、高品質な印刷が望めないのはもちろんのこと、仮想プリンタ・ドライバでPDFファイルを作成した場合には文字列検索ができないPDFファイルとなってしまうため、注意が必要だ。

非機能要件(スクロール・パフォーマンス)

 非機能要件として挙げられるもののうち、ここではアプリケーションの応答性を取り上げたい。

 WPF/SilverlightのUIにおいて、筆者が従来のGDIベースのアプリケーションよりも応答性が良くないと感じるのがスクロールだ。特に業務アプリケーションでは、DataGridコントロールなどを用いて何百件、何千件といったデータを表示させるケースは(そもそも何千行も表示させる仕様がどうなのかという問題は置いておき)珍しくない。

 そこで、ここではWPFとSilverlightのDataGridコントロールに5000セル(10列×500行)を表示させた状態でスクロールさせたときの最低フレームレートを、下記の環境で計測してみた。

PC:Dell Latitude D620
CPU:インテルCore 2 Duo T7400 2.16GHz
GPU : NVIDIA Quadro NVS 110M
メモリ:3GBytes(DDR2)
OS:Windows 7 Enterprise x86(VHDブート)

Silverlight 4 18.7fps
.NET Framework 4 Client Profile 9.3fps
両技術におけるDataGridコントロール・スクロール時のフレームレート
計測日:2010年4月16日。
CompositionTargetクラスのRenderingイベントの発生間隔よりフレームレートを算出。
WPFとSilverlightで計測コードに差異はなし。
[Page Down]キーを押し続けることで1行目から500行目までスクロールさせた場合の最低フレームレートを5回計測。
5回の計測値のうち最高値と最低値を除いた3つの計測値の平均値を記載。

 結果を見ると、Silverlightの方がWPFよりも約2倍速い。筆者の感覚でも、Silverlightでは違和感なくスクロールバーがマウス・カーソルに追従するが、WPFではもたつきが感じられた。

 この結果が限られた1環境における局所的なパフォーマンスであることを忘れてはならないが、「WPFはGPUを活用しているから描画が速い」がすべてのケースで当てはまるわけではないということはいえるだろう。

まとめ

 今回ご紹介してきた内容の中には、筆者自身も「これは誤解していた」という事柄がいくつか存在した。一般的な印象にとらわれずに、何でも実際に試してみるということはとても大切なことだと感じる。本稿の内容のどれか1つでも、読者の皆さんの誤解を解く一助となっていれば幸いである。

 最後に、「超個人的見解」と称して筆者が考える両技術の選択チャートを紹介して、本稿を締めたいと思う。

両技術の選択チャート(筆者の超個人的見解)

 WSUSなどによるランタイムの自動インストールを前提としたため、この図では導入容易性は考慮していない。インストール・エクスペリエンスが重要視される場合にはSilverlightという選択になるだろう。また、今回特に触れていないがマルチプラットフォーム対応が必須である場合、当然ながらSilverlight以外に選択肢はない。End of Article

 

 INDEX
  特集:WPF 4とSilverlight 4 
  これから業務アプリを開発するならどっち?
    1.導入容易性
    2.保守容易性
  3.開発容易性と要件実現性


Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)
- PR -

注目のテーマ

業務アプリInsider 記事ランキング

本日 月間
ソリューションFLASH