かずきのBlog@hatena

すきな言語は C# + XAML の組み合わせ。Azure Functions も好き。最近は Go 言語勉強中。日本マイクロソフトで働いていますが、ここに書いていることは個人的なメモなので会社の公式見解ではありません。

WinRTとWPFとSilverlightと時々クラウディアさん

Windows 8の話題性から新たに追加されたWinRTというネイティブな環境が最近ホットです。Windows 8の目玉機能のMetroスタイルアプリケーションを作るために使用するので今一番あついテクノロジだと個人的に思ってます。ちょっとつらつらと駄文を書いてみようかなと思い書いてみます。

WPFSilverlightとの対比・・・

それと対比されるテクノロジとしてWPFSilverlightがあります。個人的には、同じようなスキルセットでものを作れる環境というだけで、そんなに競合するものではないと感じているのですが、世の中だと、そう捉えられてるわけでもないのかなーという雰囲気を感じてたりもします。

WPF

WPFは、今更説明するまでも無いですが.NET3.0から追加された現時点で最新の、いわゆる普通のWindowsアプリケーションを開発するためのプラットフォームです。 .NET Frameworkのフル機能を使えてWindowsの最新の機能(ジャンプリストとか)に対しても標準で追随しています。.NET4.5ではリボンも標準でついてくるようです。

Silverlight

Silverlightは、バージョン番号だけで言うと最新は5で.NETよりも数字は大きいですがWPFBCLのサブセット的なファイルサイズ的にも機能セット的にもコンパクトな環境です。Silverlightの特長として、ブラウザのプラグインでマイクロソフトのものの中では登場当時は珍しくWindows + IEの組み合わせ以外でも動くマルチプラットフォームな環境です。開発もC#のような強力な言語と開発環境もVisual Studioを使えるので、かなり簡単にブラウザ上でWindowsアプリケーションライクな見た目や操作性を実現できます。さらに最近では、ブラウザのプラグインだけではなくブラウザ外でWindowsアプリケーションとして実行する形態も登場して、機能強化されています。さらに、権限の昇格を行うとWindowsのAPIやCOMを使えるため実現可能な機能は(実現するのにかかる労力は置いとくと)ほぼWPFと同じになりました。

WinRT

Windows 8のMetroスタイルアプリケーションを作るためのプラットフォームです。WPFSilverlightと同じくXAMLC#で構築することができます。なんといっても特徴なのは背後でうごめくのはネイティブコードだということです。あと全画面表示が基本で、いままでのアプリケーションとはデザイン面でがらっと変わる雰囲気のアプリケーションを作るのが目につきます。機能的にはUIを作るために必要最低限な機能に絞られていて、WPFのサブセットであるSilverlightをさらに貧弱にしたような機能セットを持ってるような印象です。何も考えずにやるとSilverlightを使うよりも最初はストレスになると個人的に思いました。

ここ最近の動きと今後の所感

WinRTは、まだ出てないテクノロジなので、他の2つについて簡単に書きます。

WPF

WPFについては、.NET Frameworkのバージョンアップと共に地味に機能追加がされています。Windows自体もデスクトップOSとしての進化も、ここ最近あまり目新しいものがない(ジャンプリストとかくらい?)ため細かいクラスやインターフェースの追加(Silverlightとの差異を埋めるもの)に留まっています。WPF Toolkitと呼ばれるCodeplex上で提供されている追加コンポーネントについても2010年2月が最終版ということで改版、機能アップスピードはゆるやかです。今後出る.NET Framework 4.5でもリボンインターフェースへの対応+性能改善等に留まるようです。ただ、WindowsのネイティブなAPIをたたく以外の方法でWindowsのフル機能にアクセスするアプリケーションを開発するときの選択肢としては有効な位置にいると思います。

Silverlight

Silverlightについては、バージョン5が出るまでは1年に1回のバージョンアップが行われてましたが、Silverlight 5が10年サポートされると言うことと、今後のロードマップが現状真っ白なことと、Windows 8のMetroスタイルのIE10でブラウザプラグイン自体が廃止になったため、最近ネガティブな意見が多かったり色々噂が絶えない状態だったりします。
ただ、マウスとキーボードで操作することが前提のデスクトップ環境では今迄通り動作します。なので、枯れた安定した環境でブラウザでRIAを実現したいときや軽いランタイムでWindowsアプリケーションを作りたいといったニーズでは今も普通に使えるプラットフォームです。

WPFSilverlightどっちがいいの?WinRTとの使い分けとかは?

Microsoftから今後のロードマップ等は提供されていないため、Silverlightの今後は不明瞭ですが今後10年使えるという前提での話になりますがWindows8がターゲットでWebと連携してなにかしらするものならWinRTで。Windows8以外やマウスやキーボードに最適化されたUIが必要ならSilverlightWPFになりますが、その場合は、単純にWPFのほうが機能が豊富なのでWPF使うかなーというのが個人的な感覚です。ただ、Silverlightだと配布や更新の仕組みを作るのがWPFより楽なのとランタイムのサイズが小さく簡単に導入できるので、そのメリットが活きるケースはSilverlightかなという感じです。Web系のシステムが主流なところだとSilverlightのほうがWPFより自然に溶け込めますからね。

因みにDBに直接接続したいといったケースがある場合はWinRTやSilverlightは選択肢から外れます。WinRTは、そんな機能はそもそもないし、SilverlightはCOM使えば出来るけど…インテリセンスが効かない(dynamic型を使う)ので、そのデメリットを取ってまで、あえて作るのか?と言われると上から降ってきたときは涙を流しながらやりますが、自分で選択することは個人的にはないと思います。


ということでまとめるとこんな感じのフローです。

まぁこの他にもWinRTだとストアからの配布だったりといった配布形態が従来と異なるといったポイントもありますが、それは今のところ不明なので頭のなかのフローを単純化するとこんな感じかも。ほかの人はどうかな?

Portable Class Libraryというものも

やる気を出せばWPFでもSilverlightでもWinRTでも同じDLLを共有できるという代物です。これで本当の見た目に関する部分以外は共有できるという用途を想定して作られてます。詳しくは↓を。
特集:XAMLファミリ共通開発のすゝめ(前編)Windows 8時代のGUI開発を考える
マルチプラットフォーム開発 - ポータブル クラス ライブラリ: 入門

以上、駄文へのお付き合いありがとうございました。