試験 70-486 Developing ASP.NET MVC Web Applications について

# 概要

試験時間・・・150分(+冒頭オリエンテーション30分)
問題数・・・・40-60問
合格点・・・・700点以上

・日本語公式ページ
https://www.microsoft.com/ja-jp/learning/exam-70-486.aspx

・試験のポリシーと FAQ
https://www.microsoft.com/ja-jp/learning/certification-exam-policies.aspx

試験範囲は以下の通り。

# 範囲

1. アプリケーション アーキテクチャの設計 (15-20%)
2. 配置アーキテクチャの構築と設計 (10-15%)
3. ユーザー エクスペリエンスの設計 (15-20%)
4. ユーザー エクスペリエンスの開発 (15-20%)
5. Web アプリケーションのトラブルシューティングとデバッグ (20-25%)
6. セキュリティの設計と実装 (15-20%)

出題割合に傾斜がある。
特に、『Web アプリケーションのトラブルシューティングとデバッグ』が占める割合が大きい。
以下、個々の範囲を確認していく。

# アプリケーション アーキテクチャの設計 (15-20%)

1. アプリケーション層を計画する
    - データアクセスを計画する。
    - モデル、ビュー、コントローラー、コンポーネント、およびサービス依存性注入の適切な使用をする。
    - クライアント側とサーバー側の処理の間で選択する。
    - スケーラビリティのための設計をする。
    - ASP.NETコアとASP.NETの間で選択する。
    - .NET標準ライブラリを使用するタイミングを選択する。

2. 分散アプリケーションを設計する
    - ハイブリッドアプリケーションを設計する。
    - 分散環境におけるセッション管理を計画する。
    - ウェブファームを計画する。
    - Azure PackでオンプレミスのMicrosoft Azureサービスを実行する。
    - スケジュールされたジョブやオンデマンドジョブ、Azure関数、Azure WebジョブなどのAzure機能による遅延処理を可能にする

3. Azure Web Appsのライフサイクルを設計し実装する
    - 開始イベント、実行イベント、停止イベントを識別し実装する。
    - アプリケーションにあるアプリケーションイベントに対するコード。
    - IIS、アプリケーションプール構成、サードパーティのツールなどのスタートアップタスクを構成する

4. 状態管理を構成する
    - インプロセス、アウトオブプロセス、Redisスベースの状態管理含まれて状態管理メカニズムを選択する。
    - スケーラビリティの計画する。
    - 状態を維持するためにクッキーまたはローカルストレージを使用する。
    - web.configファイルに構成設定を適用する。
    - クエリ文字列を含むセッションレス状態を実装する。
    - ASP.NETコアでセッションとアプリケーションの状態を有効にするようにミドルウェアを構成する

5. キャッシュ方法を設計する
    - ページ出力キャッシングとデータキャッシングを実装する。
    - キャッシュプロファイルを作成する。
    - HTTPキャッシングを実装する。
    - Azure Redisのキャッシュを実装する。
    - Azure CDNのようなコンテンツ配信ネットワーク（CDN）戦略を計画する。

6. Webソケット戦略を設計し実装する
    - 文字列とバイナリデータを非同期で読み書きする。
    - 接続損失戦略を選択する。
    - Webソケットを使用するタイミングを決定する。
    - SignalRを実装する。
    - Azure Web AppインスタンスでWebソケット機能を有効にする

7. 構成管理ソリューションを設計する
    - XML、JSON、およびINIファイルを含む構成ソースを管理する。
    - 環境変数を管理する。
    - オプションオブジェクトを実装する。
    - ファイルと階層構造を使用して複数の環境を実装する。
    - 機密設定を管理する。
    - 実行時構成の変更に対応する。
    - カスタム構成ソースを実装する。
    - Azure Key Vaultを使用して設定を保護する。
    - 開発時にシークレットマネージャーツールを使用して、設定値のためにシークレットをコードから守る

8. ホスト環境との相互作用
    - ファイルプロバイダを使用してファイルシステムを操作する。
    - 環境変数で作業する。
    - ホスティング環境の能力を決定する。
    - LinuxやWindowsを含むホスト用のPInvokeやネイティブ依存性を含むネイティブコンポーネントを実装する。
    - NET（OWIN）ベースのサーバー用のOpen Web Interface向けのASP.NETホスティングを使用する

9. フレームワークパイプラインを使用してアプリケーションを作成する
    - カスタムリクエスト処理モジュールをパイプラインに追加する。
    - アプリケーションで使用されるサービスの追加、削除、および構成をする。
    - ミドルウェアの設計と実装をする。kestrel、Http.sys WebサーバーとIISを設計する。
    - スタートアップフィルタを設計し実装する

準備用リソース
[Entity Framework Development workflows](http://msdn.microsoft.com/en-US/data/jj590134)
[DataAdapters and DataReaders](https://docs.microsoft.com/ja-jp/dotnet/framework/data/adonet/dataadapters-and-datareaders)
[ASP.NET State Management overview](https://docs.microsoft.com/ja-jp/previous-versions/aspnet/75x4ha6s(v=vs.100))

# 配置アーキテクチャの構築と設計 (10-15%)

1. ブラウザの成果物構築戦略を設計する
    - Gulp、Grunt、npm、Bowerを使用してJavaScriptビルドパイプラインを設計する。
    - Less、Sass、Font Awesomeを使用してアーチファクトビルド戦略を設計する。
    - JavaScript、CSS、画像などのbroswer成果物のバンドルおよび縮小戦略を設計し実装する。

2. サーバー構築戦略の設計
    - NuGetの依存関係を管理する。
    - 完全な.NET Framework、.NETコア、および.NET標準を含むターゲットランタイム。
    - コンパイルと最適化のオプションを含むデバッグとリリースの設定を管理する。
    - ビルドからファイルをインクルードまたは除外する。
    - リソース、共有ファイルなどのビルドソースを管理する。
    - バージョン、リリースノート、および説明を含むプロジェクトのメタデータを実装する。
    - xmlDocとwarningsAsErrorsを含む他のビルドオプションを定義する。
    - ASP.NETコアで静的ファイルを処理する
3. 出版戦略を設計する
    - dotnet.exeを使用してアプリケーション公開を実装する。
    - csprojの公開オプションを管理する。
    - 追加の工具を実装する。
    - 公開前および公開後のスクリプトを実装する。
    - ネイティブコンパイルを実装する。
    - Dockerコンテナイメージに公開する
4. Azureの展開戦略を実装する
    - FTP、Kudu、Web Deploy、Visual Studio Publishing Wizardなどのサポートされている展開モデルを使用してAzure Web Appを展開する。
    - アプリケーションのデプロイ時にARMベースのリソースをプロビジョニングする。
    - Azureにdev、test、prodなどのデプロイメント環境を実装する。
    - ステージングサイトにデプロイメントスロットを使用する。
    - Azureスタックにデプロイする
5. オンプレミス展開戦略を実装する
    - Web Deploy、xcopy、およびVisual Studio Publishing Wizardを使用してIISにアプリケーションを展開する。
    - アプリケーションをWindows Nano Serverに展開し、IIS Hosted Web Coreにアプリケーションを展開し、HTTP.sys Webサーバーにアプリケーションを展開する。
    - WindowsおよびLinux上でKestrelにアプリケーションを展開する。
    - IISとNginxを使用してKestrelにリバースプロキシを実装する

準備用リソース

[Build a better mobile browsing experience](https://msdn.microsoft.com/ja-jp/magazine/hh288079.aspx)
[Display modes](https://docs.microsoft.com/ja-jp/aspnet/whitepapers/mvc4-release-notes#_Toc303253810)
Building Modern Web Apps Jump Start(リンク切れ？)

# ユーザー エクスペリエンスの設計 (15-20%)

1. Webアプリケーションのユーザーインターフェイスの要素を作成する
    - CSSを使用してスタイルを作成し適用する。
    - HTMLを使用してユーザーインターフェイスをレイアウトする。
    - 設計に基づいて動的ページコンテンツを実装する

2. UI の動作を設計して実装する
    - クライアント側の検証を実装する。
    - JavaScriptを使用してDOMを操作する。
    - プロトタイプの継承を使用してオブジェクトを拡張する。
    - AJAXを使用してページの一部を更新する

3. アプリケーションの UI レイアウトを設計する
    - アプリケーションのさまざまな領域で再利用するための部分的なビューおよびビューコンポーネントを実装する。
    - Razor Pagesを使用してページを設計し実装する。
    - 視覚的な構造を提供するレイアウトを設計し実装する。
    - オプションおよび必須のページセクションを定義およびレンダリングする。
    - マークアップを簡単にするためにタグとHTMLヘルパーを作成して使用する

4. 応答UI レイアウトを計画する
    - 複数のデバイスと画面解像度で動作するアプリケーションを計画する。
    - メディアクエリとブートストラップの応答グリッドを使用する。
    - ブラウザの機能と能力を検出する。
    - 複数のブラウザとモバイルデバイスで動作するWebアプリケーションを作成する。
    - ポリフィルとのブラウザ間の一貫したエクスペリエンスを実現
5. モバイルUI戦略を計画する
    - タッチ入力、低帯域幅状況、デバイスの向き変更などのモバイル固有のUI要素を実装する。
    - モバイルブラウザを使用するための戦略を定義し実装する

準備用リソース

[Build a better mobile browsing experience](https://msdn.microsoft.com/ja-jp/magazine/hh288079.aspx)
[Display modes](https://docs.microsoft.com/ja-jp/aspnet/whitepapers/mvc4-release-notes#_Toc303253810)
Building Modern Web Apps Jump Start(リンク切れ？)

# ユーザー エクスペリエンスの開発 (15-20%)

1. 検索エンジンの最適化とアクセシビリティを計画する
    - 分析ツールを使用してHTMLを解析する。
    - スクラップを改善するためのxmlサイトマップとrobots.txtファイルを提供する。
    - スクリーンリーダーのようなアクセシビリティのためのセマンティックマークアップを書く。
    - リッチスニペットを使用してコンテンツの可視性を高める

2. グローバリゼーションとローカライズを計画および実装する
    - ローカリゼーション戦略を計画する。
    - JavaScriptリソースを含むUIにリソースを作成して適用する。
    - カルチャーを設定する。
    - サーバー側のローカリゼーションとグローバリゼーションを実装する

3. MVC コントローラーとアクションを設計して実装する
    - 承認属性と、グローバル、認証、オーバーライド可能なフィルタを含むフィルタを適用する。
    - カスタムHTTPステータスコードとレスポンスを選択して実装する。
    - アクション結果を実装する。
    - MVC領域を実装する。
    - コントローラ内のサービスに対する依存性注入を実装する

4. ルートを設計して実装する
    - URLパターンを処理するルートを定義する。
    - 経路制約を適用する。
    - URLパターンを無視する。
    - カスタムルートパラメータを追加する。
    - 領域を定義する。
    - Angularなどの単一ページアプリケーションフレームワークと相互運用するルートを定義する

5. MVC 機能拡張ポイントを使用してアプリケーションの動作を制御する
    - カスタムミドルウェアを作成し、パイプラインに注入する。
    - MVCフィルタとコントローラファクトリを実装する。
    - アクション結果、モデルバインダ、およびルートハンドラを使用してアプリケーションの動作を制御する。
    - サービスをビューに挿入する

6. シリアル化とモデルバインディングを設計し実装する
    - JSON、XML、protobuf、WCF / SOAPなどのサポートされているシリアル化形式を使用して、モデルとデータを直列化する。
    - カスタムバインディングとモデル検証を含むモデルとプロパティのバインディングを実装する。
    - MVCでWebソケット通信を実装する。
    - ファイルアップロードとマルチパートデータを実装する。
    - AutoRestを使ってクライアントを構築する

準備用リソース
[Search Engine Optimization Toolkit](https://www.iis.net/downloads/microsoft/search-engine-optimization-toolkit)
[GlobalizationSection Class](https://docs.microsoft.com/ja-jp/dotnet/api/system.web.configuration.globalizationsection?redirectedfrom=MSDN&view=netframework-4.7.2)
[FormCollection Class](https://docs.microsoft.com/ja-jp/dotnet/api/system.web.mvc.formcollection?view=aspnet-mvc-5.2)

# Web アプリケーションのトラブルシューティングとデバッグ (20-25%)

1. 実行時の問題の防止とトラブルシューティングを行う
    - パフォーマンス、セキュリティ、およびエラーのトラブルシューティング。
    - IntelliTraceを含むトレース、ロギング、およびデバッグを実装する。
    - パフォーマンスモニタを含むヘルスモニタリングを有効にして構成する。
    - App Insightランタイムテレメトリを設定し使用する

2. 例外処理戦略を設計する
    - 複数のレイヤーで例外を処理する。
    - MVCミドルウェアを使用してエラー処理を設定する。
    - 異なる環境に対して異なる例外処理戦略を使用する。
    - カスタムエラーページを作成して表示する。
    - エラー処理のためにカスタムパイプラインを構成する。
    - 最初のチャンスの例外を処理する。
    - App Insightsを設定して使用する。
    - ログアプリケーションの例外

3. Web アプリケーションをテストする
    - Assertクラスを使用し、モックとスタブを使用して、ユニットテストを作成と実行する。
    - ブラウザリンクの使用を含むウェブテストの作成と実行 複数のブラウザとモバイルエミュレータでWebアプリケーションをデバッグする。
    - Azure DevTest Labsを使用してください。
    - Visual Studio Team Servicesを使用する

4. Azure アプリケーションをデバッグする
    - Azure App Insightsを使用して診断情報を収集する。
    - イベントログ、パフォーマンスカウンタ、クラッシュダンプなどのようなログタイプを選択する。
    - 配備されたサイトからVisual Studioに直接ストリームログを送信する。
    - Visual Studioとリモートデバッグを使用してAzureアプリケーションをデバッグする。
    - サーバーエクスプローラを使用してリモートのAzure Webサイトと直接対話する

準備用リソース
[Using shims to isolate your application from other assemblies for unit testing](https://docs.microsoft.com/ja-jp/previous-versions/visualstudio/visual-studio-2013/hh549176(v=vs.120))

# セキュリティの設計と実装 (15-20%)

1. 認証を構成する
    - ユーザーを認証する。
    - 認証設定を強制する。
    - ASP.NETコアIDを実装する。
    - Facebook、Google、その他の外部プロバイダを有効にする。
    - アカウント確認、パスワード回復、マルチファクタ認証を実装する。
    - Azure Active Directory、Azure Active Directory B2C、Azure Active Directory B2B、およびMicrosoft Identityは、Cookieを使用してユーザーセッションを管理する。
    - Microsoft認証ライブラリ（MSAL）を使用してアクセストークンを取得する

2. 承認を構成して適用する
    - ロールを作成する。
    - ロールをプログラムで承認する。
    - ミドルウェアを使用してカスタムのUserStoresを設定して作業する。
    - 承認に参加するようにコントローラとアクションを設定する

3. クレームベースの認証の設計と実装
    - OpenID、OAuth、JWT、SAML、ベアラトークンなどのトークンを使用して認証と承認を実行する。

4. データ整合性を管理する
    - アプリケーションデータに暗号化を適用する。
    - アプリケーションの構成セクションに暗号化を適用する。
    - 改ざんを防止するために、アプリケーションデータに署名する。
    - Azure Key Vaultを使用してデータを保護する。
    - 輸送中や安静時のデータ保護APIを使用して、データ保護のための暗号化を実装する

5. 安全なサイトを実装する
    - SSL証明書を適用することにより、通信を保護する。
    - すべてのリクエストのためにSSLを要求する。
    - 開発環境でホスティングSSLを有効にする。
    - Azureのロードバランサを使用してSSLを実装する。
    - ストレージ用のソルトおよびハッシュパスワード。
    - クロスサイトスクリプティング攻撃（ANTI-XSSライブラリ）を防ぐために、HTMLエンコードを使用する。
    - 繰延べ検証を実施し、未検証の要求を処理、例えば、フォーム、クエリ文字列、およびURL。
    - クエリをパラメータ化することで、SQLインジェクション攻撃を防ぐ。
    - クロスサイトリクエストフォージェリ（XSRF）を防ぐ。
    - Azureのリソースを監視するために、Azureのセキュリティセンターを使用する。
    - クロスオリジンリソース共有（CORS）を実装する。
    - オープンリダイレクト攻撃に対する保護を実装する

準備用リソース
[Introduction to ASP.NET Identity](https://docs.microsoft.com/ja-jp/aspnet/identity/overview/getting-started/introduction-to-aspnet-identity)
[Chapter 5: Authentication, authorization, and identities in WCF](https://docs.microsoft.com/ja-jp/previous-versions/msp-n-p/ff647503(v=pandp.10))
[Easy Web App Integration with Windows Azure Active Directory, ASP.NET & Visual Studio](https://techcommunity.microsoft.com/t5/Enterprise-Mobility-Security/bg-p/enterprisemobilityandsecurity)

# 感想

- さすがに実務３～５年を対象とした試験ということで、内容が高度な印象

以上