SHOEISHA iD

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

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

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

進化した「ASP.NET Core 2.0」新しいWeb開発手法を学ぶ

「ASP.NET Core 2.0」の変更点とインストール方法を知ろう

進化した「ASP.NET Core 2.0」新しいWeb開発手法を学ぶ 第1回


ASP.NET Core 2.0の変更点

 続いて、ASP.NET Core 2.0から追加された機能について説明します。

Razor Pages

 ASP.NET Core 2.0から新たなコーディング手法/概念として、Razor Pagesが導入されました。Razor Pagesではビューとビューに関連するプロパティや機能を保持するオブジェクト(PageModel)の対によって画面の開発を行うことで、ASP.NET MVCとは異なる開発スタイルでWebアプリケーションを作成することができます。

 ページと関連オブジェクトを対に定義していくため、いわゆるMVVM(Model-View-ViewModel)デザインパターンをASP.NETに導入したものと捉えることができます。

 図2は、ASP.NET Core MVCとのアーキテクチャの違いを表したものです。ASP.NET Core MVC(図上)ではユーザーからのリクエストの受け取り、対応するモデルでのビジネスロジックの実行、ビューの作成とレスポンスなどをコントローラーが中心となって行うMVCデザインパターンを採用しています。一方Razor Pages(図下)では、リクエストは直接ビューが受け取り、ビューに対応したビューモデルを経由してビジネスロジックを実行し、またビューモデルを経由してビューにデータを埋め込んでいくMVVMデザインパターンを採用しています。

図2 ASP.NET Core MVCとRazor Pagesのアーキテクチャの違い
図2 ASP.NET Core MVCとRazor Pagesのアーキテクチャの違い

 ASP.NET Core 2.0のアナウンスの中で、Razor Pagesについて「ページ(画面)を中心としたシナリオにおいて、MVCパターンに比べてシンプルかつ簡単に記述できる」と述べられています。今後のASP.NET Coreにおける画面を伴うアプリケーションでは、Razor PagesとASP.NET Core MVCから利用用途にあったフレームワークを選択して開発を行うことができるようになります。

 リスト1は、Razor Pagesを使ったビューと関連オブジェクト(PageModesオブジェクトと呼びます)のコード例です。

 ビューでは、コードの先頭で「@page」というRazor Pagesのビューであることを表すディレクティブを使い、Razor Pagesであることを宣言します。@modelディレクティブは、このビューが参照することのできるモデルオブジェクトを宣言するもので、ASP.NET MVCに従来より備わっているものです。ここでは、pタグの部分でモデルが持つ現在時刻(NowDate)の値を参照するのに利用しています。

リスト1 Razor Pagesのビューの例(Index.cshtml)
@page
@model sample.Pages.IndexModel

<html>
    <body>
        <h2>Now Time is: </h2>

        <p>@Model.NowDate</p>
    </body>
</html>

 このRazor Pagesビューにひも付くPageModelオブジェクトはリスト2の通りです。「PageModel」クラスを継承したクラスとして作成します。

リスト2 Razor Pagesのビューにひも付くPageModelオブジェクトの例(Index.cshtml.cs)
namespace sample.Pages
{
    public class IndexModel : PageModel
    {
        public DateTime NowDate { get; set; }

        public void OnGet()
        {
            NowDate = DateTime.Now;
        }
    }
}

 プロパティである「NowDate」が、ビューが参照しようとしていたものです。「OnGet」メソッドは、Razor PagesのビューにHTTPのGETリクエストがあった場合に実行されるメソッドです。この例では単純に現在時刻を取得してNowDateプロパティに値をセットしています。これによってビューに定義した「@Model.NowDate」の値が置き換わり、現在時刻が画面に表示されるようになります。

図3 Razor Pagesの画面にアクセスした例
図3 Razor Pagesの画面にアクセスした例

 このようにRazor Pagesを使った実装では、ビューとPageModelオブジェクトの組み合わせでWebアプリケーションを作成することができます。

 詳しいRazor Pagesでの実装方法やASP.NET MVCとの比較などについては、連載の第2回で説明する予定です。

SPAテンプレートの追加

 ASP.NET Core 2.0では、Webアプリケーション用のプロジェクトテンプレートとして、従来よりあるMVCと前述したRazor Pagesに加え、SPA(Single Page Applications)用のテンプレートも追加されました。SPAはHTML5やCSS3、JavaScriptフレームワーク等を組み合わせたリッチクライアントの開発手法であり、フロントエンド開発の場で採用しているプロジェクトも増えていることと思います。ASP.NET Core 2.0では、これらSPAのランタイムであるNode.jsを組み込んでおり、.NETのビルドプロセスの一環としてJavaScriptのコンパイルをサーバーサイドのタスクとして行います。

 現在は「Angular」「React.js」「React.jsとRedux」の3パターンからSPAテンプレートを選択することができます。SPAテンプレートを使ったアプリケーション開発については、第3回で説明する予定です。

Entity Framework Core 2.0

 .NET Core 2.0、ASP.NET Core 2.0のバージョンアップに合わせ、Entity Framework Coreも2.0へとバージョンアップしました。Entity Frameworkは.NET FrameworkにおけるO/Rマッパーであり、Entity Framework Coreはそのクロスプットフォーム版ということで、位置づけとしてはASP.NET Coreと非常に似ています。

  • .NET Standard 2.0に対応
  • SQLに変換可能なLINQクエリの向上
  • グローバルなクエリフィルタ
  • DbContextのプーリングに対応

 Entity Framework Core 2.0を使用したDBアクセスをする、ASP.NET Core 2.0のアプリケーション開発については、第4回で説明する予定です。

「.NET Standard 2.0」について

 .NET Standardは.NET Framework、.NET Core、また2016年にMicrosoftが買収したXamarinといったアプリケーション基盤の下部レイヤーにあたる基本ライブラリを、ひとつのライブラリへ統一しようとするプロジェクトです。これまで別々の基本ライブラリを使用していた部分を.NET Standardに置き換えることで、どのアプリケーション基盤上で実装したコードであっても異なるアプリケーション基盤で動かせるようになり、コードの再利用性を高めることができます。

 .NET Standard 2.0は、ASP.NET Core 2.0、.NET Core 2.0、Entity Framework Core 2.0と同じタイミングで発表された.NET Standardの最新バージョンで、利用できるAPIの数が前バージョンより大幅に増加しています。

図4 .NET Standardの概観図
図4 .NET Standardの概観図

次のページ
ASP.NET Core 2.0をはじめる準備をしよう

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

進化した「ASP.NET Core 2.0」新しいWeb開発手法を学ぶ連載記事一覧

もっと読む

この記事の著者

WINGSプロジェクト 秋葉 龍一(アキバ リュウイチ)

WINGSプロジェクトについて>有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。 2026年時点での登録メンバは約50名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書記事多数。 RSS X: @WingsPro_info(公式)、@WingsPro_info/wings(メンバーリスト) Facebook

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

山田 祥寛(ヤマダ ヨシヒロ)

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるLaravel実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

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

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

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/10482 2017/10/31 16:44

イベント

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

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

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

メールバックナンバー