ヒント
このコンテンツは、ASP.NET Core と Azure を使用した最新の Web アプリケーションの設計に関する電子ブックからの抜粋です。 .NET Docs またはオフラインで読み取ることができる無料のダウンロード可能な PDF として入手できます。
"… 適切な設計で、機能は安く来る。 このアプローチは困難ですが、成功し続けます。
- デニス・リッチー
最新の Web アプリケーションでは、ユーザーの期待が高まり、要求がこれまで以上に高くなっています。 現在の Web アプリは、世界中のどこからでも 24 時間 365 日利用でき、事実上あらゆるデバイスまたは画面サイズから使用できる予定です。 Web アプリケーションは、需要の急増に対応するために、セキュリティで保護され、柔軟性が高く、スケーラブルである必要があります。 複雑なシナリオは、JavaScript を使用してクライアント上に構築された豊富なユーザー エクスペリエンスによって処理され、Web API を介して効率的に通信する必要があります。
ASP.NET Core は、最新の Web アプリケーションとクラウドベースのホスティング シナリオ向けに最適化されています。 モジュール設計により、アプリケーションは実際に使用する機能のみに依存できるため、アプリケーションのセキュリティとパフォーマンスが向上し、ホスティング リソースの要件が軽減されます。
参照アプリケーション: eShopOnWeb
このガイダンスには、いくつかの原則と推奨事項を示す 参照アプリケーション eShopOnWeb が含まれています。 このアプリケーションは、シャツ、コーヒーマグ、その他のマーケティングアイテムのカタログを閲覧するためのシンプルなオンライン ストアです。 参照アプリケーションは、わかりやすくするために意図的に単純です。
図 2-1 eShopOnWeb
参照アプリケーション
- eShopOnWeb
https://github.com/dotnet/eShopOnWeb
クラウドでホストされスケーラブル
ASP.NET Core は、低メモリで高スループットであるため、クラウド (パブリック クラウド、プライベート クラウド、任意のクラウド) 用に最適化されています。 ASP.NET Core アプリケーションのフットプリントが小さいほど、同じハードウェアでホストできる量が増え、従量課金制クラウド ホスティング サービスを使用する場合のリソースの支払いが少なくなります。 スループットが高いほど、同じハードウェアを使用することで、アプリケーションからより多くの顧客にサービスを提供できるため、サーバーやホスティング インフラストラクチャへの投資の必要性がさらに軽減されます。
クロス プラットフォーム
ASP.NET Core はクロスプラットフォームであり、Linux、macOS、Windows で実行できます。 この機能により、ASP.NET Core を使用して構築されたアプリの開発とデプロイの両方に関する多くの新しいオプションが開かれます。 Docker コンテナー (Linux と Windows の両方) では、ASP.NET Core アプリケーションをホストできるため、 コンテナーとマイクロサービスの利点を活用できます。
モジュール式と疎結合
NuGet パッケージは .NET Core の最上位の市民であり、ASP.NET Core アプリは NuGet を通じて多くのライブラリで構成されます。 この機能の細分性により、アプリが実際に必要とする機能のみに依存して展開できるため、フットプリントとセキュリティの脆弱性の領域が削減されます。
ASP.NET Core では、内部とアプリケーション レベルの両方で依存関係 の挿入も完全にサポートされます。 インターフェイスには、必要に応じてスワップ アウトできる複数の実装を含めることができます。 依存関係の挿入により、アプリは特定の実装ではなく、これらのインターフェイスに疎結合できるため、拡張、保守、テストが容易になります。
自動テストで簡単にテスト
ASP.NET Core アプリケーションは単体テストをサポートし、それらの疎結合と依存関係の挿入のサポートにより、インフラストラクチャの懸念事項をテスト目的で偽の実装と簡単に交換できます。 ASP.NET Core には、メモリ内でアプリをホストするために使用できる TestServer も付属しています。 関数型テストでは、このインメモリ サーバーに要求を行い、完全なアプリケーション スタック (ミドルウェア、ルーティング、モデル バインド、フィルターなど) を実行し、応答を受け取ることができます。これは、実際のサーバーでアプリをホストし、ネットワーク層を介して要求を行うのに要する時間のほんの一部です。 これらのテストは、最新の Web アプリケーションでますます重要になっている API では、特に簡単に記述でき、価値があります。
サポートされている従来の動作と SPA の動作
従来の Web アプリケーションでは、クライアント側の動作はほとんど関与していませんが、代わりに、アプリが実行する必要がある可能性があるすべてのナビゲーション、クエリ、更新にサーバーを依存していました。 ユーザーが行った新しい操作はそれぞれ新しい Web 要求に変換され、結果はエンド ユーザーのブラウザーでページ全体を再読み込みします。 従来のモデルView-Controller (MVC) フレームワークは、通常、このアプローチに従います。新しい要求はそれぞれ異なるコントローラー アクションに対応し、モデルで動作し、ビューを返します。 特定のページに対する一部の個々の操作は、AJAX (非同期 JavaScript と XML) 機能で強化される場合がありますが、アプリの全体的なアーキテクチャでは、さまざまな MVC ビューと URL エンドポイントが使用されています。 さらに、ASP.NET Core MVC では、MVC スタイルのページを整理する簡単な方法である Razor Pages もサポートされています。
これに対し、シングル ページ アプリケーション (SPA) では、動的に生成されるサーバー側のページ読み込みが非常に少なくなります (存在する場合)。 多くの SPA は、アプリを起動して実行するために必要な JavaScript ライブラリを読み込む静的 HTML ファイル内で初期化されます。 これらのアプリは、データニーズに対して Web API を大量に使用し、はるかに豊富なユーザー エクスペリエンスを提供できます。 Blazor WebAssembly では、.NET コードを使用して SPA を構築する手段が提供され、クライアントのブラウザーで実行されます。
多くの Web アプリケーションには、従来の Web アプリケーションの動作 (通常はコンテンツ用) と SPA (対話機能用) の組み合わせが含まれます。 ASP.NET Core では、同じ一連のツールと基になるフレームワーク ライブラリを使用して、同じアプリケーションで MVC (ビューまたはページ ベース) と Web API の両方がサポートされます。
シンプルな開発とデプロイ
ASP.NET Core アプリケーションは、単純なテキスト エディターとコマンド ライン インターフェイス、または Visual Studio などのフル機能の開発環境を使用して記述できます。 モノリシック アプリケーションは通常、単一のエンドポイントにデプロイされます。 継続的インテグレーション (CI) および継続的デリバリー (CD) パイプラインの一部としてデプロイを簡単に自動化できます。 従来の CI/CD ツールに加えて、Microsoft Azure では Git リポジトリのサポートが統合されており、指定された Git ブランチまたはタグに対して行われた更新プログラムを自動的にデプロイできます。 Azure DevOps には、フル機能の CI/CD ビルドとデプロイ パイプラインが用意されており、GitHub Actions では、そこでホストされているプロジェクトに対して別のオプションが提供されます。
従来の ASP.NET と Web フォーム
ASP.NET Core に加えて、従来の ASP.NET 4.x は、Web アプリケーションを構築するための堅牢で信頼性の高いプラットフォームであり続けます。 ASP.NET では、MVC および Web API 開発モデルと、ページベースの豊富なアプリケーション開発に適し、豊富なサードパーティ コンポーネント エコシステムを備えた Web フォームがサポートされています。 Microsoft Azure には、ASP.NET 4.x アプリケーションに対する長年のサポートがあり、多くの開発者がこのプラットフォームに精通しています。
Blazor
Blazor は、ASP.NET Core 3.0 以降に含まれています。 Razor、C#、ASP.NET Core を使用して、豊富な対話型 Web クライアント アプリケーションを構築するための新しいメカニズムが提供されます。 最新の Web アプリケーションを開発する際に考慮すべき別のソリューションが用意されています。 考慮すべき Blazor には、サーバー側とクライアント側の 2 つのバージョンがあります。
サーバー側の Blazor は、ASP.NET Core 3.0 を使用して 2019 年にリリースされました。 その名前が示すように、サーバー上で実行され、クライアント ドキュメントへの変更がネットワーク経由でブラウザーにレンダリングされます。 サーバー側の Blazor は、クライアント側の JavaScript を必要とせず、クライアント ページの操作ごとに個別のページ読み込みを必要とせずに、豊富なクライアント エクスペリエンスを提供します。 読み込まれたページの変更は、サーバーから要求されて処理され、SignalR を使用してクライアントに返送されます。
2020 年にリリースされたクライアント側の Blazorにより、サーバーに変更をレンダリングする必要がなくなります。 代わりに、 WebAssembly を利用してクライアント内で .NET コードを実行します。 クライアントは、データを要求するために必要に応じてサーバーに対して API 呼び出しを行うことができますが、すべてのクライアント側の動作は、すべての主要なブラウザーで既にサポートされており、単なる JavaScript ライブラリである WebAssembly 経由でクライアントで実行されます。
参照 – 最新の Web アプリケーション
- ASP.NET Core の概要
https://learn.microsoft.com/aspnet/core/- ASP.NET Core でのテスト
https://learn.microsoft.com/aspnet/core/testing/- Blazor - 作業の開始
https://blazor.net/docs/get-started.html
.NET