新しもの好きプログラマの耳より情報ブログ

仕事でもあるプログラミングについて役に立ちそうな情報を発信していこうというブログです。役に立たなそうな情報はfacebookで。

C#で作るWebアプリの選択肢と、xbap形式の使いどころの無さ

C#で作るWebアプリの選択肢として、完全信頼のxbap形式というものがある。

これを仕事で使ってみた感想と、Webアプリのその他の選択肢との比較をまとめてみた。
xbap形式(WPF)を選択肢に含めた比較情報は少なかったので、役に立つのではないかと思う。
ただし私がC#派なので、メジャーどころのPHPRuby on Railsなどは対象外とした。そういった別言語との比較はまたの機会に。

なおここでいうWebアプリとは「サーバーとの通信が必要で、かつクライアントからHTTP経由でアクセスできるアプリ」くらいの広い意味合いを指す。

今回のポイント

  • C#でWebアプリを作る場合、用途に応じて2つの選択肢から選べば良い。
  • xbap形式はその2つには含まれず、使いどころがない。デメリットのほうが大きい。

 

最初に、そこに注目した経緯を簡単に説明しておく。

会社の製品でサーバーのDBを操作するツールをWebアプリ化することになり、完全信頼のxbap形式が採用された。
私は途中からそのアプリを引き継ぐことになり、去年までの期間で合計数ヶ月はそれに取り組んでいた。
しかし正直に言って注意事項ばかり多くてメリットは感じられず、もっと良い選択肢があったのではないかという印象が残ったので、改めて調査してみた。
結論としては、実現方式の選択ミスだった。完全信頼のxbap形式は使いどころがほとんど無く、今回の目的とも合っていなかった。

これは次の機会にはちゃんと実現方式を選択しないと損するばかりだと思い、比較のために色々と調べてみた。
自分なりには結論に達したので、比較調査の結果をまとめておこうと思い立ったというわけ。

先に調査結果をまとめて、xbap形式を実際に使ってみてどういう位置づけだったかを後にまとめる。


まずは調査結果。
C#でWebアプリを作るという限定条件だけだとかなりの選択肢が出てくるようだが、特に過去の資産などを考慮せずに新しく選ぶなら次の2択であるという結論になった。

  1. ASP.NET MVCを使ったWebアプリケーション (必要に応じてJavaScriptHTML5なども使用)
  2. WPFデスクトップアプリケーションのClickOnce配信

特徴が全く異なるので、どのような用途を目的としているかによって選択肢は決まってくる。
それぞれ次の特徴を持っている。

  1. ASP.NET MVCを使ったWebアプリケーション (必要に応じてJavaScriptHTML5なども使用)
    長所:
    • クライアントの対応環境が多い。サーバーはWindowsがほぼ必須だが、クライアントはOSやブラウザをあまり選ばず、モバイルも対応できる。クライアントでのインストール作業も不要。
    • コードがサーバー側に集中するため、コード量が少ない。View内のチェック処理やアニメーションをJavaScriptでやることはあっても、Controller-Model間の処理はサーバー内で完結するので通信部を独自に実装する必要はない。
    短所:
    • クライアントの処理速度や見た目を良くするのが難しい。普通に作るといかにもWebサイトという外見になり、非同期処理やアニメーションなどが必要ならJavaScriptHTML5などを利用して作りこんでいく必要がある。
  2. WPFデスクトップアプリケーションのClickOnce配信
  3. 長所:
    • クライアントの処理速度や見た目は当たり前だがデスクトップアプリケーション並。WPFは非同期で見栄えのするUIを作るために登場したフレームワークなので、普通に作ってもそれなりに見栄えがする。
    短所:
    • クライアントの対応環境が少ない。クライアントもWindows+IE+.NETの組み合わせが必須となる。
    • コード量が多い。Controller-Model間で通信が発生するので、そこをWCFなどで独自に実装する必要がある。


つまり、クライアントの対象環境を広げたいのであればASP.NET MVC
対象環境がWindowsに限られる社内アプリケーションなどでクライアントの見栄えや速度を重視するならばWPF
この2つを目的に応じて選択すれば良い。

この他にもASP.NET Webフォーム、Silverlight、ストアアプリケーション、LightSwitchなど選択肢は複数あったが、
将来性が無かったり中途半端に制限が多かったりとあまり採用すべきシーンを見いだせなかった。
LightSwitchはそもそもプログラムにコストを掛けずに簡単にDB操作アプリを構築するユーザープログラミングの技術に近いのでそもそも比較すべきではないかもしれない。


では冒頭のxbap形式はどういう時に使うのか。基本的にはWPFなので、長所と短所はWPFと同じである。
その上で、更に次のいずれかの制約がある場合はWPFでは実現できないのでxbap形式がふさわしい。

  • IE以外のウインドウを開くことが許されず、IEの中で処理をする必要がある
  • Webサーバーでexe形式の実行が許されていないが、xbap形式の実行は許されている

もちろん欠点もある。

  • キャッチされない例外が発生した際にイベントログ等に情報やダンプが残らず、例外を示すテキストへのリンクがIE上に表示されるだけ
  • IEの戻る・進む・更新などの操作をされると、アプリケーションが強制的にリセットされる
  • WCFの使用に制限がある

率直に言って、欠点はかなり影響が大きいが制約の方は現実的にあまりないケースだと思う。
xbap形式を選択すべきシーンというのはほとんど無いのではないか。


以上のようにまとめてみると、特に強い必然性もないのにxbap形式を採用したのは完全に誤りだったことが分かる。
今後はこの調査結果を判断材料にしようと思う。