ASP.NET Core

出典: フリー教科書『ウィキブックス(Wikibooks)』

ASP.NET Coreの概要[編集]

ASP.NET Coreの概要と特徴[編集]

ASP.NET Coreは、2016年にMicrosoftによって発表された新しいオープンソースのWebアプリケーションフレームワークです。従来のASP.NETを全面的に刷新したものであり、.NET Coreプラットフォーム上で動作します(.NET 5 からは名前に Core はつかなくなりましたが、.NET は旧来の .NET Frameworksと関係技術の略称にも使われていたので、以下 .NET Core 表記を用います)。

ASP.NET Coreの主な特徴は以下の通りです:

  • クロスプラットフォーム対応: Windows、macOS、Linuxの各プラットフォームで動作可能
  • 高パフォーマンス: 軽量で高速な動作が可能
  • クラウド/コンテナ対応: クラウド環境やDockerコンテナでの利用に適している
  • モジュール化: 必要な機能のみをNuGetパッケージとしてインストールできる
  • Owin(Open Web Interface for .NET)対応: IISに依存せずに、さまざまなホスト環境で動作可能
  • オープンソース: GitHubでソースコードが公開されており、コミュニティによる開発が進められている

ASP.NET との違いの解説[編集]

従来のASP.NETは、Microsoftが開発したWindowsのみで動作するWebアプリケーションフレームワークでした。.NET Frameworkを使用し、主にWindowsのIISサーバー上で動作するよう設計されていました。

一方、ASP.NET Coreは、.NET Coreプラットフォームを使用することで、WindowsだけでなくmacOSやLinuxなどのクロスプラットフォームに対応しています。また、IISに依存せずに、Kestrelなどの自前のWebサーバーで動作させることも可能です。

性能面でも、ASP.NET Coreは大幅な高速化を実現しており、クラウドやコンテナ環境での利用に適しています。モジュール化された設計により、必要な機能のみをインストールできるため、リソース使用量も抑えられます。

さらに、オープンソース化されたことで、コミュニティによる活発な開発と改善が行われています。これにより、最新のWebテクノロジーに迅速に対応できるようになっています。

ASP.NET Coreの導入メリット[編集]

ASP.NET Coreを採用することで、以下のようなメリットが得られます:

  1. クロスプラットフォーム対応: Windowsだけでなく、macOSやLinuxでも開発及びデプロイが可能になるため、開発環境の柔軟性が向上します。
  2. 高パフォーマンス: 軽量で高速な動作が可能なため、スケーラビリティの高いWebアプリケーションの構築が可能です。
  3. クラウド/コンテナ対応: クラウド環境やDockerコンテナでの利用に適しているため、インフラの柔軟性が向上します。
  4. モジュール化: 必要な機能のみをNuGetパッケージとしてインストールできるため、リソース使用量を最適化できます。
  5. オープンソース: GitHubでソースコードが公開されており、コミュニティによる活発な開発と改善が行われています。
  6. 最新技術への対応: オープンソース化されたことで、最新のWebテクノロジーへの迅速な対応が可能になります。

これらのメリットにより、ASP.NET Coreは、モダンなWebアプリケーション開発に最適なフレームワークと言えるでしょう。

開発環境の準備[編集]

.NET Coreのインストール[編集]

ASP.NET Coreアプリケーションを開発するには、まずはお使いのOSに合わせて.NET Coreランタイムをインストールする必要があります。

.NET Core公式サイトから、お使いのOSに対応したランタイムをダウンロードし、インストーラーに従ってインストールを行います。

Windows環境の場合は、Visual Studioを使用する際に、.NET Coreが自動的にインストールされるため、別途インストールする必要はありません。一方、macOSやLinux環境では、.NET Coreランタイムをあらかじめインストールしておく必要があります。

Visual StudioまたはVisual Studio Codeの設定[編集]

ASP.NET Coreの開発には、Visual StudioまたはVisual Studio Codeを使用できます。

Visual Studioを使用する場合は、"Visual Studio Installer"からASP.NET and web development ワークロードをインストールすることで、ASP.NET Core開発に必要な機能が揃います。

一方、Visual Studio Codeを使用する場合は、C#拡張機能をインストールし、アプリケーションのプロジェクトフォルダーを開くことで、ASP.NET Coreの開発が可能です。また、OmniSharpエクステンションをインストールすると、より高度な機能が利用できます。

初期プロジェクトの作成[編集]

開発環境が準備できたら、次は新しいASP.NET Coreプロジェクトを作成します。

Visual Studioの場合は、"ファイル" > "新規作成" > "プロジェクト"から、"ASP.NET Core Webアプリケーション"を選択します。

Visual Studio Codeの場合は、コマンドパレットから"dotnet new"コマンドを実行し、"web"を選択することで、新しいASP.NET Coreプロジェクトを作成できます。

プロジェクトテンプレートには、Webアプリケーション(モデル-ビュー-コントローラー)、Web API、空のプロジェクトなどがあり、用途に合わせて選択できます。

これで、ASP.NET Coreの開発環境が整いました。次は、基本的な構造と機能について見ていきましょう。

ASP.NET Coreの公用語
ASP.NET Coreの公用語は主にC#(C Sharp)言語です。

ASP.NET Coreアプリケーションの開発では、C#を使用してコントローラー、サービス、モデルなどのサーバーサイドのロジックを実装します。C#は.NET Coreプラットフォームのデフォルトの言語であり、ASP.NET Coreの設計思想に合致しているため、主要な言語として採用されています。

一方、クライアントサイドでは、JavaScript、TypeScript、Blazorなども使用できます。BlazorはサーバーサイドのC#とWebAssemblyを使ってクライアントサイドのUIを構築する機能を提供しています。

ただし、ASP.NET Coreのコア部分およびフレームワークそのものはC#で実装されているため、サーバーサイドの開発においてC#を使用することが一般的です。F#などの他の言語を使用することも可能ですが、ASP.NET Coreの機能を最大限に活用するためには、C#でプログラミングすることが推奨されています。


基本的な構造と機能[編集]

プロジェクトの構造[編集]

ASP.NET Coreのプロジェクトは、以下のような構成となっています。

  • wwwroot/: 静的ファイル (CSS、JavaScript、画像など) が置かれるディレクトリ
  • Controllers/: アプリケーションのコントローラークラスが置かれるディレクトリ
  • Models/: アプリケーションのデータモデルが置かれるディレクトリ
  • Views/: アプリケーションのビューファイル (Razor) が置かれるディレクトリ
  • Startup.cs: アプリケーションの起動時の設定を行うクラス
  • Program.cs: アプリケーションのエントリーポイントとなるクラス

このような構造により、MVC(Model-View-Controller)アーキテクチャに基づいたWebアプリケーションの開発が可能になります。

Startupクラスとミドルウェアの設定[編集]

Startup.csクラスは、アプリケーションの起動時の設定を行うクラスです。ここでは、以下のような処理を行います。

  • 使用するミドルウェアの設定
  • 依存性注入の設定
  • ルーティングの設定
  • その他、アプリケーションの初期化に関する設定

ミドルウェアとは、HTTPリクエストの前後で実行されるコンポーネントのことです。ASP.NET Coreでは、ミドルウェアを柔軟に組み合わせることで、リクエスト処理パイプラインをカスタマイズできます。

ルーティングとコントローラー[編集]

ASP.NET Coreでは、URLとアプリケーションの処理をマッピングするルーティング機能を提供しています。 ルーティングの設定は、Startup.csConfigureメソッド内で行います。

また、アプリケーションの処理ロジックは、コントローラークラスに実装します。コントローラークラスはControllers/ディレクトリ内に置かれ、HTTPリクエストに応じて適切な処理を行います。

ビューとRazorテンプレートエンジン[編集]

ビューは、コントローラーから渡されたモデルデータを表示するためのファイルです。ASP.NET Coreでは、Razorテンプレートエンジンを使ってビューを記述します。 Razorは、C#とHTMLを組み合わせて記述できる構文で、動的なWebページを作成するのに適しています。

ビューファイルはViews/ディレクトリ内に置かれ、コントローラーからViewメソッドを通して呼び出されます。

依存性注入の活用[編集]

ASP.NET Coreは、依存性注入(Dependency Injection)のメカニズムを標準で提供しています。 依存性注入とは、オブジェクトの生成と依存関係の管理を集中的に行う設計パターンです。

Startup.csConfigureServicesメソッドで、アプリケーション全体で共有するサービスを登録します。 そして、コントローラーのコンストラクタ引数に依存するサービスを宣言することで、自動的にサービスのインスタンスが注入されます。

これにより、疎結合で柔軟な設計が可能になり、テストの容易性も高まります。

以上が、ASP.NET Coreの基本的な構造と機能の概要です。次は、データアクセスとモデルについて見ていきましょう。

データアクセスとモデル[編集]

Entity Framework Coreによるデータアクセス[編集]

ASP.NET Coreでは、データアクセスにEntity Framework Coreを使用することが一般的です。Entity Framework Coreは、.NET Coreに最適化された軽量なオブジェクト・リレーショナル・マッパー(ORM)ライブラリです。

Entity Framework Coreを使うと、データベースのテーブルをクラスで表現できるようになり、SQL文を直接書く必要がなくなります。CLRオブジェクトとデータベースのデータを自動的に変換してくれるため、開発の生産性が大幅に向上します。

Entity Framework Coreを使ったデータアクセスの典型的な流れは以下の通りです:

  1. データベースのテーブルに対応するモデルクラスを定義する
  2. DbContextクラスを作成し、データベースへの接続設定を行う
  3. モデルクラスのインスタンスを使ってCRUD操作を行う

このようにEntity Framework Coreを活用することで、効率的にデータベースとの連携を実現できます。

データベースマイグレーション[編集]

ASP.NET Coreでは、データベースの構造変更を管理するためのデータベースマイグレーション機能を提供しています。

マイグレーションを使うと、モデルクラスの変更をコードで表現し、それに基づいてデータベースの構造を自動的に更新できます。これにより、開発中のデータベース変更を確実に反映させることができ、本番環境への移行も容易になります。

マイグレーションの主な手順は以下の通りです:

  1. モデルクラスの変更を加える
  2. Add-Migrationコマンドを実行してマイグレーションファイルを生成する
  3. Update-Databaseコマンドを実行してデータベースを更新する

このようにマイグレーション機能を活用することで、モデルとデータベースの同期を簡単に行えます。

モデルバインディングとバリデーション[編集]

ASP.NET Coreでは、HTTPリクエストからモデルオブジェクトを自動的に生成する「モデルバインディング」機能を提供しています。

これにより、リクエストパラメーターをモデルクラスのプロパティにマッピングする手間が省けます。また、モデルクラスにバリデーションルールを定義することで、入力値のチェックも簡単に行えます。

バリデーションは、モデルクラスにデコレーターを適用して定義します。例えば、[Required]属性を使えば必須入力のチェックができ、[StringLength]属性を使えば文字列長のチェックができます。

コントローラーのアクションメソッドでは、ModelState.IsValidプロパティを確認することで、バリデーションの結果を簡単に取得できます。

このようにモデルバインディングとバリデーション機能を使うことで、Webアプリケーションの入力チェックを効率的に実装できます。

以上がASP.NET Coreにおけるデータアクセスとモデルの基本的な概要です。次は、セキュリティについて見ていきましょう。

セキュリティ[編集]

認証(Cookie認証、OpenID Connect)[編集]

ASP.NET Coreでは、ユーザー認証にCookie認証やOpenID Connectなどの認証方式を使用できます。

Cookie認証は、ログイン時にサーバー側で認証情報をCookieに格納し、以降のリクエストでそのCookieを検証することで認証を行う方式です。ASP.NET Coreの標準機能で簡単に実装できます。

一方、OpenID Connectは、外部の認証プロバイダ(Google、Facebook、Microsoft Accountなど)を使ってユーザー認証を行う方式です。アプリケーション側はプロバイダの認証結果を受け取ることで、ユーザー認証を実現できます。

これらの認証方式は、ミドルウェアを介してStartup.csで設定します。適切な認証方式を選択し、設定することで、安全な認証機能を実装できます。

認可(ポリシーベースの認可)[編集]

認証が完了すると、次は認可(認証済みユーザーの機能アクセス制限)の設定が必要になります。

ASP.NET Coreでは、ポリシーベースの認可方式を採用しています。ポリシーとは、ユーザーの属性やロールに応じてアクセス可能な機能を定義したものです。

ポリシーは、Startup.csConfigureServicesメソッドで設定します。そして、コントローラーやアクションメソッドに[Authorize(Policy = "PolicyName")]のようにアノテーションを付けることで、ポリシーに基づいた認可が実現できます。

この方式により、柔軟な認可ロジックを実装できるようになります。

HTTPS, CORS, XSS対策[編集]

ASP.NET Coreでは、セキュリティ対策として以下のような機能が提供されています。

HTTPS
リクエストをHTTPSで強制的に行うよう設定できる
証明書の設定も簡単に行える
CORS(Cross-Origin Resource Sharing)
異なるオリジンからのアクセスを制御できる
許可するオリジンを柔軟に設定できる
XSS(Cross-Site Scripting)対策
Razor ViewEngineがデフォルトでHTMLエンコーディングを行う
HTML出力時にHTMLタグがエスケープされる

これらの機能を適切に設定することで、アプリケーションのセキュリティを強化できます。

以上がASP.NET Coreにおけるセキュリティ対策の基本的な概要です。次はWeb APIの構築について見ていきましょう。

Web APIの構築[編集]

Web APIコントローラーの実装[編集]

ASP.NET Coreでは、Web APIコントローラーを通して、RESTfulなWebサービスを簡単に実装できます。コントローラークラスは、[ApiController]属性を付けることで、Web APIコントローラーとして認識されます。

コントローラーのアクションメソッドでは、HTTPメソッド(Get、Post、Put、Delete)に対応するアノテーションを付け、リクエストパラメーターをモデルクラスで受け取ることができます。

また、アクションメソッドの戻り値はIActionResultインターフェイスを実装したクラスで返すのが一般的です。これにより、ステータスコードやレスポンスデータを柔軟に設定できるようになります。

JSON/XMLのシリアル化/デシリアル化[編集]

ASP.NET Coreでは、JSONやXMLのシリアル化/デシリアル化を標準で行えます。

リクエストデータをモデルクラスにバインドする際は、自動的にJSON/XMLのデシリアル化が行われます。また、アクションメソッドの戻り値をJSON/XMLで返す場合は、JsonResultXmlResultクラスを使用できます。

さらに、[Produces("application/json")]などのフォーマット指定アノテーションを使えば、クライアントからのAcceptヘッダに応じて適切なレスポンスフォーマットを返せるようになります。

Swaggerによるドキュメンテーション[編集]

Swaggerは、Web APIのドキュメンテーションを自動生成するツールです。ASP.NET Coreでは、Swaggerを簡単に導入できます。

Swaggerを使うと、Web APIコントローラーのアクションメソッドから、リクエストパラメーター、レスポンスデータ、HTTPメソッドなどの情報を自動的に収集できます。これらの情報を基に、美しいドキュメントページを生成できるため、API利用者にとって大変便利です。

Swaggerの導入は、わずかな設定で完了するため、Web APIを開発する際は、ぜひ活用しましょう。

非同期処理とリアルタイム通信[編集]

Asyncプログラミング[編集]

ASP.NET Coreでは、非同期処理を簡単に実装できるようになっています。アクションメソッドやサービスメソッドにasync修飾子を付け、awaitキーワードを使うことで、非同期処理を記述できます。

非同期処理を使うことで、CPU資源の無駄がなくなり、スループットの向上が期待できます。特に、データベースアクセスや外部APIコールなど、I/Oが絡む処理で効果的です。

TaskValueTaskなどの非同期型を活用し、適切にエラー処理やキャンセル処理を行うことで、ロバストな非同期アプリケーションを構築できます。

SignalRによるリアルタイム通信[編集]

ASP.NET Coreには、SignalRライブラリが標準で含まれています。SignalRを使うと、サーバーとクライアントの間でリアルタイムの双方向通信を実現できます。

チャット、通知、協調編集など、リアルタイム性が重要な機能を簡単に実装できるのが特徴です。サーバー側ではHubクラスを定義し、クライアント側ではJavaScriptクライアントライブラリを使ってハブに接続します。

SignalRは、WebSocketなどの最新の通信プロトコルに対応しており、フォールバック機能も備えているため、幅広いクライアント環境で動作します。リアルタイム通信を必要とするWebアプリケーションの開発に最適です。

テスト[編集]

ユニットテストの実装[編集]

ASP.NET Coreアプリケーションのテストには、xUnitやNUnitなどのユニットテストフレームワークを使用することができます。

ユニットテストでは、アプリケーションの最小単位であるメソッドやクラスに対して、個別にテストを行います。テストの対象は、ビジネスロジックを含むサービスクラスやヘルパークラスなどが一般的です。

テストの実装手順は以下のようになります:

  1. テストプロジェクトを作成し、テストフレームワークの参照を追加する
  2. テストメソッドを定義し、Assertクラスのメソッドでテスト対象の振る舞いを検証する
  3. 依存関係の注入を活用し、モック/スタブを使ってテスト対象を孤立させる
  4. 継続的にテストを実行し、リグレッションを防ぐ

ユニットテストを活用することで、アプリケーションの機能が確実に動作することを保証でき、リファクタリングの際の安全性も高まります。

統合テストの実行[編集]

ユニットテストに加えて、ASP.NET Coreでは統合テストの実行も重要です。

統合テストでは、複数のコンポーネントが連携して動作することを検証します。例えば、コントローラー、サービス、リポジトリ、データベースなどが正しく連携していることを確認するテストが該当します。

統合テストの実装には、WebApplicationFactoryクラスを使うと便利です。このクラスを使うと、実際のWebホスト環境に近い状態でテストを行うことができます。

また、TestServerクラスを使えば、HttpClientを使ってWebアプリケーションとHTTPリクエストのやり取りをシミュレートできます。

これらのツールを活用することで、統合テストを効率的に実装し、アプリケーション全体の品質を担保できます。

デプロイ[編集]

IISへのデプロイ[編集]

ASP.NET Coreアプリケーションは、Windowsサーバー上のIIS(Internet Information Services)にデプロイできます。

IISへのデプロイには、Visual Studioの"発行"機能を使うと便利です。発行の設定画面から、ターゲットサーバーのホスト名やデプロイ方法などを指定できます。

また、.NET Core SDKに含まれるdotnet publishコマンドを使ってデプロイパッケージを作成し、手動でIISにデプロイすることもできます。

IISへのデプロイ時は、アプリケーションプールの設定やバーチャルディレクトリの作成など、IISの詳細な設定も必要となります。

Dockerコンテナ化[編集]

ASP.NET Coreアプリケーションは、Dockerコンテナ化して配布することもできます。

Dockerfileを作成し、docker buildコマンドでコンテナイメージを生成します。その後、docker runコマンドでコンテナを起動することで、アプリケーションを簡単にデプロイできます。

Dockerを使うことで、開発、テスト、本番環境での一貫したアプリケーション実行環境を実現できます。また、スケーラビリティや可用性の向上にも役立ちます。

クラウドデプロイ(Azure App Service等)[編集]

ASP.NET Coreアプリケーションは、Azureなどのクラウドサービスにもデプロイできます。

Azureの"App Service"は、ASP.NET Coreアプリケーションをホスティングするための管理対象のPaaSサービスです。App Serviceにデプロイすれば、OSの管理やスケーリングなどのインフラ面での作業を省略できます。

デプロイ方法は、Visual Studioの"発行"機能やAzure CLIを使う方法があります。Dockerコンテナ化したアプリケーションをApp Service for Containersにデプロイすることもできます。

クラウドデプロイを活用することで、運用コストの削減や可用性の向上が期待できます。

高度な機能[編集]

Blazorによる単一ページアプリケーション[編集]

ASP.NET Coreには、Blazorと呼ばれる新しいWebフレームワークが含まれています。Blazorを使うと、C#とWebAssemblyを活用して、クライアントサイドで動作する単一ページアプリケーション(SPA)を構築できます。

Blazorは、Webブラウザ上でリアルタイムにDOMを操作することで、アプリケーションの高いレスポンシブ性と対話性を実現します。サーバーとの通信はWebSocketなどを使って行われるため、ページ遷移のリロードが不要となります。

Blazorアプリケーションの開発は、ASP.NET Coreのコンポーネントベースのプログラミングモデルに基づいて行います。C#によるロジック、Razor記法によるUIを組み合わせて、SEO対応も可能な高機能なSPAを構築できます。

Microserviceアーキテクチャ[編集]

ASP.NET Coreは、マイクロサービスアーキテクチャの構築にも適しています。

マイクロサービスとは、小さな機能単位で分割されたサービス群から構成されるアーキテクチャです。各サービスは独立して開発、デプロイ、スケーリングできるため、大規模で複雑なシステムの構築が容易になります。

ASP.NET Coreのモジュール性の高い設計や、.NET Coreの優れたパフォーマンスは、マイクロサービスの実装に適しています。さらに、Dockerやサービスメッシュなどのテクノロジーと組み合わせることで、より効果的なマイクロサービス基盤を構築できます。

設定管理とSecret管理[編集]

ASP.NET Coreアプリケーションの設定管理には、appsettings.jsonファイルが活用されます。このファイルには、接続文字列やAPIキーなどの設定値を記述できます。

さらに、ASP.NET Coreは、Azure Key Vaultなどの外部の秘密情報管理サービスとの連携にも対応しています。これにより、機密性の高い情報を安全に保管し、アプリケーションから参照することができます。

設定と秘密情報を適切に管理することで、環境に依存しない柔軟なアプリケーション構築が可能になります。開発、テスト、本番などの環境ごとに異なる設定値を簡単に切り替えられるため、DevOpsの実現にも役立ちます。

まとめ[編集]

ASP.NET Coreは、Microsoftが開発する最新のオープンソースWebアプリケーションフレームワークです。従来のASP.NETを刷新した製品で、以下のような特徴を備えています。

  • クロスプラットフォーム対応: Windows、macOS、Linuxで動作可能
  • 高パフォーマンス: 軽量で高速な動作が可能
  • クラウド/コンテナ対応: クラウド環境やDockerコンテナでの利用に適している
  • モジュール化: 必要な機能のみをNuGetパッケージとしてインストールできる
  • オープンソース: GitHubでソースコードが公開され、コミュニティによる活発な開発が行われている

ASP.NET Coreの主な機能と特徴は以下の通りです:

  • 依存性注入による疎結合な設計
  • Entity Framework Coreによる効率的なデータアクセス
  • Cookie認証やOpenID Connectなどの認証機能
  • ポリシーベースの柔軟な認可機能
  • Swaggerによる簡単なWebAPIドキュメンテーション
  • Asyncプログラミングによる高パフォーマンスの非同期処理
  • SignalRを使ったリアルタイム通信
  • xUnitやNUnitによるユニットテスト、統合テスト
  • IISへの簡単なデプロイ、Dockerコンテナ化、クラウド(Azure)へのデプロイ
  • Blazorによる単一ページアプリケーション開発
  • マイクロサービスアーキテクチャの実現
  • 柔軟な設定管理と秘密情報の管理

ASP.NET Coreは、モダンなWebアプリケーション開発に最適なフレームワークと言えます。クロスプラットフォーム対応、高パフォーマンス、クラウド/コンテナ対応など、さまざまな優れた機能を備えており、開発生産性の向上と高品質なアプリケーション構築に役立ちます。

リソース(参考文献・参考資料)[編集]

Wikipedia
Wikipedia
ウィキペディアASP.NET Coreの記事があります。


ASP.NET Coreの学習やリファレンスとして役立つリソースは以下のようなものがあります。

公式ドキュメント[編集]

これらの公式ドキュメントには、ASP.NET Coreの概要、チュートリアル、API reference、deployment guideなど、幅広い情報が掲載されています。

書籍[編集]

  • 「ASP.NET Core 6 in Action」 - Andrew Lock著
  • 「ASP.NET Core in Action, Second Edition」 - Andrew Lock著

書籍では、ASP.NET Coreの基礎から応用までを詳しく解説しており、初心者から上級者まで幅広く活用できます。

GitHub[編集]

ASP.NET Coreのソースコードや、関連するリポジトリを確認できます。

これらのリソースを参考にしながら、ASP.NET Coreの理解を深めていきましょう。