1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Visual Studio 2022】Webアプリのテンプレートの種類

Posted at

概要

Visual Studio 2022のWebアプリケーションのテンプレートについて調べてみました。

目次

「ASP.NET Core Webアプリ (Model-View-Controller)」テンプレート

2009年に初版がリリースされたASP.NET MVCが元になっているテンプレートです。
MVC(Model–View–Controller)パターンを採用しており、コントローラ・モデル・ビューを明確に分離した設計となっています。ビューを持つ Web アプリケーションに適しており、API の実装も可能です。ルーティングはコントローラベースで構成されます。
構造的には、

  • Models(データ・ビジネスロジック)
  • Views(表示)
  • Controllers(要求を受ける)

となっており、責務を厳密に分離しているため、プロジェクトの規模が大きくなったり、構造が複雑化したりする場合でも、MVC の「責務分離」が大きな強みとなります。

MVCのルーティング方法は、例えると「受付(コントローラ)に行って、担当窓口(アクション)に振り分ける」イメージです。URL は /{controller}/{action}/{id?} といったルール(ルート)でコントローラ/アクションに結びつきます。ビュー(.cshtml)はアクションが返すテンプレートになります。

大規模なアプリケーションや複雑な UI に向いており、REST API1や複数ビューを扱いやすいです。また、ルーティングが複雑な場合(/orders/2025/12/25/region/JP/status/approved?page=3など)、一つ下の「ASP.NET Core Webアプリ」テンプレートよりもこちらのテンプレートが向いています。

「ASP.NET Core Webアプリ」テンプレート

2017年に初版がリリースされたテンプレートです。
Razor Pages(レイザーページズ)を使う構成がデフォルトで、ページ単位で完結するシンプルな構造です。Controllerは通常は不要で、基本的にPage-Modelの構成です。イメージ的には「Web版のForms」 のような感じかもしれません。
(「ASP.NET Core Webアプリ」)のルーティングは、例えると「ファイルの場所がそのまま住所」になります。/Pages フォルダの .cshtml に先頭行 @page があると、そのファイル自身がエンドポイント(入口)になります。なので、プロジェクト内のフォルダの場所がPages/Products/Index.cshtmlなら通常 https://example.com/Productsでアクセスできる、という感覚です。

CRUDやフォーム中心のアプリに最適です。また、MVCに比べると学習コストも低いので、初心者の小規模アプリ開発にも向いています。

「ASP.NET Core Webアプリ」テンプレートと「ASP.NET Core Webアプリ (Model-View-Controller)」テンプレートは、どちらも ASP.NET CoreのMVC基盤の上で動いています。Razor Pages は ASP.NET Core MVC の上で動くページ中心モデルのイメージです。なので基本的に、機能面で「MVCでしか作れない/Razor Pagesでしか作れない」という絶対的な制約はありません。
また、1つのアプリに Razor Pages と MVC を併用もできます。テンプレートは初期設定とフォルダ構成が違うだけなので、サービス登録とエンドポイントを足せば両方使えるイメージです。
加えて、例えば「ASP.NET Core Webアプリ」テンプレートサービス登録とエンドポイントの入れ替えに加えて、フォルダ構成・ファイルの役割・コードを「MVC 流儀」に移すことで、実行時の挙動は 「ASP.NET Core Webアプリ (Model-View-Controller)」テンプレート相当にできます。(逆も同様)

「ASP.NET Core Web API」テンプレート

Web APIを作るためのテンプレートで、画面(UI)を持ちません。
ブラウザやモバイルアプリ、SPA(React/Blazor など)、他サービスからの「HTTPリクエストで値(パラメータやJSON)を受けて、HTTPレスポンスで値(JSONなど)を返す」バックエンドの仕組みを作成できます。
REST APIやバックエンドサービスを構築するためのテンプレートで、Razor PagesやMVCのビューは含まれません。

この「ASP.NET Core Web API」テンプレートも、ASP.NET Core MVC の基盤上に乗っています。

「Blazor Server アプリ」テンプレート

.NET Core 3.0(2019年9月)で正式サポートされたテンプレートです。Blazorはブレイザーと読みます。
C#だけでUIを構築できるWebアプリです。サーバー側でUIをレンダリングし、SignalR2を内部で常時使用して、ブラウザと細かいUI更新のやり取りをしています。
ブラウザには差分(どこが変わったか)だけをリアルタイム通信で送り、ブラウザが最終的にHTMLとして表示します。ページ全体の再読み込み(F5)なしで UI が更新されます。MVC/Razor Pagesも「サーバーが計算して HTML を返す」のが通常ですが、Blazor Serverはそれに加えて「サーバーが計算して差分を即時反映」(F5なし)されます。
チャット/ダッシュボード/共同編集のように即時更新が嬉しい場面では使いますが、一般的な「フォーム送信+一覧更新」だけなら普通のAPI呼び出しでも十分です。

「Blazor WebAssembly アプリ」テンプレート

2020年5月19日 に Blazor WebAssembly 3.2.0 としてリリースされたテンプレートです。
(バージョンが3.2なのは、.NET Core 3.1 を基盤にしているが、また.NET Core 3.1と明確に区別するためです。Blazor WebAssembly は 3.1 の上に載ってはいるものの、3.1のLTSを継承しない扱いだったため、混同されないように専用の番号(3.2系)を付けています)
Blazor WebAssembly は「Blazor Server のUIレンダリングをブラウザで実行するバージョン」のようなイメージです。UI処理はブラウザで完結するので、サーバーの負荷は軽くなります。SignalRは使っていませんが、あとから任意で追加はできます。
初回アクセス時に、WASM(WebAssemblyの略)の .NETランタイム/アプリのDLL/静的資産をダウンロード&キャッシュします。以降はService Workerがキャッシュを使用してそれらを供給するため、オフラインでも起動・UI操作が可能です。
なので、オフライン対応のWebアプリに向いています。

「ASP.NET Core Empty」テンプレート

完全にカスタム構成で始めたい場合に使用します。最小限の設定のみの構成になっていますが、あとからMVCやRazor Pagesなども追加可能です。

  1. REpresentational State Transferの略で、Webの住所(URL)にアクセスして、決まったルールでデータをやり取りする仕組みのこと。設計スタイルを指す言葉で、プロトコルではない。REST APIでよく使用されるデータ形式には、JSONやXMLがある。

  2. シグナルアール。ASP.NET Core のリアルタイム通信ライブラリのこと。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?