最新の Web アプリケーションの特徴

ヒント

このコンテンツは eBook の「ASP.NET Core および Azure での最新の Web アプリケーションの設計」からの抜粋です。.NET Docs で閲覧できるほか、PDF として無料ダウンロードすると、オンラインで閲覧できます。

Architect Modern Web Applications with ASP.NET Core and Azure eBook cover thumbnail.

"… 設計が適切であれば、低コストで機能を提供できます。 このアプローチは困難ですが、成功は継続します」
- Dennis Ritchie

最新の Web アプリケーションに対するユーザーの期待と要求は、これまでよりも高くなります。 現代の Web アプリケーションは、世界中どこからでも 24 時間 365 日いつでも利用でき、ほぼあらゆるデバイスや画面サイズから使用できることが期待されます。 Web アプリケーションは、需要の急増に対応するために、セキュリティで保護され、柔軟性が高く、スケーラブルである必要があります。 ますます複雑になっているシナリオに対して、JavaScript を使用し、Web API を介して効率的に通信する高度なユーザー エクスペリエンスをクライアント上に構築して対処する必要があります。

ASP.NET Core は、最新の Web アプリケーションとクラウドベースのホスティング シナリオに合わせて最適化されています。 モジュール式の設計なので、アプリケーションは実際に使用する機能のみに依存することができます。さらに、アプリケーションのセキュリティとパフォーマンスが向上し、ホスティングのリソース要件は軽減されます。

参照アプリケーション: eShopOnWeb

このガイダンスには、いくつかの原則と推奨事項を示す参照アプリケーション eShopOnWeb が含まれています。 このアプリケーションは単純なオンライン ストアです。シャツ、コーヒー マグなどの商品のカタログを閲覧することができます。 この参照アプリケーションは、わかりやすくするために意図的に単純にしています。

eShopOnWeb

図 2-1 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 も含まれています。 機能テストでは、このメモリ内サーバーへの要求を実行し、(ミドルウェア、ルーティング、モデルのバインド、フィルターなどの) アプリケーション スタック全体を実行し、応答を受信することができます。また、ごく短時間で実サーバー上でアプリケーションをホストし、ネットワーク層を介して要求を実行することができます。 API のこのようなテストは作成が簡単で価値があり、最新の Web アプリケーションではますます重要になっています。

サポートされている従来の動作と SPA の動作

従来の Web アプリケーションでは、クライアント側の動作はほとんどありませんでしたが、代わりに、アプリケーションに必要な可能性があるすべてのナビゲーション、クエリ、および更新にはサーバーに依存していました。 ユーザーが実行した個々の新しい操作は新しい Web 要求に変換されるので、結果としてエンド ユーザーのブラウザーでページ全体の再読み込みが実行されます。 一般的に、従来のモデル ビュー コントローラー (MVC) フレームワークはこのアプローチに従い、個々の新しい要求は異なるコントローラー アクションに対応しているので、結果的にモデルと連携し、ビューを返します。 AJAX (Asynchronous JavaScript and XML) 機能を使用すると、特定のページ上の個々の操作が強化される場合がありますが、アプリケーションの全体的なアーキテクチャではさまざまな MVC ビューと URL エンドポイントが使用されていました。 また、ASP.NET Core MVC は、MVC スタイルのページを簡単に整理する方法である Razor Pages に対応しています。

これに対し、シングル ページ アプリケーション (SPA) の場合は、動的に生成されるサーバー側のページ読み込み (存在する場合) はほとんどありません。 多くの SPA は、アプリケーションを起動して実行するために必要な JavaScript ライブラリを読み込む静的 HTML ファイル内で初期化されます。 このようなアプリケーションはデータのニーズに合わせて Web API を多用し、より高度なユーザー エクスペリエンスを提供できます。 BlazorWebAssembly は、.NET コードを使用して SPA を構築する手段を備えています。このコードは、その後、クライアントのブラウザーで実行されます。

多くの Web アプリケーションでは、従来の Web アプリケーションの動作 (通常はコンテンツ用) と SPA (対話機能用) を組み合わせています。 ASP.NET Core は、同じアプリケーション内で同じツール セットと基礎のフレームワーク ライブラリを使用して MVC (ビューまたはページ ベース) と Web API の両方をサポートしています。

単純な開発と展開

ASP.NET Core アプリケーションは、単純なテキスト エディターやコマンドライン インターフェイス、または Visual Studio などのフル機能の開発環境を使用して作成できます。 モノリシック アプリケーションは、通常、単一のエンドポイントに展開されます。 継続的インテグレーション (CI) および継続的デリバリー (CD) パイプラインの一部として展開を簡単に自動化できます。 Microsoft Azure では、従来の CI/CD ツールに加えて 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 Forms がサポートされており、高度なページ ベースのアプリケーション開発に適しています。また、豊富なサード パーティのコンポーネント エコシステムを備えています。 Microsoft Azure は ASP.NET 4.x アプリケーションを長年にわたってサポートしているので、多くの開発者はこのプラットフォームに精通しています。

Blazor

ASP.NET Core 3.0 以降には Blazor が含まれています。 それによって、Razor、C#、および ASP.NET Core を使用して、機能豊富な対話型 Web クライアント アプリケーションをビルドするための新しいメカニズムが提供されます。 それは、最新の Web アプリケーションを開発するときに考慮する別のソリューションです。 検討する Blazor のバージョンには、サーバー側とクライアント側の 2 つがあります。

サーバー側の Blazor は、2019 年に ASP.NET Core 3.0 と共にリリースされました。 名前が示すように、それはサーバー上で実行され、クライアント ドキュメントへの変更をネットワーク経由でブラウザーにレンダリングします。 サーバー側の Blazor では、クライアント側の JavaScript を必要とせず、クライアント ページの操作ごとに個別のページ読み込みを必要としない、豊富なクライアント エクスペリエンスが提供されます。 読み込まれたページの変更は、サーバーによって要求および処理された後、SignalR を使用してクライアントに返されます。

2020 年にリリースされたクライアント側の Blazor では、サーバー上で変更をレンダリングする必要がなくなります。 代わりに、クライアント内で WebAssembly が活用され、.NET コードが実行されます。 クライアントでは、必要に応じてサーバーに API 呼び出しを行ってデータを要求できますが、すべてのクライアント側の動作は WebAssembly を経由してクライアント内で実行されます。これはすべての主要ブラウザーで既にサポートされている JavaScript ライブラリです。

参照 – 最新の Web アプリケーション