0
0

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】ASP.NET MVC 5(.NET Framework)でよく使用されるフォルダ構成

0
Posted at

概要

Visual Studio のASP.NET MVC 5(.NET Framework)でよく使用されるフォルダ構成について、まとめてみました。

目次

ASP.NET MVC 5 と ASP.NET Core MVC の違い

同じ「MVC」という名前でも、ASP.NET MVC 5 と ASP.NET Core MVC は 基盤となるフレームワークが異なるため、プロジェクト構成や設定方法、運用の前提が変わります。

ASP.NET MVC 5(.NET Framework)

Windows/IIS 上で動作し、 .NET Framework が土台になっています。System.Web、Global.asax、App_Start、Web.config などの仕組みを使います。この記事でフォルダ構成を解説するのはこちらです。

ASP.NET Core MVC(.NET)

クロスプラットフォームの .NET(Core) が土台になっています。既定では Kestrel で動き、Program.csにミドルウェアやルーティングをまとめます。設定は appsettings.json が中心です。

どちらを使用する?

新規開発やクロスプラットフォームの場合は Core での開発が中心です。既存の .NET Framework/IIS 前提のシステムをそのまま保守・改修したい場合はASP.NET MVC 5を使用します。

フォルダ構成

1. Views

通常のビュー(アクション名と一致)

既定では、Viewファイルは ~/Views/{Controller名}/{Action名}.cshtml をまず探し、見つからなければ~/Views/Shared/{Action名}.cshtml を探します。

~/Views/{Controller名}/{Action名}.cshtml
~/Views/Shared/{Action名}.cshtml(共通化)

~/Views/Shared/ は「複数のコントローラーから使い回すビュー(=共有ビュー)」を置くための場所です。

レイアウト

サイト全体で共通に使うページ枠(ヘッダー、ナビ、フッター、スクリプト・CSSの読み込みなど)を定義するのがレイアウトファイルです。各ビューはレイアウトの「枠」に@RenderBody()で自分の中身を差し込みます。
このファイルもSharedの中に配置します。

典型:~/Views/Shared/_Layout.cshtml
※ _ViewStart.cshtml で Layout = "~/Views/Shared/_Layout.cshtml"; のように指定

部分ビュー(Partial)

ページの一部を切り出し、再利用可能な断片として使うためのビューです。ヘッダー、フッター、メニュー、一覧の1行、カードなど「同じ見た目・構造」を複数ページで使い回すときに便利です。慣習的にファイル名の先頭を _(アンダースコア) にします(例:_Header.cshtml)。配置は、呼び出し側ビューと同じフォルダか ~/Views/Shared/ が定番です。

置き場所は通常ビューと同じ規約(Views/{Controller} または Views/Shared)
先頭に _ を付けるのは慣習であり必須ではありません(_Menu.cshtml など)

テンプレート(EditorTemplates / DisplayTemplates)

型や名前に応じて自動で選ばれるビューです。同一型の表示・編集 UI を一か所で定義して全ページで再利用できます。置き場所は以下のいずれかで、自動探索されます。

~/Views/{Controller}/EditorTemplates/{Template名}.cshtml
~/Views/Shared/EditorTemplates/{Template名}.cshtml
~/Views/{Controller}/DisplayTemplates/{Template名}.cshtml
~/Views/Shared/DisplayTemplates/{Template名}.cshtml
Html.EditorFor(...) / Html.DisplayFor(...) がここを自動探索

Areas(領域)

大規模アプリを「機能のまとまり」ごとにミニMVC(Controller・Views・Models のセット)へ分割する仕組みです。
例:Admin、Customer、Billing、Reports など、URLやフォルダを機能別に分けて管理できます。

~/Areas/{Area名}/Controllers/...
~/Areas/{Area名}/Views/{Controller}/{Action}.cshtml
~/Areas/{Area名}/Views/Shared/...

ビュー用 Web.config

ビュー専用の設定ファイルで、ビューの直接アクセスを遮断する設定もここに入っています。直接 URL で .cshtml 等にアクセスされた場合は 404 を返すハンドラ(HttpNotFoundHandler)の登録が含まれており、これがビューの直接公開を防止しています。削除してしまうと、ビューが直接リクエストで到達してしまうなど、MVC の基本設計(コントローラー経由)を崩す恐れがあります。

~/Views/Web.config(Razor の設定用。MVC プロジェクトでは重要)

_ViewStart.cshtml

_ViewStart.cshtml は、各ビュー(.cshtml)がレンダリングされる直前に毎回実行される“共通の前処理”ファイルです。既定レイアウトの指定や簡単な初期化に使います。ファイル名に_が付いていますが、部分ビューではありません。

 ~/Views/_ViewStart.cshtml(下位フォルダに置けばその配下にだけ適用)

2. ルーティング・設定類(読み込み規約)

既定では起動時に Global.asax の Application_Start から App_Start フォルダ配下の以下の設定クラスが呼び出されます。

RouteConfig.cs(RegisterRoutes で MVC ルート登録)
FilterConfig.cs(グローバルフィルタ登録)
BundleConfig.cs(バンドル登録:Scripts.Render / Styles.Render で使用)

3. 静的ファイル

CSS

CSSは、Contentフォルダ内に配置されるのが一般的です。

~/Content/site.css
~/Content/bootstrap.css

JavaScript

JavaScriptはScriptsフォルダに配置されるのが一般的です。

~/Scripts/jquery.js
~/Scripts/bootstrap.js
~/Scripts/app/*.js

画像・フォント

画像はContent/imagesフォルダ内、フォントはContent/fontsフォルダ内に配置されるのが一般的です。

~/Content/images/
~/Content/fonts/(または ~/Images/, ~/Fonts/ など)

4. App_Data

アプリが内部で使うデータファイルを置くフォルダです。例としてXML/JSON などの設定ファイル、一時的な保存用ファイル(エクスポート、キャッシュ、簡単なログ)などが該当します。
IIS(Webサーバー)は App_Data を“公開対象外”にしているため、URLで直接読めません。つまり、ブラウザから直リンクされない安全な保管場所として使えます(中のファイルはコードから読み書きします)。

5. コード整理(フォルダは規約強制ではないが慣習)

Controllers

ControllerクラスはControllersフォルダに配置するのが一般的です。

~/Controllers/(FooController など)

Models

ModelクラスはModelsフォルダに配置するのが一般的です。

~/Models/

ViewModels

ViewModelクラスはViewModelsフォルダに配置するのが一般的です。もしくは、上記のModelsフォルダに配置することもあります。

~/ViewModels/

Filters

FilterクラスはFiltersフォルダに配置するのが一般的です。

~/Filters/(カスタムフィルタ属性をまとめる)

フォルダ構成のサンプル

以下は、MVC5のフォルダ構成のサンプルです。

/App_Start
    BundleConfig.cs
    FilterConfig.cs
    RouteConfig.cs
/App_Data
/bin
/Content
    site.css
    images/
/Controllers
    HomeController.cs
/Models
/Scripts
    jquery-3.7.0.js
/Views
    /Home
        Index.cshtml
        About.cshtml
    /Shared
        _Layout.cshtml
        _LoginPartial.cshtml
    _ViewStart.cshtml
    Web.config
/Areas
    /Admin
        /Controllers
        /Views
            /Dashboard
                Index.cshtml
            /Shared
                _Layout.cshtml
Global.asax
Web.config

終わりに

フォルダ構成にはルールが多く、最初は覚えるのが大変ですが、一度理解してしまえば一定のパターンが決まっているため、対応は比較的楽になるかなと思います。

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?