.NET開発者中心 厳選ブログ記事

Windows 8時代にWPFとSilverlightはどちらが生き残れるのか?
―― 「Yuya Yamaki's blog」より ――

グレープシティ株式会社 八巻 雄哉
2011/11/04

「.NET開発者中心 厳選ブログ記事」シリーズでは、世界中にある膨大なブログ・コンテンツの中から、特にInsider.NET/.NET開発者中心の読者に有用だと考えられるブログ記事を編集部が発掘・厳選し、そのブログ記事を執筆したブロガーの許可の下、その全文を転載・翻訳しています。この活動により、.NET開発者のブログ文化の価値と質を高め、より一層の盛り上げに貢献することを目指しています。

本稿は、ブログ記事「Yuya Yamaki's blog: Windows 8以降のマイクロソフトのアプリケーション開発技術」に簡単な校正・加筆を行ったうえで転載したものです。

 次期Windows 8(コード名)が登場すると、「Metroスタイル」という新しいアプリケーションの形態が追加されるため、アプリケーションの開発技術の選択肢はさらに増えることになります。しかしながら、Windowsプラットフォーム上で実行される多くの業務アプリケーションにとっては、WPFかSilverlightのどちらかになる(もちろんWindowsフォームも実行可能)という状況はそれほど変わっていないと思います。

Windows 8時代のWindows/Webアプリケーション形態(英語)
Productivity=プロ向けの生産性重視。
Consumer=コンシューマ向けの簡単さ重視。

 もし、「どのアプリケーション開発技術を選択してよいか、分からない」という場合には、下記のBlogに書かれたフローチャートが役に立つかもしれません。

上記のサイトから引用(英語)

 ここからはわたし個人の意見です。あくまでも個人の意見ですので、書き手の都合のよいように解釈、判断している部分もあるかもしれません。

 WPFかSilverlightのどちらかを選択するということは変わっていませんが、今後はSilverlightよりもWPFを選択するケースがこれまでよりも多くなるのではないかと予想します。その理由は以下のようなものです。

Silverlightの居場所は?

 これまでは、Silverlightがマイクロソフトのアプリケーション開発技術の中で最もマルチに対応できる選択肢だったと思います。それはWindowsアプリケーションからWebアプリケーション、ビジネス向けのアプリケーションからコンシューマ向けのアプリケーションまでといった具合にです。

 しかしながら、現在の状況、そして今後の流れを考えた場合、その状況は変わってくると予想します。

WindowsアプリケーションとWebアプリケーション(クロスプラットフォーム)

 かつてSilverlightはその特徴の1つとして「クロスプラットフォーム」を大きく掲げていました。しかしながら、Silverlightは徐々にクロスプラットフォームをあきらめていったように思います。

 フルサイズのWebブラウジングがPCだけのものだった時代には、PCの主要なプラットフォームさえカバーできればクロスプラットフォームであると言えました。つまり、今現在のSilverlightがサポートするWindowsとMacの2つだけでも十分だったのです。

 しかし、スマートフォンやタブレットといったPC以外のWebブラウジング環境は、すごい勢いで増え続けています。かつてWindows MobileやNokiaをサポートするとアナウンスされていたSilverlight 2 for Mobileはキャンセルされました。そして、Windows Phone上に載っているSilverlightは通常のアプリケーション・プラットフォームであり、Webブラウザのプラグインではありません。

 Silverlight 4では、Mac環境をサポートしない「COMオートメーション」が追加されました。このことは、Silverlightのクロスプラットフォームに対する方向性の転換を示すものと捉えることもできます。今年中にリリースが予定されているSilverlight 5でも、Windowsプラットフォームのみの機能である「P/Invoke」が追加される予定です。

 そして、マイクロソフトが「本当の意味でのクロスプラットフォームは、HTML5だ」と考えていることは、下記のボブ・マグリア氏の発言、そしてMetroスタイル版のInternet Explorer 10がプラグインをサポートしないことからも明らかではないかと思います。

 これらのことから、わたしはSilverlightの活躍場所はクロスプラットフォーム(Webアプリケーション)ではなく、Windowsアプリケーションであると考えています。

コンシューマ向けアプリケーションと業務アプリケーション

 SilverlightがWPFに対して持っているアドバンテージとして、DeepZoomやSmooth Streamingといった機能があります。これらは業務アプリケーションよりも、コンシューマ向けのアプリケーションで使われる機能です。

 これまではWindowsアプリケーションの開発技術に、業務向けもコンシューマ向けも区別はありませんでした。しかしながら、Windows 8がリリースされると多くのコンシューマ向けアプリケーションがMetroスタイルとして作成されることになると思います。また、多くの場合、SilverlightはWPFに比べてMetroスタイル・アプリケーションへの移行が簡単です。

 そのため、新規のアプリケーションだけでなく、既存のコンシューマ向けSilverlightアプリケーションもMetroスタイル・アプリケーションとして登場することが予想できます。これは、今後、Metroスタイル・アプリケーションでDeepZoomやSmooth Streamingが提供されるかどうかも大きく影響するでしょう。

 これらのことから、わたしはSilverlightの居場所は徐々に業務向けに偏ってくるのではないかと考えています。

Silverlightの居場所

 Silverlightの主な活躍場所は業務向けのWindowsアプリケーションです。これまでと異なり、ほぼ同じ土俵でSilverlightはWPFと比較検討されることになるのではないでしょうか。

WPFのアドバンテージ

 業務向けのWindowsアプリケーションという土俵で両者を比較した場合、WPFはSilverlightに比べて以下の点でアドバンテージがあると思います。

Windowsフォームからの移行

 業務アプリケーションの開発において純粋な意味での新規開発は少なくなってきており、WPFかSilverlightかを選択する機会というのは主に既存のアプリケーションの移行になるのではないかと思います。現在、Windowsプラットフォーム上の業務アプリケーションで最も多いのは、Windowsフォームではないかと思います(その次はもしかしたらVisual Basic 6.0かもしれません)。従って、Windowsフォームから移行がしやすいかどうかは、WPFかSilverlightかを選択する上で重要なポイントになるのではないかと思います。

 WPFは、Silverlightに比べて以下のような点でWindowsフォームに近いと言えます。

  • サブセットではないフルの.NET Frameworkクラス・ライブラリを使用できる
  • サービスを経由することなく、直接、ADO.NETを使ってデータベースにアクセスできる

 また、Windowsフォームから段階的な移行がしやすいのもWPFの特徴です。WPFではWindowsFromsHostコントロールを使ってWPF要素内にWindowsフォーム・コントロールを表示することができます。先の投稿で紹介したように、WPF 4.5において「WPFでホストされているWindowsフォーム・コントロールが常にWPFコンテンツの一番上に表示される」という問題が改善されるため、WindowsFromsHostコントロールを使って一部分をWindowsフォームのままとするWPFアプリケーションがより現実的なものとなります。

開発生産性

 Silverlightは、ランタイムのサイズをコンパクトに保つため、同じ名前のクラスやメソッドでもWPFに比べてメンバ数が少なかったりオーバーロードの数が少なかったりします。特に、「結果的には同じことができるが、これがあると便利」といった類のものの多くは実装されていません。

 例えば、WPFのColor構造体には新しいColor構造体を作成するためのメソッドが5つ存在しますが、Silverlightは1つだけです。

メソッド名 WPF Silverlight
FromArgb
FromAValues -
FromRgb -
FromScRgb -
FromValues -
Color構造体を作成するためのメソッドに関するWPFとSilverlightの比較表

 このような差は機能レベルで比較された場合には違いとして出てきませんが、開発生産性に影響する可能性があります。

タッチ操作への対応

 Windows 8により、タッチ可能なWindowsというものが世の中に普及することになります。タッチ可能なデバイスではMetroスタイルのアプリケーションを使用するのがベストだと思いますが、業務アプリケーションにおいては既存資産やコストの兼ね合いから、既存のアプリケーションを最低限のタッチ操作に対応させたいといった需要も少なからず生まれてくると予想します。

 また、タッチ可能なデバイスはスレート/タブレットPCだけとは限らないと思っています。タッチ・ディスプレイの生産コストが下がれば、需要があるなし関係なくタッチ可能なデスクトップPCというのも徐々に増えてくると予想します。PCメーカーとしても、Windows 8を搭載しているにも関わらずタッチ機能が備わっていないPCは売りづらくなるでしょう。これにより、デスクトップで基本的にはキーボードとマウスを使いながらも、一時的、あるいは部分的にタッチを使って操作するという人もちらほら出てくるのかもしれません。

 タッチ操作への対応において、WPFは以下の2点でSilverlightよりも有利です。

  • 標準コントロールがデフォルトでスクロールなどの基本的なタッチ操作に対応している
  • 「Manipulation」と呼ばれる高レベルなマルチタッチのインターフェイスが用意されている

これまでSilverlightが有利だったもの

 これまで業務向けのWindowsアプリケーションにおいてWPFよりもSilverlightが有利とされてきた点のいくつかは、今後、改善されていくと思います。

ランタイム環境のセットアップ

 下記の記事で書いたとおり、SilverlightはWPFに比べてランタイム環境のセットアップが容易です。

 これは主にランタイムのインストーラ・サイズが5MBytes台と小さいためであり、いくら.NET Framework 4で大幅にインストーラ・サイズが削減されたといっても、有利であることに変わりはありません。しかしながら、プレインストールされているOSがあるという点では、.NET Frameworkが有利であるといえます。そして、現在、一般的に使用されているWindows OSの中で唯一.NET FrameworkがプレインストールされていないWindows XPは、もはや一番多く使用されているWindowsではなくなりました。

アプリケーションの起動速度

 WPFではなくSilverlightを選択した理由として、WPFアプリケーションの起動の遅さを挙げているケースがありました。.NET 4.5ではCLRに以下の5つの改善が施されており、それらは主にパフォーマンスに関するものとなっています。

  • Background mode for Server GC
  • Managed Profile Guided Optimization
  • Automatic NGEN
  • Multi-core background JIT
  • Re-JIT

 これらの新機能の紹介のされ方を見ると、「Metroスタイル・アプリケーションのための改善」という要素が強いようですが、これらはWPFなどのMetroスタイルではない.NETアプリケーションにとっても有効な改善です。特にこれまでネイティブ・コードでしか利用できなかった「PGO(Profile-Guided Optimization:ガイド付き最適化のプロファイル)」がCLRで実行されるアプリケーションでも利用可能になるというのは、非常にインパクトが大きいと感じます。

最後に

 このほかにWPFとSilverlightの将来に影響しそうなものとして、WCF RIA ServicesとVisual Studio LightSwitchを挙げておきます。これらは特に今回、動きがありませんが、今後、注目しておきたいポイントです。End of Article

【筆者プロフィール】
グレープシティ株式会社 八巻 雄哉

 エバンジェリストという肩書でマイクロソフトの開発技術と自社のコンポーネント製品の普及に従事。得意分野は業務アプリケーションのユーザー・インターフェイス。ほれ込んでいる技術はXAML。


インデックス・ページヘ  「.NET開発者中心 厳選ブログ記事」


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