Silverlight2公式HP2008年11月頃に正式リリースされたSilverlight2(端的にいうとMicrosoft版Flash。開発言語にVB.NET、C#が利用できる。)で、ビジネスアプリケーションが生成できるのかを調べてましたので、メモ書きとして残しておきます。
なお、今回は概念的な話を中心としていますので、コードは掲載していません。
1.開発環境Visual Studio 2008(有料)の場合、サービスパックを当てないと開発できませんので、マイクロソフトのサイトからパッチを導入してください。
なお、バッチの導入順序は、「SP1→P1 用 Microsoft Silverlight Tools」の順になります。
Microsoft Visual Studio 2008 Service Pack 1 (インストーラ) Visual Studio 2008 SP1 用 Microsoft Silverlight Toolsまた、Silverlight2のデザイナ向け開発ツール Expression Blend2 も持っている場合は、こちらも開発用のサービスパックがあるので、導入しておきましょう。
Microsoft Expression Blend 2 Service Pack 1※無料の開発環境として、「
Microsoft Visual Studio 2008 Express Edition SP1」があります。こちらの環境でも、ほぼ同様のことができると思いますが、後述するWCFサービスアプリケーションが開発できるかどうかは確認しておりません。
※後述でもでてきますが、VisualStudioではSilverlightアプリケーションのインターフェイスをGUIを用いて開発できません。GUIを用いて開発するには、Expression Blend2 という別売りのソフトを導入する必要があります。
本ソフトはデザイナ向けのツールであるため、なくても開発は可能です。
そのため、開発のみであれば、
Visual Studio 2008 Standard Edition
単体を、デザイン開発環境までそろえるなら、Visual Studio 2008 Standard Edition と Expression Blend2 がセットになった
Microsoft Expression Studio 2
を購入するとよいでしょう。
2.開発時の障壁2-1.Silverlight2アプリケーション「1」の環境を構築できたら、VisualStudioの「新しいプロジェクト」画面にSilverlightが追加されています。
「Silverlightアプリケーション」を選択して開発を進めたいのですが、「Silverlightアプリケーションの追加」というウィザード画面が起動してしまい、面食らいます。
このあたりの詳細は
Silverlight International Learn(日本語) にチュートリアルが掲載されていますので、一読されることをお勧めします。(チュートリアルの0〜5ぐらいまでは抑えておいたほうがいいでしょう。なお、チュートリアル0は目次みたいなものですので、さらっと読んでおけばよいでしょう。)
2-2.XAMLVisualStudioでは、SilverlightのインターフェイスをGUIを用いて記述できず、従来のWindowsアプリケーションのような開発はできません。
そのため、Silverlightのインターフェイス用の言語であるXAMLを覚える必要があり、結構大変です。
主要なタグ(グリッド、テキストボックス、ボタンなど)の構文については「2-1」に掲載したサイトのチュートリアルにありますので、そちらを参照してください。
2-3.Silverlight2における特有の技法SiverlightはWebブラウザ上で動作するため、Windowsフォームと比べると様々な制約があります。
代表的なものを挙げます
・画面遷移、ダイアログ処理が特殊 そもそもウインドウを新規に生成することはできないので、
「現在の画面の中身を入れ替える」
(
http://silverlight.net/learn/learnvideo.aspx?video=56933)
などの独特の実装をしなくてはならない。
※メッセージボックスのみ従来のような構文で実装可能。
・DB処理を書けない Silverlightアプリケーション上からはデータベースに関する処理は書けません。
そのため、WCFサービスというIIS上で動作するWebAPIを開発する必要があります。
※後述しますが、WCFサービスはVisiaulStudio上で開発可能です。
※MSの技術に固執しない場合、WCF以外の選択肢があります。(未確認)
・非同期処理が多い Windowsフォームにおいてはあまり非同期処理はないのですが、
SilverlightでWebAPIを呼ぶと基本的に非同期になるので、
非同期を考慮したUI制御が必要になります。
例:検索処理を例に挙げますと、
Windowsアプリケーションでは「検索ボタンクリック時イベント」に
検索処理を実行する
検索結果を画面表示する
と記述するところですが、
Silverlight側の処理は、「検索ボタンクリック時イベント」には
検索処理を依頼する。
だけを記述し、それとは別に「検索終了イベント」が発生したら、
結果を画面に表示する
となる。
この「検索ボタンクリック時イベント」から「検索終了イベント」の間、
ユーザーはアプリケーションの操作が可能で、再度クリックボタンを
押下することもできる。
・WCFサービス、またはグリッドが貧弱? ここでいう、グリッドとはGridではなくDataGridのことを指します。
(SilverlightでいうところのGridは、レイアウト用のコントロールで、
(DataGridというのがExcelのような表組みのコントロールです。
何が貧弱かというと、
「DataTableクラス(2次元配列)を表示できない」
というところです。
WindowsフォームでいうところのDataGridViewにDataTableクラスを突っ込むと、
ヘッダーの表示から、データの表示までが行われますが、
DataGridではそれができない模様です。
そもそも、WCFサービスを用いてDataTableクラスを返せないので、この問題が
DataGridにあるのか、WCFサービスにあるのかはわかりませんが・・・。
検索結果など、単なる読み取り情報までエンティティ定義を
しないといけないのは、さすがに面倒。
2-4.WCFサービス(WebAPI)DB処理はSilverlight上で実装できませんので、別途WCFサービスという汎用的なWebAPIプロジェクトを用意する必要がありますが、これ自体はそれほど難しくありません。
主の処理としてはSilverlight向けにモデル(エンティティ)を公開する場合、
クラスにはDataContract属性をつける
プロパティにはDataMember属性を付ける
WebAPIにはOperationContract属性を付ける
ぐらいしか覚える必要がありません。
※実際にはもっと覚えることはありますが、VisualStudioが自動処理してくれるため、あまり意識する必要がありません。
デバッグも特に意識しなくても、従来の感覚で行えます。
問題は本番環境へのリリース時です。
というのも、サーバーを通してDBにアクセスすることを許可しているため、セキュリティを考慮する必要が出てきます。
私自身、サーバーセキュリティの知識はあまりないので詳しく説明できませんが、少なくとも以下のことを行わないと、そもそも動きません。
・Silverlightポリシーファイルの設置 Siverlightを経由してWCFサービスを利用する場合、
WCFサービスを提供するサーバー側に、利用を認めるかどうかを
判断するファイルが必要になります。
同ファイルの設置場所は、ルートフォルダ(例 C:\Inetpub\wwwroot)です。
参考:
MSDN ネットワーク セキュリティのアクセス制限 (Silverlight 2) ・DBへのアクセス権限 DBの認証方式をWindows認証にしている場合、
WCFサービスを利用してくるユーザーは「ASPNET」というユーザー名であるため、
同ユーザーがDBにどこまでアクセスできるのかを設定する必要があります。
・サーバーへの書き込み権限 ログファイルやテンポラリファイルなどをサーバー上に残す場合、
「ASPNET」ユーザーが作業フォルダに対して適切な権限(例:編集権限)を
与える必要があります。
以上になります。
最後に、私がマスタメンテをSilverlight2で作成してみた感想をつらつらと書いてみます。
・ビジネスアプリケーションを作成することは可能だろう。・Silverlightのビジネスロジック部分は、UI制御で相当汚くなるだろう。 Windowsフォームの、BindingSourceクラス、BindingNavigatorクラスの
ようなものが出てくると大分変わると思います。
ちなみに、入力制御をモデル側でなく、UI側で実装した場合、バグは出やすい。
・Windowsアプリケーションに比べ、 ・アプリケーション配布負荷の軽減(インストール、DBドライバ・設定)
・ログ回収コードの軽減(サーバ上に直保存できるため、回収処理が不要)
・WCFサービスによるシステム間連携の軽減
・デザイナとの協業が楽
・一般(外部)公開への展開が見込める
あたりがメリットで、
逆に、
・UI制御コードが増加する可能性あり
・新規技術学習コスト(XAML、WCFサービス)
・サーバー導入コスト(IISサーバが必要になる可能性あり)
・セキュリティ対策(サーバー設定知識が必要)
あたりがデメリット。
・純粋なWindowsアプリケーション開発者は、 「
XAML
」、「
WCFサービス
」
を勉強してみるとよい。
・Silverlight2自体はApacheなどの非MSサーバで操作すると思うが、 WCFサービスはIIS以外では動作しないであろうから、MSサーバーは必要。
※WCFサービスを用いないのであれば話は別
・WCFサービスが構築できると、システム間連携の大きな転換期を迎えられそうだ。・(個人的な課題)
WCFサービスがマルチスレッドなのかどうかがイマイチわからない。
特別な記述は一切していないが、デュアルコアのPC上で動作させると、
2処理までは平行して走る。
ただし、変数を共有しているようにも見えない。
このあたりはまだまだ調査不足です。