読者です 読者をやめる 読者になる 読者になる

しばやん雑記

ASP.NET とメイドさんが大好きなフリーランスのプログラマーのブログ

Windows Phone 7 に対する勘違いを正そう

Windows

ことの発端はこの記事。追記される度に酷い勘違いされているようなので、ブログでいろいろ書きます。

WP7のアプリは、ブラウザのプラグイン向けプラットフォームであるSilverlight。Silverlightの普及率はまだまだだと思うのですが(Silverlight必須のサイト見たことないし)、Silverlight自体は.NET frameworkのサブセットとなっているので、Windows向け開発者と言う非常に広い開発資源の裾野が見込めます。ただ正直、WMのときも.NETアプリは結構ありましたが、どれも超もっさりが基本だったので、動作速度は全く期待できそうにありません。

iPhone vs Android vs WindowsPhone7を考える | 無線にゃん

この時点で Silverlight について誤解されていますね。Windows Phone 7 の Silverlight はブラウザプラグインの Silverlight とは明確に分けられて、それは MSDN の記述*1やランタイムの挙動を見ても明らかです。

Silverlight 必須のサイトを見たことが無いからシェアが低いというのは、超展開にもほどがあると思います。Silverlight の世界シェアを http://www.riastats.com/ で確認すると、最新の Silverlight 4 で 67.84% となっていて公開されてから 3 年ほどの割にかなり頑張っていますね。国内でも Yahoo! トップの広告で Silverlight がたまに使われていますし、有名どころとしては GyaO は Silverlight に移行しましたね。

Windows Phone 7 は Silverlight 3 ベースなので Windows アプリなどを C# で書いている開発者さんたちは慣れた言語と IDE を使えるので、確かに潜在的な開発者は他のプラットフォームよりも多いはずです。WP7 の世界展開は行われていくと同時に、開発者さんはどんどん増えていくと思います。

決定的に間違っているのが Windows Mobile 上では .NET アプリが遅いから Windows Phone 7 も動作速度が全く期待できそうにない という主張。この時点で Windows Phone 7 を触ったことのある方は「この記事を書いた方は実機に触ったことが無いのかな?」と思ったはずです。

さて問題のWP7。アプリ実効速度もおそらく激もっさり、まだ有力なハード提供メーカは片手間の数社とノキアだけ。ちょっと普及する萌芽を見出せません。しかし一点個人的に注目しているのが、Silverlightと言うところ。VCでもVBでもなんならJavascriptでもOKと言う裾野の広さは、ひょっとすると多くのWindows向け開発者を引き込めるのではないかと思います。なんつっても、Windows向け開発者の数はiPhoneどころじゃない。フリーソフト配布サイトとか見ても、その開発者の多さに驚きます。従来VBでWindows向けお遊びソフトを作って遊んでいたような人が、iPhoneを見て頑張ってiPhone開発言語を覚えて遊んでたけど、WP7なら昔取った杵柄とソースコード資源を再利用できる、となれば、気軽に舞い戻ることも十分に考えられます。WP7が普及するとすれば、おそらくこの流れが完全にハマったときでしょうね。そのためには、マイクロソフトが開発環境の提供などで数多くの優遇をしていく必要があるような気がします。要するにマイクロソフト次第かなぁ、と。

Windows Phone 7 の Silverlight は先ほど書いた通り、ブラウザプラグインの物とは別なので C# と VB でのみ開発できます。JavaScript がメインで使われていたのは Silverlight 1.0 の頃までですね。

ぶっちゃけてしまうと、今の Microsoft が Windows Phone 7 に全力かというと、ちょっと違う感じですね。かなり力を入れていることはわかるのですが、まだまだ対応言語や開発者ツール的にも iOS や Android とガチで戦うするには足りないです。しかし、その辺りに関しては 4 月の MIX11 で何らかの発表が行われる予定ですし、年末には IE9 や多言語対応などを含んだアップデートなどが予定されています。

まだ準備段階という感は拭えないですが、今年の後半からはかなりの追い上げが期待できるプラットフォームではあります。
ちなみに Microsoft は昔から開発者に対してかなり手厚いサポートを行ってくれています。事実、Windows Phone 7 の開発環境は一つのインストーラだけで全て入りますし、全て無料です。

一部の方々へ>いやもう寝言だなんだはいいからさ、具体的にObject-CやJava with dalvikとSilverlightで同じロジックを書いたらSilverlightのほうが速いと断言してよ。ソースがどうとか言わないから。断言さえしてくれればいいんですよ。私のほうが間違ってる可能性は高いんだからさ。なんでその一言だけ言えないの?こっちも結論が出なくてもやもやしっぱなしなんですよ。

うーん…。「もっさり」と表現されていたので、ユーザーインターフェースのレスポンス、つまりユーザーエクスペリエンスについて書かれていたと思っていたのですが、急に話が飛びましたね…。

とりあえず言えるのはコンパイル時にネイティブコード生成する Objective-C (Cocoa) が一番速いですよ。言語の実行速度としてはですが。

Dalvik と Silverlight (CLR) は中間コードから実行時にネイティブコードを生成して実行しますし、メモリ管理が Objective-C は参照カウンタで Dalvik と Silverlight はガベージコレクションですし、どう考えてもオーバーヘッドが少ない Objective-C の勝ちです。Dalvik と Silverlight は GC のチューニングとか、ライブラリの差とかありますがあまり変わらないでしょう。

しかし、最近は JIT の性能も上がっていますし、行う処理次第では静的にネイティブコードを吐き出す Objective-C よりも仮想マシンを使った Dalvik や Silverlight の方が、より実行時の環境に適したコードを生成することが出来るので、高いパフォーマンスを得ることも出来ます。

ですので、言語としての差はどんどん縮まりつつあります。無視できるレベルと言っても良いかもしれません。

重要なのは、この言語自体の実行速度の差がアプリケーション全体のパフォーマンスに関係してくるかどうかです。はっきり言ってしまうと、Linpack のスコアが良いプラットフォームなら最高のユーザーエクスペリエンスを得られるんでしょうか?一秒間に計算できる数が多ければ素晴らしいプラットフォームなんでしょうか?

遅い遅いと言われていた Windows Mobile 6.5 の T-01A とかは、1GHz の Snapdragon を積んでいるのでCPU の性能は当時の iPhone や Android より上でしたが、動作は非常に遅く使いずらいものでしたよ。

私の主張としては、最近のプラットフォームは特定の処理にかかる時間を 10ms から 5ms に最適化するようなことをするのではなく、アプリケーション全体としてのユーザー体験を向上させることに力を注いでいるということです。その点では WinForm は良くなかったですが…。
話はちょっとずれますが

少なくとも私の中のイメージでは.NETはもっさりだし、以前VB5.0からVB.NETにフリーソフトを移植したときあまりにもっさりだったので公開を諦めたこともあったからです。

この一文はもうちょっと言葉を足して修正した方が良いです。このままだと Windows Phone 7 開発者だけじゃなくて .NET 開発者全員の怒りを買います。

*1:Silverlight for Windows Phone 7 となっている。