SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

C#たんと学ぶ/わりと硬派なソフトウェア開発講座

C#たんと学ぶ/わりと硬派なソフトウェア開発講座
第3回「Webアプリケーション」(前編)

C#たんと学ぶ わりと硬派なソフトウェア開発講座(6)

ASP.NET

VBたん
さて、C#でWebアプリケーションを作るためのフレームワークがASP.NETよ。
C++たん
細かく言うと、ASP.NETには2系統あるのね。
・ASP.NET Webフォーム
・SP.NET MVC
っての。

 両方に共通するのは、WindowsのWebサーバー機能であるIIS(Internet Information Services)ってのの上で動いていること。まあ、オープンソースなプロジェクトで、Linux向けの移植もあったりはするけども。あと、.NET Frameworkの標準ライブラリは、どちらでも使えるわ。

C++たん
じゃあ、2つの違いについて説明して行きましょうか。

ASP.NET Webフォーム

C++たん
1つ目のASP.NET Webフォームは、Webの仕組みをASP.NETが隠ぺいしてくれていて、デスクトップアプリケーションと同じ感覚でWebアプリケーションを作れるものなの。

 デスクトップアプリケーションを作りなれた人なら、すぐになじめると思うわ。前に説明した、ルーティングとかHTMLテンプレーティングとかも、あまり考える必要ないのよ。

 ただ、隠ぺいされた部分を知らないまま作ってると、通信量が膨れ上がっちゃって性能が出なかったりするので注意も必要。

 それに、最近の若い子なんかは、Web全盛の時代に育ってて、逆にデスクトップアプリケーションの作り方の方がなじめないかもしれないわねぇ。アプリケーションの利用者(エンドユーザー)にとっても同様で、ASP.NETがWebっぽいところを隠ぺいしようとしているせいで、アプリケーションの使い勝手が悪いと感じる人がどんどん増えてるみたい。

ASP.NET MVC

C++たん
そこで、Web育ちなWebっ子向けに、Webらしい部分を隠さないフレームワークを作ったのが、ASP.NET MVCというわけ。
VBたん
PHPとかJava、PythonなんかでよくあるWebフレームワークと同じような構造してるわよね。
C++たん
そう。MVCという名前も、Webフレームワークではよく、MVCModel-View-Controller)パターンって構造が使われてて、ASP.NETもそのMVCパターンで作れますという意味だし。

 例えば、Visual Studioで、ASP.NET MVCアプリケーションを作成すると、以下のようなプロジェクトが生成されるわ。

 Controllersフォルダー以下に入っているControllerと付くクラスは、ルーティングの結果呼ばれる処理を書く部分で、Viewsフォルダー以下に入っているcshtmlという拡張子のファイルがHTMLテンプレートよ。

ASP.NET MVCのルーティング

 ASP.NET MVCのルーティングは、開発者がカスタマイズすることもできるんだけど、デフォルトだと以下のような感じ。

 URLの、最初の階層がContollerクラス名に対応していて、2つ目がメソッド名。クエリ文字列(URLの最後&から後ろの部分)や、POSTデータ(HTMLの<form>タグで入力したデータ)は、メソッドの引数として渡されるわ。

VBたん
この対応付けのルールを覚えるまではちょっと戸惑うわねー。

ASP.NET MVCのHTMLテンプレーティング

 さて、Controllerの中身まで見てみると、戻り値のところにView()とだけ書かれてる。これは、HTMLを作って返すという意味なんだけど、どのHTMLテンプレートを元にHTMLを生成するかは、デフォルトでは以下のようなルールになっているわ。

 Controllerクラス名やメソッド名に応じて、Viewsフォルダー以下のcshtmlというファイルが選ばれるの。で、このcshtmlの中身は、たとえば、About.cstmlの冒頭部分を抜き出すなら以下のような感じ。

@{
    ViewBag.Title = "About Us";
}
 
<hgroup class="title">
    <h1>@ViewBag.Title.</h1>
    <h2>@ViewBag.Message</h2>
</hgroup>
 
<article>
    <p>
…

 これは、Razorと呼ばれる構文で、C#とHTMLを混在させたようなものになってるわ。アットマーク(@)から始まる部分がC#で、その他の部分はHTMLそのまんま。@{}で囲った部分は全部がC#になるけども、@ViewBag.Title みたいな部分は、プロパティの参照だけC#で、その後ろはHTMLに戻るわ。そして、ここで出てくるViewBagには、Controllerクラス側で与えたデータが入っているの。

まとめ

C++たん
あの子最後まで帰ってこなかったわね。
VBたん
いいんじゃなーい。わたしの出番増えるし♡ まとめ、やっちゃおーう。
C++たん
はいはい。
C++たん
えーっと、ウェブアプリケーションでやることは…
(1)ルーティング(URL→呼び出す処理の対応付け)
(2)アプリケーション本体の処理
(3)HTMLテンプレーティング
の3つね。
VBたん
このうち、1と3は、大部分をフレームワーク側が担ってくれて、フレームワークごとに少し流儀が異なるわ。ASP.NET Webフォームだと、ASP.NETが隠ぺいしてて、開発者はあまり意識しなくて済んだりも。2がアプリケーションの本体なんだけど、ここはフレームワークによらず共通よ。
VBたん
さて、後編では具体的な実装かしら。ASP.NET MVCの方を使って、実際にランキングを作ってみましょー。
飾り罫
おまけ

おなじみ、お便りコーナーです♪いつも素敵な似顔絵ありがとうございます!今後も引き続き、似顔絵やお手紙随時募集中です。

 

碕岬ヨシタカさん(@y_kimisaki)からの投稿
碕岬ヨシタカ(http://www.in-april.net/)さん(@y_kimisaki)からの投稿

さて、またまたC#たんがゲスト出演!雑誌や大手サイトにも載っちゃいました♪ こちらもぜひご覧ください。


この記事は参考になりましたか?

連載通知を行うには会員登録(無料)が必要です。
既に会員の方はを行ってください。
C#たんと学ぶ/わりと硬派なソフトウェア開発講座連載記事一覧

もっと読む

この記事の著者

C#たん ソフトウェア開発講座 制作委員会(シーシャープタン)

ソフトウェアに求められる要求の高度化とともに大きくなる開発者への負担を、開発ツールやフレームワーク、時には萌え力を頼りに軽減できないか考えるプロジェクト。C#たんは単なるマスコットかと思いきや、割と毒舌。自分のことは棚に上げて、「萌えればいいってもんじゃないですよ?」が信条。twitter: @cs...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/6411 2012/04/04 14:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー