プラグイン vs HTML5 それぞれの「適材適所」のエントリーの解説編です。FlashやSilverlightの「適材適所」について。文章しかなくてすいません。。。
○UIコンポーネントを利用する
ツリーやデータグリッド(Excelのようなセル)のようなHTML formに無いUIコンポーネントが必要であったり、チャートやマップ等のデータビジュアリゼーションを行ったり…このようなUIコンポーネントが既に用意されています。また、サードベンダーから多くの外部コンポーネントが利用できるのもの強みです。FlexではIBMのILOG、SilverlightであればInfragisticsのNetAdvantage等があり、かなり高機能なコンポーネント群です。これらのUIコンポーネントをJavaScriptでクロスプラットフォームでゼロから開発するのはかなり難しいです。HTML5対応ブラウザが普及していけばHTML5向けのUIコンポーネントも充実していくと思うので、これから期待しています。
○デバイスI/Oと連携する
Webカメラからの映像/画像入力、マイクからのサウンドキャプチャ、スピーカーからのステレオ制御等…デバイスをきめ細やかにコントロールする必要がある場合です。また加速度センサーやマルチタッチ、ジェスチャーのAPIも存在します。加速度センサー等はHTML5のAPIでも策定に向けて進んでいるようです。
○バイナリ通信やソケット通信を行う
JavaであればFlash Remoting、.NETであればWCF ServicesといったサーバーアプリケーションのWebサービスとのシームレスな連携ができるのも特徴です。業務系サーバーアプリケーションでこれらの資産と結合しなくてはいけない、という要件はあるかと思います。
またSocket通信は、HTML5でのWebSocketをブラウザーを限定すれば利用できると思いますが、広くカバーするのであればリッチクライアントを利用した方が確実です。
○イメージ処理、3Dグラフィックを行う
例えばARのような高速な画像処理が必要な場合です。その画像処理のライブラリもActionScriptやC#だと充実しています。FlashではPixel Benderが使いこなせれば、高速な画像処理フィルタが開発できますし、Silverlightではプラットフォームに依存しない形であればC#ライブラリが利用できるかと思います。
3D表現については「今すぐ簡易的な表現でもよければ」という前提であれば、Flash/Silverlightを用いることになります。FlashではオブジェクトのZ値は持っており、PaparVision3Dのようなライブラリを併用することで、簡易的な3D表現が可能になっています。Silverlightでも同様にKit3Dのようなライブラリがあります。
ネイティブでの3D表現については、Flash Player “Molehill“が発表されていますが、HTML5でもWebGLの流れがあるので、将来的にはどちらがパフォーマンスが出るか、実装コストが少ないか、で使い分けが出てくるかと思います。
○ビデオ配信を行う
現在はビデオのコーデックに関わる実装について結論が出ていないため、HTML5のVideoタグはブラウザに依存しています。こちらも何らか統一したコーデックのサポートを望むところです。この点、FlashもSilverlightも動画再生は既に実績がありますが、例えHTML5がビデオ再生をサポートしても、きめ細やかなストリーミング再生やDRMコントロールへの対応は当分難しいかと思います。Silverlightはリリース当初からWindows Media Serverに対応していますし、DRMはPlay Readyがあります。FlashでもFlash Media ServerにはFlash AccessというDRM機能があります。また、Flash Media Serverと組み合わせてP2P配信にも対応しています。
○タイポグラフィーにこだわる
Flash Player 10からInDesign由来のテキスト描画エンジンが搭載されているので、文字詰め、ルビ、縦中横等、高度な文字組の表現ができます。CSS3でWebFontが使えるようになりましたが、デザイナーが意図するタイプフェースで見せたいと思っても、フォントのライセンスの問題(特に2バイトフォントでは)から、そのままでは難しいようです。
○デスクトップアプリ化する
radiko.jpのアプリがいい例だと思いますが、ブラウザ上で実行しているものをデスクトップアプリとしても展開したい場合には、FlashではAdobe AIR、SilverlightではOut of Browser等を使えるので、比較的簡易にWebアプリケーションをデスクトップアプリケーションにできます。
○ソースコードを隠蔽する必要がある
ソースコードが「見れるのがいい/見られないのがいい」の議論は置いておいて、最終的にはコンパイル/パブリッシュされるのがFlash/Silverlightです。もちろんSWFもXAPもリバースエンジニアリングできない訳ではないですが、完全にオーサリングやプロジェクトの状態に復元するのは難しいのではないでしょうか。
○古いブラウザでも稼働しなくてはいけない
企業内の情報システムが所以となり、プラグインは新しくできるのに、ブラウザが新しくできない利用環境もあるのではと思います。セキュリティ上の理由からプラグインが実行できないケースもありますから、そのときはHTML+Ajaxとなりますが、JavaScriptがオフになっているケースは…もうやめましょう。
○スキルのあるFlash/Silverlightの開発スタッフがいる
開発案件のプロジェクトを「安全に」こなすのが優先されるなら、これに勝る動機はありません。Flasherや.NETエンジニアに比べて、HTML5でバリバリ開発できるヒト、を現状確保するのは難しいです。
他にもいろいろ挙げられると思いますが、ここらへんで。