아주 좋은 정보가 있어서, 퍼왔습니다. (제일밑에 출처게재있음)
[소스 다운로드]
Windows Azure モバイル アプリケーション開発実践
ASP.NET MVC 4 を使った Mobile Web ソリューション実装
執筆者: 日本マイクロソフト株式会社 エバンジェリスト 鈴木章太郎 & 井上章
更新日: 2012 年 4 月 20 日
今回は、Visual Studio 2010 SP1、C# と、ASP.NET MVC 4 、SQL Azure、jQuery Mobile 等を利用して新しい Mobile Web アプリケーションを作成します。
目次
- Web アプリケーションにおける課題
- ASP.NET MVC アプリケーションの作成
- Display Modes によるビューの切り替え
- jQuery Mobile を使ってモバイル向けビューを作成する
1. Web アプリケーションにおける課題
PC 用 Web ブラウザーと Mobile Web ブラウザー
Web アプリケーションを作成して、Web サーバーや Windows Azure にデプロイした場合、様々なデバイスからアクセスされることになります。その場合、良く遭遇するのが、下記のような現象でしょう。下記の図を見てください。
このアプリケーションは、2012 年 4 月開催の Windows Developer Days のセッション管理を、ASP.NET MVC 4 を使い、SQL Azure に作成済みの RDB を使って Model を作成し、そこから簡単に View と Controller を生成し、Web アプリケーションを生成して作ったものです。非常に単純なテクニカル セッション情報管理のデモ アプリケーションです。画面遷移としては、まずホーム画面が表示されます。
図 1: ホーム画面
その後、画面中のセッション リストをクリックすると、セッション一覧画面に遷移します。
図 2: セッション一覧画面
この中で、あるセッションを選択して、Details をクリックすると、セッション詳細画面に、
図 3: セッション詳細画面
Edit をクリックすると、セッション情報編集画面に、それぞれ遷移します。
図 4: セッション情報編集画面
iPhone の Safari でアクセスした場合
さて、当たり前ですが、これは、PC 用のブラウザー用に作成したアプリケーションなので、例えば iPhone の Safari では少し工夫が必要となります。下記の図はホーム画面にアクセスした場合です。
図 5: Safari で見たホーム画面
これはまだ良い方ですが、セッション リストをクリックしてセッション一覧画面に遷移してみましょう。
図 6: Safari で見た session 一覧画面
このような状況は、iPhone 以外に、例えば、Android でも、 Windows Phone でもブラウザー アプリケーションである限り生じることでしょう。ASP.NET であれば、コンテンツ自体を HTML5 で作成・配信することができますが、このままでは表示が最適化できないので、個別に対応しておきたいところです。このような状況に対応するソリューションは、昔から存在しており、有償のパッケージとして売られているものも多数あります。しかし、ASP.NET MVC 4 を使えば、この Web アプリケーションを、iPhone のみならず、各種モバイル デバイス毎に最適化させることができるのです。
今回は、この ASP.NET MVC 4 を使った Mobile Web アプリケーションの作成と実行について、ご説明していきます。
2. ASP.NET MVC アプリケーションの作成
SQL Azure データベースの作成
今回は、テクニカル セッション情報を収納するデータベースを作成します。まず、Windows Azure ポータルにログインします。
図 7: Windows Azure Portal へのログイン
"データベース" タブをクリックすると、SQL Azure の管理画面に遷移します。
図 8: SQL Azure 管理画面
画面上にある、作成ボタンをクリックして、新規でデータベースを作ります。下記のダイアログが出ますので、名前は適当につけて、Web エディション、1 GB で作成します。
図 9: SQL Azure データベースの作成
テーブルの作成
SQL Azure のポータル画面で、作成したばかりのデータベースを選択して、管理ボタンをクリックすると、個別のデータベースの管理画面に遷移しますので、ユーザー名とパスワードを入力して、ログインします。
図 10: SQL Azure 管理ポータル ログイン
すると、下記のようなデータベースの管理画面が表示されます。このデータベースに関する諸情報が表示されており、ここから、テーブル作成、ビュー作成、ストアド プロシージャ作成、新規クエリ発行等、次のアクションをとることが可能となっています。
図 11: データベースの管理画面
次は、データベースの概要画面です。
図 12: データベースの概要画面
ここで、データベースのデザイン画面に遷移し、テーブルを作成します。
図 13: データベースのデザイン画面
テーブルを作成するには、新しいクエリ ボタンを押して、出てきたテキスト エリアに入力して実行します。テーブルは下記のクエリの通り、作成してください。最初は TimeSlots テーブルです。
GO
/****** Object: Table [dbo].[Timeslots] Script Date: 04/10/2012 13:56:36 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[Timeslots](
[Id] [int] IDENTITY(1,1) NOT NULL,
[Name] [nvarchar](max) NULL,
[Start] [datetime] NULL,
[End] [datetime] NULL,
CONSTRAINT [PK_Timeslots] PRIMARY KEY CLUSTERED
(
[Id] ASC
)WITH (STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF)
)
GO
次は、Sessions テーブルです。
GO
/****** Object: Table [dbo].[Sessions] Script Date: 04/10/2012 13:44:03 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[Sessions](
[Id] [int] IDENTITY(1,1) NOT NULL,
[Code] [nvarchar](max) NULL,
[Title] [nvarchar](max) NULL,
[Room] [nvarchar](max) NULL,
[Hash] [nvarchar](max) NULL,
[Timeslot_Id] [int] NOT NULL,
CONSTRAINT [PK_Sessions] PRIMARY KEY CLUSTERED
(
[Id] ASC
)WITH (STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF)
)
GO
ALTER TABLE [dbo].[Sessions] WITH CHECK ADD CONSTRAINT [FK_SessionTimeslot] FOREIGN KEY
([Timeslot_Id])
REFERENCES [dbo].[Timeslots] ([Id])
GO
ALTER TABLE [dbo].[Sessions] CHECK CONSTRAINT [FK_SessionTimeslot]
GO
次は、Speakers テーブルを作成します。
GO
/****** Object: Table [dbo].[Speakers] Script Date: 04/10/2012 13:50:00 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[Speakers](
[Id] [int] IDENTITY(1,1) NOT NULL,
[Name] [nvarchar](max) NULL,
CONSTRAINT [PK_Speakers] PRIMARY KEY CLUSTERED
(
[Id] ASC
)WITH (STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF)
)
GO
以上でテーブル作成は終了です。
ASP.NET MVC Web Application の作成
Visual Studio に戻り、この SQL Azure データベースに接続し、作成した WDD2425 データベースを用いて、ASP.NET MVC アプリケーションを作成します。データは適当に入れておいてください。
※なお、これまでの作業に関しては、SQL Server Management Studio を使って、SQL Azure に接続して行っても OK です。
次の手順で、ASP.NET MVC 4 Web Application を作成します。適当な名前 (例: MvcApplication1) で、ASP.NET MVC 4 Web Application プロジェクトを新規作成します。
図 14: ASP.NET MVC3 Web Application の作成
次に出てくるダイアログでは、テンプレートでインターネット アプリケーションを選択し、ビュー エンジンは、今回は ASPX ではなく、Razor を選択します。
図 15: プロジェクト テンプレートとビュー エンジンの選択ダイアログ
次いで、ソリューション エクスプローラー上の Model のフォルダーを右クリックして、Model の追加を行います。追加→新しい項目を選択します。
図 16: Model の追加
新しい項目の追加ダイアログが出るので、データ タブを選択し、ADO.NET Entity Data Model を選択します。
図 17: ADO.NET Entity Data Model の選択
ウィザードが起動するので、最初に、データベースから作成、を選択して次へをクリックします。
図 18: データベースから作成を選択
次に、データ接続の選択、で、Microsoft SQL Server にチェックして、続行します。
図 19: Microsoft SQL Server にチェック
そして、データ ソースの箇所で、SQL Azure のサーバー名と、SQL Azure 認証のためのユーザー ID とパスワードを入力します。データベースは、WDD2425 を選択します。
図 20: データベースの選択
そして、テーブルの左のチェック ボックスにチェックを入れて全てのテーブルを選んで、完了をクリックします。
図 21: Model ウィザードの完了
すると、必要なライブラリが読み込まれて、同時に WDD2425 アプリケーションの Model が生成されます。この状態で必ず Ctrl+Shift + B で忘れずにビルドをしておきましょう。そうしないと次のコントローラーの追加のダイアログ ボックスの画面で、Class のリスト内に必要なモデルが表示されません。
図 22: 生成された Model
次いで、ソリューション エクスプローラー上で、Controller のフォルダーを右クリックして、新規コントローラーを追加します。
図 23: Controller の追加
コントローラーの追加ダイアログ ボックスが出るので、SessionController という名前にして、モデル クラス = Sessions、データ コンテキスト クラス = WDD2425 と設定して、追加をクリックします。
図 24: コントローラーの追加ダイアログ ボックス
すると、自動的に各種 (CRUD 用の) View も生成され、ソリューション エクスプローラーは下記の通りになります。
図 25: 自動生成される View 他
この状態で、Ctrl + F5 を押して、アプリケーションを起動しホーム画面を表示します。
図 26: アプリケーションの起動画面
この URL の部分の最後に、session (例: http://localhost:62217/session) と入れてリターン キーを押すと、下記の通り、既に全て必要な View その他機能が生成されていることが確認できます。各リンクをクリックして確認してみてください。
図 27: View その他機能の確認
あとは、ホーム画面のタイトルや Session 一覧へのリンク等を、図 1 にご紹介したように修正して、ASP.NET MVC Web アプリケーションの作成は終了です。
3. Display Modes によるビューの切り替え
デバイス/ブラウザー検出とビューの切り替え
1. でご紹介した通り、昨今では、PC 上の Web ブラウザーだけでなくスマート フォンやタブレットの呼ばれるモバイル端末上の Web ブラウザーで Web サイトを閲覧することが増えています。いつでも、どこでも、どんなデバイスでも使用可能な Web アプリケーションを開発するにあたって、モバイル端末からのアクセスか否かによってビューを自動で切り替える機能や、モバイル ブラウザー向けのビューと、デスクトップ・フル ブラウザー向けのビューをユーザーが任意に切り替え可能な機能が ASP.NET MVC 4 で容易に実装できます。
図 28: Display Modes によるビューの切り替え機能適用のイメージ
ASP.NET MVC 4 の Display Modes と呼ばれる機能では、デスクトップ PC 上の Web ブラウザー向けのビューと、モバイル端末の Web ブラウザー向けのビューをそれぞれ用意しておくだけで、ASP.NET MVC 4 フレームワークが自動でブラウザー種別を判断して切り替えをおこないます。
Display Modes
ASP.NET MVC 4 の Display Modes と呼ばれる機能では、デスクトップ PC 上の Web ブラウザー向けのビューと、モバイル端末の Web ブラウザー向けのビューをそれぞれ用意しておくだけで、ASP.NET MVC 4 フレームワークが自動でブラウザー種別を判断して切り替えをおこないます。例えば、下記のようにデスクトップ PC の Web ブラウザー向けの Index.cshtml と共に、モバイル ブラウザー向けの Index.Mobile.cshtml を作成します (ここでは Index.cshtml ファイルをコピーして同フォルダーにペーストして使用しています)。
図 29: Index.Mobile.cshtml の作成
さらに、分かりやすいように各ビューの一部を変更して下記のように記述します。
Index.cshtml
ViewBag.Title = "Windows Developer Days PC";
}
...
Index.Mobile.cshtml
ViewBag.Title = "Windows Developer Days Mobile";
}
...
この状態で、Visual Studio 2010 のメニューの [デバッグ開始 (F5)] または [デバッグなしで開始 (Ctrl + F5)] でアプリケーションを開始すると、デスクトップ PC 上の Web ブラウザーでは下記のように Index.cshtml がビューとして使用されます。
図 30: デスクトップ PC の Web ブラウザーでの表示
一方、同じ URL に対してモバイル端末の Web ブラウザーを使ってアクセスすると、下記のように Index.Mobile.cshtml がビューとして使用されます。
図 31: Windows Phone Emulator での表示
このように、モバイル端末用のビューを用意するだけで容易に表示を切り替えることが可能です。
この DisplayMode 機能では、HttpBrowserCapabilities の IsMobileDevice プロパティを元にモバイル Web ブラウザーか否かの判別がおこなわれています。
例えば、ビュー "Views\Home\Index.cshtml" に対して、通常のデスクトップ PC の Web ブラウザーでアクセスすると、通常は "IsMobileDevice == false" と判定され、そのまま Index.cshtml がビューとして使用されます。一方、この Web アプリケーションをモバイル端末の Web ブラウザーでアクセスして "IsMobileDevice == true" と判定されると、ASP.NET MVC 4 の DisplayMode 機能によってデフォルトでは Index.Mobile.cshtml が自動的にビューとして使用されるようになります。ここでは Index ページを例にとりましたが、この DisplayMode 機能はレイアウト ページ (_Layout.cshtml など) や部分ビュー (_LoginPartial.cshtml など) に対しても同じように動作します。
モバイル デバイス毎にビューを切り替える
デフォルトの Display Modes 機能では、モバイル Web ブラウザーか否かの判定でビューを切り替えるのみですが、モバイルと判定された場合のビューをさらに分けて用意し、モバイル端末の種別ごとにビューを切り替えることも可能です。
例えば、iPhone 専用のビューを用意したい場合、System.Web.WebPages を参照した上で、下記のコードを Global.asax.cs の Application_Start メソッドに追加し、DefaultDisplayMode インスタンスを追加登録します (UserAgent をベースとした判別ロジックは一例です)。
...
protected void Application_Start()
{
DisplayModeProvider.Instance.Modes.Insert
(0, new DefaultDisplayMode("iPhone")
{
ContextCondition = (context => context.GetOverriddenUserAgent().
IndexOf("iPhone", StringComparison.OrdinalIgnoreCase) >= 0)
});
...
}
そして、例えば Index.cshtml に対して、iPhone 用のビュー Index.iPhone.cshtml を用意します。
図 32: Index.iPhone.cshtml の追加
また、Index.Mobile.cshtml の例と同様に、Index.iPhone.cshtml の記述をわかりやすいように下記のように書き換えます。
Index.iPhone.cshtml
ViewBag.Title = "Windows Developer Days iPhone";
}
...
この状態で、Visual Studio 2010 のメニュー [デバッグ開始 (F5)] または [デバッグなしで開始 (Ctrl + F5)] でアプリケーションを開始し iPhone でページを表示すると、下記のように iPhone 用のビューが使用されるようになります。
図 33: iPhone (Simulator) での表示
Note:
Display Modes では、ビューのファイル名に追加する文字列 (Mobile や iPhone など) の大文字・小文字の区別はされません。
4. jQuery Mobile を使ってモバイル向けビューを作成する
プロジェクトへ jQuery Mobile を追加する
jQuery Mobile (英語) と呼ばれる JavaScript ライブラリを使用すると、モバイル デバイスに最適化したビューを簡単に作成することができます。
ASP.NET MVC 4 の Internet Application プロジェクト テンプレートでは、標準では jQuery Mobile は含まれていませんが、NuGet と呼ばれるパッケージ マネージャの仕組みを使うことで簡単に jQuery Mobile をプロジェクトに追加することができます。
Visual Studio 2010 のメニューから、[ツール] – [Library Package Manager] – [Manage NuGet Packages for Solution...] を選択すると、[Manage NuGet Packages] ダイアログが表示されます。このダイアログの左側の "Online" を選択してから右上の検索ボックスに "jQuery.Mobile" と入力すると簡単に jQuery Mobile パッケージを検索することができます。
図 34: NuGet による jQuery Mobile のインストール
ここで [Install] ボタンをクリックすると、jQuery Mobile の JavaScript ファイルと CSS ファイルがプロジェクトに追加されます。
なお、NuGet パッケージ マネージャでは、上記のダイアログ ベースの管理だけでなくコマンドライン ベースの管理も可能です。メニューの [ツール] – [Library Package Manager] – [Package Manager Console] を選択するとコンソール ウィンドウが開きますので、ここで "Install-Package jQuery.Mobile" と入力することでもパッケージを追加可能です。
図 35: コマンドラインでの jQuery Mobile の追加
現時点では、jQuery Mobile のバージョン 1.0.1 が Script フォルダーに追加され、同時に依存関係を持った jQuery が 1.6.4 に更新されます。
図 36: プロジェクトに追加された jQuery Mobile 関連ファイル
モバイル用レイアウト ビューの作成
続いて、前述の Display Modes の機能を使ってレイアウト ビューもデバイス毎に切り替えるようにします。
下記のようにデスクトップ PC の Web ブラウザー向けのレイアウト ビュー _Layout.cshtml と共に、モバイル ブラウザー向けの _Layout.Mobile.cshtml を作成します。
図 37: _Layout.Mobile.cshtml の追加
そして、jQuery Mobile の機能を使って下記のようにビューを記述します。
_Layout.Mobile.cshtml
<html<
<head>
<meta charset="utf-8" />
<title>@ViewBag.Title</title>
<meta name="viewport" content="width=device-width" />
<link rel="stylesheet" href="~/Content/jquery.mobile-1.0.1.min.css" />
<script type="text/javascript"
src="~/Scripts/jquery-1.6.4.min.js"></script>
<script type="text/javascript"
src="~/Scripts/jquery.mobile-1.0.1.min.js"></script>
</head>
<body>
<div data-role="page" data-theme="a">
<div data-role="header">
<h1>WDD モバイル</h1>
<div data-role="navbar">
<ul>
<li>@Html.ActionLink("Sessions", "Index", "Session")</li>
<li>@Html.ActionLink("About", "About", "Home")</li>
<li>@Html.ActionLink("Contact", "Contact", "Home")</li>
</ul>
</div>
</div>
<div data-role="content">
@RenderBody()
</div>
</div>
</body>
</html>
同時に、Index.Mobile.csthml と Index.iPhone.cshtml のセッション情報一覧へのリンクを下記のように jQuery Mobile のボタンとアイコン属性を指定して書き換えます。
Index.Mobile.cshtml と Index.iPhone.csthml
ViewBag.Title = "Windows Developer Days Mobile"; // または iPhone
}
<div>
<h1>@ViewBag.Title.</h1>
<h2>@ViewBag.Message</h2>
<p>
<a href="@Url.Action("Index", "Session")"
data-role="button" data-icon="star">セッション情報一覧はこちら</a>
</p>
</div>
この状態で iPhone でアプリケーションを表示すると、下記のように jQuery Mobile で最適化されたレイアウトやボタンが使用されたトップ ページが表示されます。
図 38: jQuery Mobile で最適化されたトップ ページ
モバイル用セッション情報一覧ビューの作成
同様に、セッション情報一覧のビューの表示を jQuery Mobile を使って最適化します。セッション情報一覧表示用のビュー ファイル "Views\Session\Index.cshtml" のモバイル用ビュー ファイル "Views\Session\Index.Mobile.cshtml" を作成します。
図 39: モバイル用セッション一覧ビューの作成
そして、下記のようにセッション情報一覧表示用のビューを記述します。
Views\Session\Index.Mobile.cshtml
@{
ViewBag.Title = "セッション一覧";
}
<h2>@ViewBag.Title</h2>
<div>
<ul data-role="listview" data-theme="c">
@foreach (var item in Model) {
<li>
<a href="@Url.Action("Details", new { item.Id })">
<h4>@Html.DisplayFor(modelItem => item.Title)</h4>
<p>Session Code: @Html.DisplayFor(modelItem => item.Code)</p>
<p>Room: @Html.DisplayFor(modelItem => item.Room)</p>
</a>
</li>
}
</ul>
</div>
<p>
<a href="@Url.Action("Create", "Session")"
data-role="button" data-icon="plus">追加</a>
</p>
この状態で iPhone でセッション情報一覧を表示すると、下記のような表示となります。
図 40: jQuery Mobile を使って最適化したセッション情報一覧ビュー
各セッションをタップ (クリック) すると、セッション情報の詳細ビューに表示が変わり、詳しい情報を確認することもできます。
Note:
このドキュメントでは、詳細ビュー "Details.cshtml" の変更まではご紹介しませんが、ここまでご紹介した jQuery Mobile を使ってモバイル デバイスで見やすいレイアウトに容易に変更することができます。
検索機能の追加
jQuery Mobile を使うと、リスト表示されたデータ アイテムの検索機能を簡単に追加することができます。前述の Views\Session\Index.Mobile.cshtml の ul リストの属性に、下記のように data-filter="true" と data-filter-placeholder="検索" を追加します。
Views\Session\Index.Mobile.cshtml
<div>
<ul data-role="listview" data-theme="c"
data-filter="true" data-filter-placeholder="検索">
...
この修正だけで、下記の実行例のように検索ボックスが表示されるようになります。
図 41: 検索ボックスの追加
検索はクライアント サイドでインクリメンタルにおこなわれるため、とても軽快にリスト アイテムを検索することができます。
図 42: アイテムの検索の様子
以上のように、ASP.NET MVC 4 と jQuery Mobile、そして SQL Azure などを利用することで、スマート フォンやタブレットなどの各種モバイル デバイスに対応した Web アプリケーションを迅速に作成することが可能です。
출처 : http://msdn.microsoft.com/ja-jp/windowsazure/hh965702(ja-jp)
'VB.NET' 카테고리의 다른 글
값비교 및 결과출력에 대한 예제 (0) | 2013.01.29 |
---|---|
커서의 위치를 취득하는 방법 (0) | 2013.01.28 |
타이머 테스트 (0) | 2013.01.21 |
Visual Basic 6.0에서 Visual Basic .NET으로 마이그레이션할 경우 얻을 수 있는 이점 (0) | 2013.01.08 |
상수 및 열거형(Visual Basic) (0) | 2013.01.08 |