asp.net core 概要(2017年3月時点)
TRANSCRIPT
ASP.NET Core 概要基礎をおさえて WebAPI を作ってみよう
publish version
2017 - 03 - 11
Visual Studio 2017 リリース記念勉強会
@BEACH_SIDE
横浜 篤よこはま あつし
http://beachside.hatenablog.com/
Using…
C#, ASP.NET, Azure, Machine Learning, Xamarin ….
I’m a C#er.
よろしく
お願いします
本セッションでお伝えしたいこと
• サーバーサイドの内容を中心に、抑えたいおきたい
ASP.NET Core のキーワード
• ASP.NET Coreのアプリケーションを作ってみたいと
いうモチベーション
1. ASP.NET Core とは
2. 知っておきたい基本機能
- サーバーサイド編
3. 知っておきたい基本機能
- クライアント編
Agenda
ASP.NET Core とは
“conversion over configuration” ! ALL THE THINGS !?
1.
概 要
• オープンソースでクロスプラットフォーム• ウェブアプリケーション、IoTアプリケーション、モバイルバックエンドなどアプリケー
ションを構築するためのフレームワーク
• Windows, Mac, Linux 上で動作
• ASP.NET を大幅に再設計• System.Web.dllから脱却し、細分化されたモジュールで構成
• .NET Core または全ての.NET Frameworkで実行可能
公式ドキュメント:Introduction to ASP.NET Core : https://docs.microsoft.com/en-us/aspnet/core/
改善された基本機能
• モダンな Client-Side Frameworkと開発ワークフローの統合https://docs.microsoft.com/en-us/aspnet/core/client-side/index
• 複数環境、クラウド環境と連携しやすい構成システムhttps://docs.microsoft.com/en-us/aspnet/core/fundamentals/configuration
• ビルトインの Dependency Injectionhttps://en-us/aspdocs.microsoft.com/net/core/fundamentals/dependency-injection
• IIS だけではなく、セルフホストしたサーバーでの実行https://docs.microsoft.com/en-us/aspnet/core/fundamentals/hosting
等々…
公式ドキュメント:Introduction to ASP.NET Core : https://docs.microsoft.com/en-us/aspnet/core/
“conversion over configuration” ! ALL THE THINGS !?
知っておきたい基本機能Server-Side 編
2.
注目のキーワード
• コンソールアプリケーションである• コンソールアプリケーションのエントリーポイントでウェブサーバーを生成して起動
• 注目のキーワードは、
- Host
- Server
- Startup
- Middleware
キーワード解説 >> Host(ホスト)
• Hostとは• IWebHostインターフェースが実装されたオブジェクト
• ASP.NET Coreアプリケーションでは、基本的にWebHostBuilderを使ってHostを構成し、起
動する必要がある
• 構成する値は、公式ドキュメントを参照
• ホストとサーバーの違い• ホストの主な責務は、アプリケーションの起動とライフサイクルの管理。具体的には、サー
ビスの管理、サーバーの構成など。
• サーバーの主な責務は、 HTTPリクエストの受けること
公式ドキュメント:Introduction to hosting in ASP.NET Core : https://docs.microsoft.com/en-us/aspnet/core/fundamentals/hosting
キーワード解説 >> Server(サーバー)
• ASP.NET Core では2つのサーバーが用意されている• Kestrel:クロスプラットフォームの非同期 I/O ライブラリ libuvで実装されたHTTPサーバー
• WebListener : Windowsのみで実行できる
• Kestrel + [IIS or Nginx or Apache or …] で利用が基本• Kestrel単体でも十分動作するので開発する際は問題なさそう
• 本番環境などでは IIS, Nginx, Apache 等をリバースプロキシサーバーとしての利用すること
を推奨。理由は起動プロセスの制御とかセキュリティ等(詳しくは公式ドキュメントに記載)。
公式ドキュメント:Web server implementations in ASP.NET Core : https://docs.microsoft.com/en-us/aspnet/core/fundamentals/servers/
画像: https://docs.microsoft.com/en-us/aspnet/core/fundamentals/servers/
キーワード解説 >> Startup クラス
• リクエストパイプラインの処理を構成するのが責務• Configureメソッドの定義が必須。アプリケーション起動時、エントリーポイントから呼ば
れ、コンストラクター⇒ ConfigureServicesメソッド⇒ Configureメソッドの順に動作
• ConfigureServicesメソッドの主な責務は…
• サービス(例:Entity Framework Core, ASP.NET Core MVC など)の Dependency Injection を定義する
• Configureメソッドの主な責務は…
• リクエストパイプラインにMiddleware(ミドルウェア)を定義する
公式ドキュメント:Application Startup in ASP.NET Core : https://docs.microsoft.com/en-us/aspnet/core/fundamentals/startup
キーワード解説 >> Middleware(ミドルウェア)
• HTTPリクエストを処理するためのコンポーネント• 主にStartupクラスの Configureメソッドで使われる(設定する)
• ビルトインのミドルウェアとして「Authentication」(認証機能)、「Routing」(ルーティ
ング機能を定義、制御)、「Session」(ユーザーのセッション管理)などがある
• ASP.NET のHTTPモジュールやHTTPハンドラーの多くもミドルウェアとなった
• カスタムに作成することももちろん可能
• プログラムでコールした順に設定される
公式ドキュメント:ASP.NET Core Middleware Fundamentals : https://docs.microsoft.com/en-us/aspnet/core/fundamentals/middleware
DEMO
コンソールアプリからASP.NET Coreへ
WebAPI について
• 基本的に MVC パターン
• リクエストの送受信の際の便利な機能• 基本的にはHTTPリクエストのデータと、ルーティングの規約、アクションメソッドの引数
の名称に応じてモデルバインディング
• HTTPリクエストヘッダーの Accept 属性に応じたレスポンス生成
• プロジェクトテンプレートが GOOD
• プロジェクトテンプレートを使ってプロジェクトを作ると動くアプリケーションができるの
で、構造の理解に役立つ。
• Web APIだけではなく、ビューを持ったWeb アプリケーションのテンプレートも同様
DEMO
Web API のプロジェクトテンプレートを見る
キーワード解説 >> Dependency Injection( DI 、依存性の注入、依存関係の挿入)
• ビルトインで組み込まれました• Startupクラスの ConfigureServicesメソッドで定義するのが基本
• DI とは?なぜ DI ?How to に関する日本語情報は…
• 「ASP.NET -依存関係の挿入によるASP.NET Coreでのクリーンなコードの作成」(2016-5)
https://msdn.microsoft.com/ja-jp/magazine/mt703433.aspx
• 「Essential .NET - .NET Core による依存関係の挿入」(2016-6)
https://msdn.microsoft.com/ja-jp/magazine/mt707534.aspx
• ちょっと古いけど…「ASP.NET5 MVC6 でDI(Dependency Injection)の設定」(2016-1)
http://beachside.hatenablog.com/entry/2016/01/15/170000
公式ドキュメント:Introduction to Dependency Injection in ASP.NET Core : https://docs.microsoft.com/en-us/aspnet/core/fundamentals/dependency-injection
キーワード解説 >> Routing(ラゥティング、ルーティング)
設定方法は主に2つ
• Controller クラスやそのActionメソッドで設定• RouteAttributeをつけて指定
• Startupクラスの Configureメソッドで設定• リクエストに応じたルーティングを直接指定
• リクエストに応じたルーティングを規約で指定
公式ドキュメント:Routing in ASP.NET Core :https://docs.microsoft.com/en-us/aspnet/core/fundamentals/routing
Routing to Controller Actions : https://docs.microsoft.com/en-us/aspnet/core/mvc/controllers/routing
キーワード解説 >> Configuration(コンフィグレーション、構成)
• 環境に応じた変数などの管理• 基本的には、IConfigurationRootインターフェースを実装したオブジェクトで管理
• Development、Staging、Production がデフォルトで定義されている
• デフォルトでいくつかのプロバイダーを用意• JSONやXMLのファイル、コマンドライン引数、環境変数、インメモリーのオブジェクト、
Azure Key Vault など。
• 環境に応じて[Startup{環境名}]クラスや [Configure{環境名}]メソッドを呼ぶことができる
公式ドキュメント:Configuration in ASP.NET Core : https://docs.microsoft.com/en-us/aspnet/core/fundamentals/configuration
DEMO
サービスクラスの実装とDIで少しだけ実践的なWeb API へ
conversion over configuration !
知っておきたい基本機能Server-Side 編
2.
機能強化や機能追加で以前より便利に
• Razor
• Viewの実装をより生産的に。HTML + C# で実装。
• Tag Helpers
• Web Components の概念も取り入れている
• カスタムのプロジェクトテンプレートが GOOD
• Razorベースのテンプレートだけでなく、Angular、React、Aurelia などのカスタムテンプ
レートがあり、モジュールローダーやタスクランナーの設定までされている
http://beachside.hatenablog.com/entry/2017/02/25/150306
DEMO
Angularのプロジェクトの作成
まとめ
本日のまとめ
• アプリケーション起動時の動作が重要• サービスの DI、HTTP リクエストに対するパイプラインの設定、環境に応じた構成設定など
起動に関する設定のほとんどが Startup クラスに集約されている
• 「convention over configuration(設定より規約)」の要素は強い
• Client-Side の開発もモダンに!• Razorを使った ASP.NET 固有の開発ではなく、Angular や React といった選択も容易に!
追加情報>> クラウド環境やクロスプラットフォームへのデプロイ
• Azure のWebAppsへのデプロイは簡単> 右クリックからポチっとするだけでデプロイできます。VSTS などを使ってCI / CD ももちろん可能。
• Azure Functionsへは…
> Model のレイヤーを分けておけば、移行も簡単。VSTS などを使ってCI / CD ももちろん可能。
• うちは AWS なんだけど….
> もちろん流行りのAPI Gateway x Lambdaですよね?平野さんのセッションにて!
• うちは Linux なんだけど….
> Docker も使っちゃいますよね?田中さんのセッションにて!
開発に役立つと個人的に思っている
参考資料
• ASP.NET Core Documentationhttps://docs.microsoft.com/ja-jp/aspnet/core/
• .NET Web Development and Tools Bloghttps://blogs.msdn.microsoft.com/webdev/
• ASP.NET Community Standuphttps://www.youtube.com/playlist?list=PL0M0zPgJ3HSftTAAHttA3JQU4vOjXFquF
• しばやん雑記http://blog.shibayan.jp/
• miso_soup3 Bloghttp://miso-soup3.hateblo.jp/