新しい「asp.net web pages」を触ってみた - classic asp to razor !? -
TRANSCRIPT
Okayama IT Engineers Community
新しい「ASP.NET Web Pages」を触ってみた- Classic ASP to Razor !? -
OITEC
きよくら ならみ2011/8/27
1
Okayama IT Engineers Community
自己紹介• ハンドル:きよくら ならみ• プログラマ・SE
– 業務アプリの内作が最近の主なお仕事
• Webアプリを触ることが多いです。– ここ数年はASP.NETにどっぷり– その前はClassic ASPもガッツリやってました
• コンタクト– Twitter: @kiyokura– はてダ: id:kiyokura– その他、mixiとか適当に。– Facebookは本名プレイ
• コミュニティ– OITEC(運営スタッフ)– 中国GTUG– Windows Phone Arch
• 近況– 結婚しました
2
Okayama IT Engineers Community
本セッションの目的
• 新しいASP.NET Web PagesとRazorの概要を知っていただき、興味をもっていただく
• Classic ASPの移植先としてのWeb Pagesの可能性を感じていただく
3
Okayama IT Engineers Community
本日のアジェンダ
• 新しい「ASP.NET Web Pages」とは?
– ASP.NETのおさらい ~歴史を振り返る~
– ASP.NET Web Pagesの簡単な紹介
• Classic ASPと比較したASP.NET Web Pages
– Classic ASPのおさらい
– 7つのポイントで見る
• まとめ
4
Okayama IT Engineers Community
新しい「ASP.NET Web Pages」とは?
5
Okayama IT Engineers Community
ASP.NETのおさらい ~歴史を振り返る~
新しい「ASP.NET Web Pages」とは?
6
Okayama IT Engineers Community
ASP.NET以前のIISのWebアプリケーション
• CGI– C/C++やPerl等々– 昔のIIS(6.0以前)ではあまりCGIのパフォーマン
スは良くなかった– コードから文字列としてHTMLを出力
• Active Server Pages(ASP)– Classic ASP、レガシーASP等とも呼ぶ
• 本資料では、一貫して「Classic ASP」と呼称
– ISAPIを利用し(CGIに比べ)高パフォーマンス– HTMLにコードを埋め込むスタンス
※IIS = Internet Information Services
7
Okayama IT Engineers Community
ASP.NETの登場
• .NET Frameworkと共に登場(2002年)
• IISと.NET Frameworkを基盤に利用する
• 革新的なフレームワーク
– Classic ASPとは全く違う
• 2011年夏現在、3つのフレームワークを内包
– ASP.NET Web Forms
– ASP.NET MVC
– ASP.NET Web Pages
8
Okayama IT Engineers Community
ASP.NET Web Forms• ASP.NET登場時からある方式
– 「Web Forms」と呼称され始めたのは割と最近– 従来は「ASP.NET = Web Forms」
• 特徴– サーバコントロールの利用– コードビハインドによるビューとコードの分離– ポストバックやViewStateによる通信の隠ぺい– ASP.NET AjaxによるAJAX実装
• メリット– サーバコントロールを利用による高い生産性– VBやVB.NET,C#などでWin Formのアプリを開発してい
た人の導入が容易
9
デモ
Okayama IT Engineers Community
ASP.NET MVC• 割と近年になって(2009年にVer 1.0がリリース)
• 特徴– MVCアーキテクチャを採用– ビューエンジンの選択が可能
• ASPX(Web Formsで使われているものと同じ)• Razor(Web Pagesで使われているものと同じ)• 他オープンソースのビューエンジンを選択可能
• メリット– MVCアーキテクチャを採用することのメリット
• コードの再利用性 / テスト容易性アップ• MVCフレームワークでの開発者の参入しやすさ 等々
– 柔軟なルーティングによる解りやすいURL表現– jQuery等との親和性向上
• 出力されるHTMLは(ほぼ)完全にコントローラブル
10
デモ
Okayama IT Engineers Community
ASP.NET WebPages• 最新(?)のフレームワークです。今回の本題
です。• 特徴
– HTMLにコードを埋め込む形をとる• PHPやClassic ASPライク
– Razor構文を採用– ヘルパーにより、簡単に機能拡張が可能– フルスペックの.NETの機能を用いての拡張も可能– 事前のコンパイルが不要
• メリット– 軽量で文法も容易な為、導入しやすい– 好みや要求にあった開発環境を利用可能
• テキストエディタ一本~Visual Studioまで
11
デモはあとで!
Okayama IT Engineers Community
注意
• 「ASP.NET Webページ」というと、以前のWeb Formsを指していることがある
– 昔はWeb Formsという言葉がなかった
– 『ASP.NETで作ったWebのページ』という程度の意味で使われていた?
• 検索するときは『Razor』という単語を絡めるほうが良い
– むしろ『Razor』で検索したほうが良いかも。
• ただ、MVCのビューエンジンとしてのRazorで引っかかるかも…
12
Okayama IT Engineers Community
ここまでのまとめ
• ASP.NETは.NET Frameworを基盤に利用したWebアプリケーションフレームワークです
• 現在、3つのフレームワークを内包
– Web Forms
– MVC
– Web Pages
13
Okayama IT Engineers Community
ASP.NETの現在
14
Internet Information Services(IIS)
.NET Framework
Web Forms MVC Web Pages
Okayama IT Engineers Community
ASP.NET Web Pagesの簡単な紹介新しい「ASP.NET Web Pages」とは?
15
Okayama IT Engineers Community
実行環境• Webサーバ
– IIS 7.0 / 7.5– IIS Express 7.5– ASP.NET 開発サーバ(Visual Studio / Visual Web
Developer)
• フレームワーク– .NET Framework 4
• 開発用環境には…– ASP.NET MVC 3 RTM Tools Update
• http://www.microsoft.com/downloads/ja-jp/details.aspx?FamilyID=82cbd599-d29a-43e3-b78b-0f863d22811a
– もしくは、WebMatrix
16
Okayama IT Engineers Community
注意?
※IISにパッチが当たっていないと、一部の機能がうまいこと動かない事がある?(拡張子省略ができない)http://support.microsoft.com/kb/980368
私の環境では、Windows 7 / Windows Server 2008 R2はSP1を当てたら大丈夫でした。
たぶん、Vista / Windows 2008 Serverも上記パッチか最新のSP当てたら大丈夫。
サーバにパッチ当てれない環境の場合は、web.configに以下の記述でもOKhttp://blog.scnetstudio.com/post/2011/06/18/Extensi
onless-URLs-do-not-find-cshtmlvbhtml-files-on-IIS-7-or-IIS-75.aspx
(Special Thanks:@sibayan )
17
Okayama IT Engineers Community
開発環境
• お好みで3つの開発環境
– WebMatrix
– Visual Studio 2010
• 無償:Visual Web Developer 2010 Express Edition
– テキストエディタ
18
Okayama IT Engineers Community
WebMatrix• ライトなWebアプリケーション開発環境• 無償• オープンソースのソフトウェアのカスタマイズ・展開機能
– DotNetNukeやWordPress、Drupal等々
• インテリセンスは効かない• デバッグのサポート機能(ステップ実行等)無し• 詳しくは
– 「WebMatrixで Web アプリをはじめよう!」– http://blogs.msdn.com/b/tashinmu/archive/2011/03/29
/webmatrix-20110329.aspx
• 入手は以下から– http://www.microsoft.com/web/webmatrix/– WebPI経由でインストールできます
19
デモ
Okayama IT Engineers Community
Visual Studio 2010
• 「SP1」+「ASP.NET MVC 3 RTM Tools Update」
• 無償版のVisual Web Developerも可能
• インテリセンス、デバッグ実行ももちろん可
• 必要なアドオン等はWebPIからインストール可能
– 無償版のVWDもWebPIからインストール可能
– http://www.microsoft.com/web/downloads/platform.aspx
20
Okayama IT Engineers Community
テキストエディタ
• お好みのテキストエディタで開発可能
• 依存関係はインストールしておく必要あり
– WebMatrixをインストールしておけば大丈夫
• 実行環境(IIS/IIS Express)にホストしてブラウザでアクセスするだけ
21
Okayama IT Engineers Community
どれで開発する?
• とりあえず触ってみたい方– WebMatrixがお勧め!
– サンプルプロジェクトも入ってます!
• Visual Studioに抵抗がない人– Visual Studio(VWD)がおすすめ
• 馴染みのエディタで開発したい人– お好みのエディタでどうぞ!
– 実行環境の設定にはWebMatrixを使うと楽。• WebMatrixを立ち上げておき、コーディングを好みのエ
ディタで行う
22
Okayama IT Engineers Community
特徴
• Razor構文で記述します– @を使ってHTMLにコードを埋め込む
• C#とVB.NETが利用できます– 拡張子cshtmlとvbhtml
• コンパイル不要です– 基本的にファイルをコピーすれば動きます
• プログラミングを容易にする機構– ヘルパーと呼ばれる機構やや専用の(?)データ
ベースアクセスのための機構等、簡易にプログラミングできる機能が用意されています
• コードは.NETでバリバリかけます
23
Okayama IT Engineers Community
Razor構文基礎(C#)• 単一の式
– @式– @(式)
• コードブロック– @{文;}– @{
文;文;
}
• コードブロックその2– @if(){
...}
– @foreach var row in rows{..
}
24
Okayama IT Engineers Community
ヘルパー
• 呼び出したところでHTMLを出力するサブルーチン…みたいなもの
• アドオンとして追加可能– NuGetでとってくる等
• 自作も可能– Classic ASPから移植するときにも多用すること
になる(かも)
• 細かく言うと…– HelperResult型を返すメソッド。
– 専用の構文でなく、通常の.NETのClassとして実装することも可能
25
デモ
Okayama IT Engineers Community
個人的なおすすめポイント• プログラミングの初心者もとっつきやすい
– 前提知識が最低限– 特有のお作法や決まりごとが少ない
• 開発環境の構築が簡単(Windowsクライアントがあればあとは無料でそろえれる)– 書くだけならエディタでもOK
• Visual Studio(含む無料版)という、相当に強力なIDEが使える
• 簡単なことは簡単に書け、複雑なこともできます– フルスペックの.NETで記述も可能
26
Okayama IT Engineers Community
細かいことは…
• これを見てください!!– TF セミナー資料「Razor 構文による ASP.NET Web
ページの開発• http://msdn.microsoft.com/ja-jp/asp.net/hh182563
– Razor 構文と ASP.NET Web ページ• http://msdn.microsoft.com/ja-jp/asp.net/gg193039
– WebMatrixのサンプルを見る!• お勧め!
• あとは、後半のClassic ASPとの比較で!
27
Okayama IT Engineers Community
Classic ASPと比較したASP.NET WebPages
28
Okayama IT Engineers Community
Classic ASPのおさらいClassic ASPと比較したASP.NET Web Pages
29
Okayama IT Engineers Community
ASP(Active Server Pages)とは
• IISのWebアプリケーションの実行環境
• HTMLにコードを埋め込む
• VBScript/Javascriptでコードを記述
– そのほか、ActiveScript対応言語も利用可能
• コンパイル不要
30
Okayama IT Engineers Community
それなりに(?)採用されてきた
• CGIより高パフォーマンス– IISをWebサーバとするなら、過去のIISでは。
• VBScriptが使える– VB、VBAのプログラマは大勢いる(いた)
• 手軽に書ける– HTMLにコードを埋め込むスタイル
– 特別な開発環境が要らない(テキストエディタ一本でOK)
• 足りない部分はCOMで拡張– 自作する、公開されてるものを使う
• BASP21が有名
31
Okayama IT Engineers Community
しかし、現在では…
• 現在のその他のWebアプリケーションフレームワークに比べると– 機能が貧弱
– 生産性が低い
– COM依存度が高い• ISAPI=OLE(≒COM)
• 将来性が…
• しかし、意外と現場に残っている。– 機能拡張を含む保守もそれなりにあったり
– さすがに新規開発は…??
32
Okayama IT Engineers Community
選択肢• Classic ASPを使い続ける?• 何か他のものに移植する?
– ASP.NET?PHP?Java?
コストの兼ね合い移植時のコスト
開発工数(設計・製造・テスト)要員の確保・教育
保守・運用時のコスト機能拡張・変更の開発工数要員の確保・教育
33
Okayama IT Engineers Community
たとえば?
• ASP.NET Web Forms / MVC
– 設計コストがとても大きい
• 考え方が大きく違う違うので…
– いきなりフルスペックの.NETの開発スキルが要求される
• PHP
– 言語が全く違う
– 既存の機能(COM)などが使えるかどうか
34
Okayama IT Engineers Community
ASP.NET Web Pagesは??
• 私の第一印象
– 素敵なIDEが使える
– 言語プラットホームが.NET
– Classic ASPと考え方が似ている
– Razor構文がシンプルでわかり易そう
– やろうと思えば高機能なことも
35
この第一印象があっているのかどうなのか。いくつかの観点で検討してみました。
実は最適解なのでは??
Okayama IT Engineers Community
7つのポイントClassic ASPと比較したASP.NET Web Pages
36
Okayama IT Engineers Community
7つのポイント+α
• ファイルの粒度・構成は?
• コードの書き換えがどんな感じになりそう?
• DBアクセスは
• サブルーチン(?)をどうするか
• #includeで処理している部分をどうするか
• COM利用をどうするか
• 例外処理をどうするか
• その他、留意点
37
Okayama IT Engineers Community
ファイルの粒度・構成は?
• 「.asp」ファイルを「.cshtml/vbhtml」に一対一で置き換えるくらいで– 他ページポスト/ポストバックどちらでも問題な
し。• ASP.NET Web Formsはポストバック
• MVCはそもそも考え方が違う
• Classic ASPは設計者次第
– #includeで他ファイルを読み込んでいる場合も、大きく構成は変わらずに行ける可能性大• 詳細は後述
38
割とそのままいけると思います
Okayama IT Engineers Community
コードの置き換えは?
• 基本は<%%>を@に書き換えて…
• VBScript → C# or VB.NET
• 意外と、似たような粒度で書けるかも!
– そもそもVBScriptって、そんなにややこしいこと、できないし…
39
注意点はあるものの、素直に書き換えできる部分が多そう
Okayama IT Engineers Community
コード置き換えの留意点1• 言語はC#/VBのお好きな方で
– 元々がVBScriptならVB.NETが楽な点も
• Response.Writeに注意!– Write/WriteLiteralに置き換え– @や<text></text>が使える場面ではこちら
• 変数宣言の省略– VBscriptでは既定では変数宣言(Dim)を省略可能– C#は変数の宣言は強制されます。– VB.NETも規定値では強制されます
• @Option Explicit Offを明示すれば強制を撤回させれますが、ご利用は計画的に…
40
Okayama IT Engineers Community
コード置き換えの留意点2
• Variant型を存分に使っているところには注意
– 「存分に使っている」例
– 対応策1:見直す<オススメ!>
• 型を意識したコードに書きなおす。
– 対応策2:Object型を使用し都度キャスト
– 対応策3:Option Strinct Off<オススメしない>
• 言語にVB.NETを選択し、暗黙の型変換を許可する
41
Dim ii = 9i = i + 10 'iはInteger、値は『19』i = i & “10” 'iはString、値は『”1910”』
Okayama IT Engineers Community
DB接続はどうするか?
• Web Pagesが標準で用意しているWebMatrix.Data.Databaseが楽– Classic ASPで標準的に利用するADOと似たような操
作でDBアクセスが可能です
• ドライバも多様なものが使えます– SQL Server/SQL Server Compactは.NET標準で
– ODBC/OLEもそのまま使えます
• 普通に.NETのドライバを使って書くこともできます– ODP.NETも使えます
42
WebMatrix.Data.Database経由で使うのが楽
Okayama IT Engineers Community
DBアクセス比較
43
【Classic ASPの例】<%
Dim Cn, RsSet Cn = Server.CreateObject("ADODB.Connection")Cn.ConnectionString = "<接続文字列>"Cn.Open
Set Rs = Server.CreateObject("ADODB.Recordset")Rs.Open " SELECT * FROM hoge " , Cn , 3
%>
【WebMatrix.Data.Databaseの例】@{
var db = Database.Open(“MyDbCon”); // MyDbConはWeb.Configに定義した接続文字列
var rec = db.Query(“SELECT * FROM hoge”);}
Okayama IT Engineers Community
サブルーチンをどうするか
• SubプロシージャはFunctionプロシージャは適宜置き換え– クラス化する
– ヘルパ化する
– functionsブロックでメソッドを定義する
• 一番VBScriptのプロシージャに近いのはfunctionsブロック– ただし、HTMLの出力が多いものはヘルパのほう
が楽かも
44
クラス化/ヘルパ化/@functions ブロックで
Okayama IT Engineers Community
補足• クラス化
– .NET FrameworkのClassと同じ– 面倒でない/ふさわしい場合はクラスにまとめた方が用と思う– 自作クラスは通常の.NET Frameworkのプログラミングと同様に使える
• ヘルパ化– 呼び出し箇所にHTMLを出力するだけのサブプロシージャなどは、ヘルパに
すると良いかも• Subプロシージャ化してWriteメソッドで書き出すより楽
– Subプロシージャ内から呼び出すときはWriteメソッドに出力を渡せばOK
• functionsブロックでメソッドを定義– functions ブロックを使うとページのメンバメソッドを定義可能
• Classic ASPで同一ファイル内にプロシージャを定義するのと一番近い
– メソッドだけでなくページ内に閉じたスコープのメンバを定義したいときはfunctionsブロックで行う
– functionsブロックは、ドキュメントにあまり記述がないので注意
45
Okayama IT Engineers Community
補足2• @{}のスコープ
– @{}で定義した変数のスコープは同じファイル内の@だけ– 同じページ内であっても@helperや@funtionsのブロック内からは参照不可
• Webページがコンパイルされるときに自動的に生成される.csファイルを覗いていると、一目瞭然です– Hoge.cshtmlファイルはWebPagesを継承したクラスとして.csに– HTML部分や@{}等は、 Exexuteメソッド内に展開
• @{}で定義した変数は、Executeメソッドのローカル変数
– helperはプライベートメソッドとして定義される– functionsブロック内に書いたものはすべてHogePageClassのメンバとして
展開
• ファイルは、「ユーザディレクトリ¥ AppData¥Local¥Temp¥Temporary ASP.NET Files 」配下に生成されれます
46
Okayama IT Engineers Community
includeをどうするか?
• 用途によって切り分け
– 設定情報的なもの
– 定数や列挙対等
– 共通関数/クラス的なもの
– ヘッダ・フッタ等、共通レイアウト的なもの
47
用途によって振り分け。整理も必要かも。
Okayama IT Engineers Community
設定情報的なもの
• Web.Configに記述
– DB接続文字列は専用のセクションへ
– その他独自のものはappSettingsセクションに定義
• 利用は…
– 接続文字列はドライバに合わせて
• WebMatrix.Data.Databaseはキー名を引数に指定するだけ
– System.Configuration.ConfigurationManagerの静的メソッドで取得
48
Okayama IT Engineers Community
定数や列挙対等
• クラス等に実装
– AppCode配下に適当なクラスを作成
– ConstやstaticなReadOnlyプロパティ等
– enum
49
Okayama IT Engineers Community
共通関数/クラス的なもの
• クラスやヘルパー、funsionsなどで実装
– AppCode配下に実装。
– ヘルパーやfunctionsとして実装する場合は、AppCode配下に拡張子.cshtml/vbhtmlファイルで作成すればOK
50
Okayama IT Engineers Community
ヘッダ・フッタ等、共通レイアウト的なもの
• Razorのレイアウト機構を使う
– レイアウトページ
• ASP.NET WebFormsのマスターページに近い
• こちらの置き換えれる場合はこちらで。
– RenderPage
• 外部のcshtmlを差し込む
• #includeにより近い形で利用できる
51
Okayama IT Engineers Community
COMをどうするか?
• VBScriptの非力を補うために使っていたのであれば、不要になることも
– BASP21の大半の機能は不要
• サードパーティー製の製品は、置き換えれるなら.NET版に
• どうしても…という場合は.NETのCOM相互運用機能(COM Interop)で
52
本当に必要か見極めを。必要ならCOMをそのまま使う
Okayama IT Engineers Community
例外処理をどうするか?
• VBScriptのエラー処理はVB由来のOn Errorステートメント– ただしVB/VBA子と異なり、以下の二つのみ
• On Error Resume Next(例外を無視して処理続行)• On Error GoTo 0(Resume Nextの効果を打ち消す)
• 可能であれば、より優れたtry-catchに– ただし、書き換え箇所が増えたり– シーケンスが大きく変わる可能性もある
• どうしても…という場合は…– 言語にVB.NETを選択しOn Errorステートメントを利用
53
出来ればtry-catchに。もしくはVB.NETで…
Okayama IT Engineers Community
整理してみる• ファイルの粒度・構成は?
– 割とそのままいけると思います
• コードの置き換えは?– 注意点はあるものの、素直に書き換えできる部分が多そう
• DB接続はどうするか?– WebMatrix.Data.Database経由で使うのが楽
• サブルーチンをどうするか– クラス化/ヘルパ化/@functions ブロックで
• #includeで処理している部分をどうするか– 用途によって振り分け。整理も必要かも。
• COM利用をどうするか– 本当に必要か見極めを。必要ならCOMをそのまま使う
• 例外処理をどうするか– 出来ればtry-catchに。もしくはVB.NETで…
54
Okayama IT Engineers Community
その他ポイント• 暗黙の型変換は禁止したほうが良い
– 言語にVBを使う場合、型指定の強制と暗黙の方変換の禁止を推奨します。
– コードの先頭に@Option Strict Onを記述すれば、明示的な型変換を強制できます。
• Server.Transferが使えません– cshtml/vbhtmlへのServer.Transferは使えないようです。
– 利用している場面は構成の変更が必要です。
• Web Formsとちゃんぽんできる…– Session変数やCookiesも共有できます
– 実用ではあまりしない方がいいと思いますが…
55
Okayama IT Engineers Community
本日のまとめ
56
Okayama IT Engineers Community
まとめ
• ASP.NET Web Pages(Razor)は
– シンプルでパワフルなフレームワークです
– ASP.NETとRazorの知識は、ほかの二つのフレームワークでも活かせます!
• Classic ASP to Razorはアリ
– 勝利のカギはこれだ!(独断と偏見)
• functionsブロックの活用
• ヘルパーの活用
• VB.NETの採用
57
Okayama IT Engineers Community
参考
58
Okayama IT Engineers Community
WebMatrix関係
• WebMatrix
– http://www.microsoft.com/web/webmatrix/
– http://www.microsoft.com/japan/web/webmatrix/
• WebMatrixで Web アプリをはじめよう!
– http://www.microsoft.com/japan/web/webmatrix/learn/
– Web/PDF/XPS
59
Okayama IT Engineers Community
RazorとASP.NET Web Pages関係• Razor 構文と ASP.NET Web ページ
– http://msdn.microsoft.com/ja-jp/asp.net/gg193039
– Web/PDF/XPS
• TF セミナー資料「Razor 構文による ASP.NET Web ページの開発– http://msdn.microsoft.com/ja-jp/asp.net/hh182563
– PDF/XPS
• ASP.NET Web Pages Reference(英語)– http://msdn.microsoft.com/en-
us/library/gg549171%28v=vs.99%29.aspx
60
Okayama IT Engineers Community
ASP.NET/IIS全般
• ASP.NET デベロッパー センター– http://msdn.microsoft.com/ja-jp/asp.net
• [blog記事]なぜ、 IIS は PHP アプリケーションの実行に不向きとされてきたのか?– http://blogs.msdn.com/b/osamum/archive/
2011/04/05/iis-php.aspx
– 日本マイクロソフトのエバンジェリスト、物江さんのblog
– IISのCGIの実行にかかわる挙動の説明が書かれています。
61
Okayama IT Engineers Community
その他
• ASP.NET WebページでOracle DBを使ってみる
• http://d.hatena.ne.jp/kiyokura/20110704/p1
62
Okayama IT Engineers Community
スペシャルサンクス
• @shibayanMicrosoft MVP for ASP.NET/IIS(April 2011 - Mar 2012)
• @onosMicrosoft MVP for ASP.NET(April 2007 - March 2012)
63
Okayama IT Engineers Community64
ご清聴ありがとうございました
Question?(会場で or 懇親会で or @kiyokuraへ)