はじめての ASP.NET MVC4 アプリケーション(C#)

Visual Studio Express 2012 for Web を使って軽く Hello World してみる。
実は Visual Studio はきちんと触ったてたのは VS2003 頃までで、仕事で作ったパッケージアプリケーションは Certified for Windows Vista ロゴ取得用に VC++2008 化したり、Platform Ready for Windows7 テストのために VC++2010 化した程度で VS2010 もほとんど使ってない。

特に Team Foundation シリーズになって SharePoint 連携とか一気に管理が大変になったので、取得習得コストととの兼ね合いでどんどん Visual Studio とは疎遠になってったと言う事情がある。
VS2010 の動作のもっさり感にげんなりしたってのもあるけど。よくよく考えたら、VS(Visual Studio)が出るたびに重くなってくってのは、ヴィルトの法則(ソフトウェアは、ハードウェアが高速化するより急速に低速化する。)だわなあ。

もとい、なんしか VS2012 は初めて動かしてみる。さらに、Windows8 も同じく。会社では Windows7VirtualBox 内の Linux ばっかり。

あんまり細かいことは考えず、習うより慣れよの教えの通り、適当にスケルトンを生成させるところから行く。

起動した画面は↑こんな感じで、ちょっとわかりにくい。


ASP.NET MVC にはバージョンがあるらしい。Windows8 では .NET Framework のバージョンが 4.5 ってことで MVC3 と MVC4 が選べる。
自分の場合、過去資産があるわけじゃないんで、下位互換性は無視出来る。言い換えると、より新しいバージョンの方がより EoD(Ease of Development)な方向に進化してるやろから、それを選択しない理由はない。

プロジェクトテンプレートも何種類かある。違いは判らんので、シンプルそうな奴を選ぶ。


結構大量にファイルが生成されてんな。直観的な名称のフォルダもあれば、独自語の奴もある。どっちみち設定ファイルなんかは仕様を確認せんと理解できへんやろしな。

でも、ちょっと気になるのは Controller と Model フォルダが空っぽっぽいこと。リクエストからページへのマッピング(ルーティング?)ってコントローラーでするんじゃないのかな?
ま、ルーティングは設定ファイルに書いてイベント(アクション)だけコントローラでやるってことかも知らん。


やっぱ Scripts フォルダは気になるよねえ。

jQuery1.7 かあ、まあまあ新しいバージョン使ってんなあ。

・・・って言うかデフォルトで KnockOut.js 入ってんじゃん!AngularJS じゃねーのかあ、まあ当たり前か Google 製やもんなあ。
ま、KnockOut でも良いや MVVM の方がサーバーサイドのビューテンプレートより望ましいのは間違い無いんやから。


あんまり眺めててもしょーがないんで、それーーっしてみる。
マジか!マイクロソフトのスケルトンでいきなり動かん奴があるんか!

どこで間違えたんやろか?・・・って何もやってないんやけど。
アカンこんな入口で躓いてたらテンション下がる。別のルートから頂上を目指す。

今度はばっちり動いた。そりゃそうやろ。動かん方がおかしい。
初期デザインがかなりダサめなのはご愛嬌。まあまあ真面目に CSS3 に準拠したと言われてる IE9 ですらモダンブラウザと言うには厳しい感じやったんで、下位互換性をクロスブラウザの形で実現しようとするとちょい古にせざるを得ない。
プログレッシブエンハンスメントと割り切るには、マイクロソフトには既存顧客が多すぎる。

ちなみにレンダリングされてる HTML はってーと。

おお、まともやん!きれいな HTML5 で素直にレンダリングされてる。

実際問題このレンダリング結果が IE8 や IE9 でどう見えるんかは知らんけど。この素直な感じは Razor って奴のおかげなのかな?それとも ASP 形式でも同じ感じなんやろか。
実はここが一番苦労するとこかと思ってたんやけど、少なくとも ASP.NET MVC4 を使うなら Javaサーブレットでやるってのと大きく違うってことは無さそう。

随分と Java に押されてたマイクロソフトやけど、地道に頑張ってるよなあ。今となってはオラクル(Java)の方が邪悪かも知らん。JavaEE とか完全にオワコンやし。(←あくまで個人的見解です。ヘビーな仕様で JBoss 一択な JavaEE がダメで Play framework とかのが断然 EoD で良いと思う)

こっちのプロジェクトテンプレートやときちんと Model も Cpntroller も生成されてる。

実際にビューのソースコードのぞいてみたら以外にシンプルじゃ無かった。まあ、自分の HTML5 タグ(要素)の理解が足りないのを差し引いても、HTML タグじゃ無いメタ情報*1が直観的じゃ無い。恐らくプラグマティックな便利機能を実現してくれてるんやろけど。
こういう形式のオリジナルがどこなのかは知らんけど -- やっぱ Ruy on Rails の流儀かな? -- Play! のビューもこんな感じの構成になってる。
共通のレイアウトテンプレートがあって、そこにコンテンツのページが include される感じ。コンテンツのページで固有の値を設定して、テンプレートのプレースホルダに差し替わる。ここではページタイトルと思しき ViewBag.Title = "ホーム ページ"; こういうところ。

Razor の構文をきちんと調べないと実際んとこは分かんないけどね。

んで、オレ的マイクロソフトあるあるなんやけど、実行時にわけのわからんエラーが出るのな。
いやいや、自分で組み込んでる jQuery1.7.1 でシンタックスエラーでちゃまずいでしょ?万が一 jQuery 側の問題やったとしても。

ちょっとそういうと雑だよねえーって思っちゃう。

こんなプロジェクトテンプレートを動かしただけの Hello World じゃ何にも楽しく無いんで、明日以降なんかサンプルウェブアプリケーション作って遊んでみる。

*1:これって @ 使ってるってことは、マイクロソフト語でもアノテーションって言うのかしら?