normalian blog

Let's talk about Microsoft Azure, ASP.NET and Java!

INETA Day 2009 に参加してきたメモ

INETA Day 2009に参加してきましたので簡単にメモをばを公開。さすがにこれ以上延ばすと時事ネタじゃなくなってしまいそうなので、不完全だろうが何だろうが公開。
実はINETA Day 2008が初めて行ったに等しい勉強会だったりしたので、1年越しに思う事がいろいろと。あの頃と比べると大分色んな方と知り合いになれたと思うし、自分の技術も向上したと思います。今後もがんばろーと思える感じでした。

Dynamic Data お手軽プログラミング 〜小野修司さん〜

Dynamic Data(VisualStudio日本語では動的データサービス)の使い方を紹介したセッション。DynamicDataの特徴として、ノンコーディングでデータサービスを作れる事が挙げられるそうです。
また、DynamicDataServiceを取り扱うデータアクセス方法について、以下の二パターンがあるそうな。

  • LINQ to SQL
  • LINQ to Entity

今回はLINQ to SQLを使用して紹介されてましたが、ちょっと気になった事があるので簡単にメモ。

  • LINQ to SQLの中身で関連を張ることが出来る(*.dbml内とか)
  • ※注 データベースのテーブル名と、テーブルのプロパティ(カラム名)が同一の場合、*dbml内で勝手にの様にリネームされる。
  • 属性内のScaffoldAllTableプロパティをtrueにしないと、動的にデータが生成されない。

Dynamic Data Serviceでは、データベースの定義で設定した制約(整数、NULL許容等)が自動的にバリデーションとして生成される為、自分で再度画面周りのバリデーションをコーディングする必要が不要です。しかし、バリデーション&サイトそのものをデータベースから自動生成できますが、テーブルの内部構造を把握している人間以外には使いにくいという欠点があります。
で、「このバリデーションや自動生成のサイトだけを自由に使えないか?」という点を紹介して頂けました。

使用方法そのものは以下な感じ。

  1. [ツールボックス]から、DynamicDataManager#RegisterControl(Control)を使用して、*.aspxにコンポーネントを追加。
    • →データソースの選択の際、テーブルのプロパティ全体を選択しないと、更新・削除等の処理が出来なくなる。
  2. GridViewのコントロールから、GridViewのプロパティを削除していき、自動生成フィールドを使う
  3. でも、バリデーション・表示がいまいち、ここを改編したい。
    1. partial class <テーブル名>を使って、ViewModelパターンを使って表示項目を改編する。
    • ※注 partialのOnXXXXメソッド(OnValidate)は、現在はLINQ to SQLでしか使えず、LINQ to Entityでは使用できない。OnXXXX系のメソッドを使用する事で、細かなデータベース操作を行うことが出来る。
[MetadataTYpe(typeof(UserMetaData))]
public partial class User{
}

public class UserMetaData
{
  [DisplayName("名前")]
  public string name{ get; set; }

  [Required(ErrorMessag="必須項目です")]
  public string mail{ get; set; }
}

参考サイト

  • @IT DBアプリをコーディングレスで構築する
  • LINQ to SQLの更新 (パート4-データベースの更新)
  • Dynamic Data最新状況 (CodePlex)

Windows Azure アーキテクチャと開発 〜株式会社アークウェイ 森屋英治さん〜

アークウェイの森屋さんがWindows Azureを使ってアプリを実演してくれました。かなり砕けた雰囲気でのセッションで、いろいろ伺う事ができました。
まずは最近の動向として、以下の点があるという事がポイント。

  • 仮想化技術
  • クラウド
  • RESTful
  • RIA

で、この技術背景からWindowsAzureの登場が出てます。Azureの特徴としていかになります。

  • 北米のコンピュータにアクセスするだけなホスティングサービスw
  • 成しているWEBアプリがすぐにデプロイできるので、スケールアウトを考えなくても良い。
  • 来週からSQL Azureが出てくる(この日記公開時点では出たかな?)

Windows Azure Architecture 来週あたりにたくさんの製品が(もう一杯公開されます・・・orz)

  • ロードバランスで、WebRole・WorkerRoleに振り分けている
  • Azureストレージとして、テーブル・ロール・キューと三つが存在する
  • SQL Azure Architecture ゲートウェイでリクエストを受け付け、アクセスの固定

Azureのストレージ系に接続する為には、基本的に.NET Data Servicesを使用します。従って、Azureを使おうと思ったらLINQ、.NET Data Serviceの基本的な知識は必須となります。

これらを踏まえて、Azure上で開発手法は以下となるそうです。

  1. ローカルで実際のWEBを作ってしまってから本物を試す。ただし、データ自体は直にAzure上にアクセスする。
  2. 上記でWEBアプリを作成した後に、最終的な成果物(ASP.NET)をAzure上にUPする
  3. デバッグはローカルのマシンでDevelopment Fabric、DevelopmentStorageが動くのでこっちを使う

Azure上でのデプロイ手順は大体以下な感じ。

  1. Visual Studio上でPublisherを選択する
  2. ↑実行後、IEが勝手起動して、Azureのポータルサイトにつながる
  3. StagingとProductionの2段階があるので、最初にStatingを選択する。
    • ※*.cpkgファイルをアップロードするだけで15分くらいかかる・・・orz
    • アップロード時にサイトをいじると壊れたりする・・・orz

Azure上でのストレージアクセスに対するEntityの作成は以下の流れになります。

  1. データサービスの作成
  2. Modelの作成

この辺りの手順は.NET Data Serviceがわかってないとさっぱりわからず、最近のテクノロジーが集結しているので、そのあたりを学ぶ必要あり。

今回のサンプルではキューを使った例で行われていましたが、キューは結構不安定らしいです・・・。
Worker Roleの役割として、キューに入ったデータを処理する役目が有るため、キューを使う場合は、必ずWorker Roleも使う必要が有るとのこと。通常のキューと異なりデキューしなく、実際にデータが消えたりしません。時間で要素に対してマスク処理を行うので、通常のキューと同じ認識でデータを弄ると危険な事に・・・orz

最終的なAzureのポイントとしては「自分を責めない」というのが非常に重要とのこと。まだまだ不安定なので、使いどころが難しそうです・・・。

C#4.0 と Visual Studio 2010/.NET Framework 4.0〜ここが Cool! いけてる機能10連発!〜 by 小島 富治雄さん

VisualStudio 2010と.NET Framework 4.0それぞれについての新機能を紹介。全部は拾いきれてないと思いますが、印象に残った機能を上げていきます。

まずはVisual StudioのUI関連。

  • スタートページ:ピン止めとかで、最近使ったプロジェクトを参照できる
  • エディター部分のコントロールで、マウスホイールを使った拡大縮小が行える
  • メソッド名の右クリックメニュー⇒メソッド呼び出し階層の表示ができる(この機能はEclipseにあってVisual Studioになかったので超欲しかったです・・・)

次に、インテリセンスあたりが大幅に改善。存在しないメソッド名を書いて、Ctrl+Alt+Spaceを押すとメソッド名が保管ができるようになってます。まずロジックを書いてTDDをするのが非常に楽になってます。

引き続き自動生成機能関連で、以下の機能が追加されてます。

  • 存在しないクラスを書いて、右クリック⇒クラス生成
  • 存在しないクラス or メソッドを書いた場合、自動生成系を選んでしまえば問題なく生成できる

アーキテクチャエクスプローラ系では、UML系の図を描画する機能が大幅改善。図もすごくきれい!

  • ソースの依存関係、クラスの依存関係のグラフを表示させることが出来る
  • シーケンス図も表示が可能!

デバッグ関連も大幅に改善されてます。正直これが有ればデバッグに困らないんじゃないかなぁ…。

次に、結構目玉になってた動的プログラミング。これ自体は暗黒を招きそうでいまいちなんですが、オプション引数は好さそう。

  • 動的型はIronPythonIronRuby等と結合する場合に役立つ。メソッド等の実行に非常に助かる
  • オプション引数の実装 ← 実装が表にでるので、オプション変更時にリコンパイルが必要

また、マルチコア時代の先駆けとして、並列プログラミングをサポートしました。まだまだ私も使いどころはわかってませんが、以下のPLINQ機能は好さそう。

  • AsParallel
  • AsOrdered
  • ParallelEnumerable

ついで、C++への対応拡張。回りのC++への反応の低さがひどかったw さすがにC#やらVB.NET系の住人が多い会場だけありました。

  • auto キーワード
  • ラムダ式
  • statitc_assert宣言
  • ParallelPatternLibrary(C++用の並列処理ライブラリが追加された)

最後にUIテスト系。UIテストのパンドラの箱にまで踏み込むとは流石MS・・・。これらの機能に今後期待です・・・。

  • 手動テストの記録と再現
  • 自動のUIテスト化

懇親会

今回はINETA Day 2008と異なり、主催側がセッティングした懇親会がなかったので、わんくまメンバーで懇親会を自前でセッティング。森屋さん、八巻さん(id:Yamaki)という有名どころな方々とも楽しくお話できました。懇親会でお世話になった方々はありがとうございました。
奇しくも飲み会の場所が、去年の二次会と同じ場所だったりしましたが…w

総括

最新の技術情報を調べることもでき、いろいろな方とお話しできたので楽しかったです。ただ、 id:masa-k さんもおっしゃってますが、やっぱり参加者数が若干少なかった気がしますね…。この手のイベントはもっとやって頂きたいと思ってますので、来年の為にもっと活発にコミュニティに参加する人を増やしたいなぁと思いました。