WPFとSilverlightの選択ガイダンス
先の記事でマイクロソフトのPete Brown氏がblogに記載したWPFとSilverlightの選択ガイダンスを紹介しました。私自身はこのガイダンスに賛成できない部分も多いため、私が考えるWPFとSilverlightの選択ガイダンスを書いてみようと思います。
異論、反論はあるかと思いますが、あくまで私個人の考えと受け止めていただければと思います。もちろんマイクロソフトさんは一切関係がございませんし、グレープシティが推奨しているガイダンスではないことにご留意ください。また、どちらかというと私はWPF支持派です。そして、仕事上業務アプリ以外のアプリとはほとんど関わりがありません。そのためそのようなバイアスがあることも考慮いただければと思います。
比較の対象はWPF 4とSilverlight 4です。
開発容易性
開発者のバックグラウンドや対象とするプロジェクトで異なる可能性はあるものの、おおかたWPFのほうが開発が容易であると私は思っています。
まず、SilverlightはWPFのサブセットなので規模が小さい分だけ習得が容易であるという意見を目にしますが、私は全くそう思いません。もし、WPFのクラスライブラリが巨大すぎて溺れてしまうということであれば、Silverlightも十分溺れるレベルのライブラリの大きさであると思います。むしろ、SilverlightはWPFよりも用意されているクラスやそのメンバが少ない分、それだけでは実現できずWPFに比べて回りくどい方法を使わなければならない、もしくはそもそもSilverlightでは実現できないというパターンに遭遇することがあり、このことのほうが大きな問題です。
そして最も開発容易性に大きく影響するのが、WPFはC/Sアプリケーションとn層アプリケーションのどちらでも構築できるのに対して、Silverlightはn層アプリケーションとしてしか構築できないという点です。開発者がn層アプリケーションしか経験がなかったり、プロジェクトの規模や将来の展望といった観点からn層アプリケーション以外に選択肢がないという場合は別ですが、C/Sアプリケーションのほうが基本的に開発が容易であると思います。また、WPFと異なりSilverlightは非同期呼び出ししかできないという点も、経験のない方にとっては障壁となると思います。
テストについては、Visual Studioが提供する「コード化されたUIテスト」と「単体テスト」は、共にWPFはサポートされますがSilverlightはサポートされていません。
コード化された UI テストと操作の記録でサポートされている構成とプラットフォーム
Microsoft Connect is Retired - Collaborate | Microsoft Docs
※訂正
Visual Studio 2010 Feature Pack 2でSilverlight 4の「コード化されたUIテスト」がサポートされるそうです。
Visual Studio 2010 Feature Pack 2 Announced – Visual Studio news
このような観点から、私はSilverlightでなければならない理由がないのであれば基本的にはWPFを選択したほうが良いと思っています。では、Silverlightでなければならない理由とは何でしょうか。これは以下の2点になると思います。
1.クロスブラウザとクロスプラットフォーム(リーチ)
以下のWebブラウザーで動作させたい場合には、Silverlightを選択する必要があります。
OS | Webブラウザー |
---|---|
Windows | Chrome |
Mac OS | Firefox Safari |
そして、次のインストールエクスペリエンスとも関係してきますが、アプリケーションのユーザーが不特定多数である場合(ようするに企業内アプリでない場合)にも間違いなくSilverlightになります。
また、Mac OS上でデスクトップアプリケーションとして実行したい場合は当然Silverlightを選択し、OOB(ブラウザー外実行)を使用します。
2.インストールエクスペリエンス
これは説明するまでもなく圧倒的にSilverlightが有利です。いくらClient Profileが追加されて軽量になったとはいえ、ランタイムのダウンロードやインストールにかかる時間には大きな差があります。
基本的にはこの2点だと思っていますが、一応いま思いつく限りの細かい点も挙げておきます(当然これ以外のポイントもたくさんあると思います)。
上記以外でWPFが有利な点
- WindowsというOSの力をフルに活かせる(Windows 7のタスクバー関連機能、Ribbonなど)
- Windowsフォームなどの.NET既存資産の活用や統合がしやすい(DataSetの使用、一部の画面をWindowsフォームのままにするなど)
- ローカルリソースへの自由度が高い
- COMインターフェイス以外の外部デバイスとも連携可能
- デスクトップアプリに限らずWebブラウザアプリ(XBAP)でも完全信頼アプリとしての実行が可能
- ClickOnceインストールはアプリケーションのバージョンのロールバックができる
- 真の3Dを扱える
上記以外でSilverlightが有利な点
- Webブラウザ連携やWebカメラ、ストリーミング関連の機能などWebアプリケーションならではの機能はSilverlightのほうが有利
- コントロールの数はWPFにのみ存在するものよりもSilverlightにのみ存在するものほうが多い(Toolkit含む)
- 基本的にはWPFのサブセットだが、
Deep Zoomといった大きなものからINotifyDataErrorInfoといった小さなものまで、Silverlightにしかない機能がいくつかある(トレンドはSilverlightから先にやってくる)
※2010/11/30追記
http://www.codeproject.com/KB/WPF/DeepZoom.aspx - Toolkitで提供されている最新のテーマはSilverlight版しか存在しない
- Silverlight 2か3であればWindows 2000をサポートしている(Silverlight 4は未サポート)
- 以前計測した条件下ではDataGridコントロールのスクロールパフォーマンスはSilverlightのほうが良い場合が多かった
最後に、業務アプリケーション開発という観点で2つの技術を比較した記事を以前@ITに書いていますので、こちらも参考にしていただければ幸いです。
これから業務アプリを開発するならどっち?(1/3) - @IT
Wpf 4とSilverlight 4、これから業務アプリを開発するならどっち?
InfoQさんのこちらの記事も非常に参考になります。