asp.net core 概要(2017年3月時点)

28
ASP.NET Core 概要 基礎をおさえて WebAPI を作ってみよう publish version 2017 - 03 - 11 Visual Studio 2017 リリース記念勉強会

Upload: beachside-yokohama-atsushi

Post on 22-Jan-2018

143 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: ASP.NET Core 概要(2017年3月時点)

ASP.NET Core 概要基礎をおさえて WebAPI を作ってみよう

publish version

2017 - 03 - 11

Visual Studio 2017 リリース記念勉強会

Page 2: ASP.NET Core 概要(2017年3月時点)

@BEACH_SIDE

横浜 篤よこはま あつし

http://beachside.hatenablog.com/

Using…

C#, ASP.NET, Azure, Machine Learning, Xamarin ….

I’m a C#er.

よろしく

お願いします

Page 3: ASP.NET Core 概要(2017年3月時点)

本セッションでお伝えしたいこと

• サーバーサイドの内容を中心に、抑えたいおきたい

ASP.NET Core のキーワード

• ASP.NET Coreのアプリケーションを作ってみたいと

いうモチベーション

Page 4: ASP.NET Core 概要(2017年3月時点)

1. ASP.NET Core とは

2. 知っておきたい基本機能

- サーバーサイド編

3. 知っておきたい基本機能

- クライアント編

Agenda

Page 5: ASP.NET Core 概要(2017年3月時点)

ASP.NET Core とは

“conversion over configuration” ! ALL THE THINGS !?

1.

Page 6: ASP.NET Core 概要(2017年3月時点)

概 要

• オープンソースでクロスプラットフォーム• ウェブアプリケーション、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/

Page 7: ASP.NET Core 概要(2017年3月時点)

改善された基本機能

• モダンな 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/

Page 8: ASP.NET Core 概要(2017年3月時点)

“conversion over configuration” ! ALL THE THINGS !?

知っておきたい基本機能Server-Side 編

2.

Page 9: ASP.NET Core 概要(2017年3月時点)

注目のキーワード

• コンソールアプリケーションである• コンソールアプリケーションのエントリーポイントでウェブサーバーを生成して起動

• 注目のキーワードは、

- Host

- Server

- Startup

- Middleware

Page 10: ASP.NET Core 概要(2017年3月時点)

キーワード解説 >> 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

Page 11: ASP.NET Core 概要(2017年3月時点)

キーワード解説 >> 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/

Page 12: ASP.NET Core 概要(2017年3月時点)

キーワード解説 >> 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

Page 13: ASP.NET Core 概要(2017年3月時点)

キーワード解説 >> 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

Page 14: ASP.NET Core 概要(2017年3月時点)

DEMO

コンソールアプリからASP.NET Coreへ

Page 15: ASP.NET Core 概要(2017年3月時点)

WebAPI について

• 基本的に MVC パターン

• リクエストの送受信の際の便利な機能• 基本的にはHTTPリクエストのデータと、ルーティングの規約、アクションメソッドの引数

の名称に応じてモデルバインディング

• HTTPリクエストヘッダーの Accept 属性に応じたレスポンス生成

• プロジェクトテンプレートが GOOD

• プロジェクトテンプレートを使ってプロジェクトを作ると動くアプリケーションができるの

で、構造の理解に役立つ。

• Web APIだけではなく、ビューを持ったWeb アプリケーションのテンプレートも同様

Page 16: ASP.NET Core 概要(2017年3月時点)

DEMO

Web API のプロジェクトテンプレートを見る

Page 17: ASP.NET Core 概要(2017年3月時点)

キーワード解説 >> 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

Page 18: ASP.NET Core 概要(2017年3月時点)

キーワード解説 >> 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

Page 19: ASP.NET Core 概要(2017年3月時点)

キーワード解説 >> 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

Page 20: ASP.NET Core 概要(2017年3月時点)

DEMO

サービスクラスの実装とDIで少しだけ実践的なWeb API へ

Page 21: ASP.NET Core 概要(2017年3月時点)

conversion over configuration !

知っておきたい基本機能Server-Side 編

2.

Page 22: ASP.NET Core 概要(2017年3月時点)

機能強化や機能追加で以前より便利に

• Razor

• Viewの実装をより生産的に。HTML + C# で実装。

• Tag Helpers

• Web Components の概念も取り入れている

• カスタムのプロジェクトテンプレートが GOOD

• Razorベースのテンプレートだけでなく、Angular、React、Aurelia などのカスタムテンプ

レートがあり、モジュールローダーやタスクランナーの設定までされている

http://beachside.hatenablog.com/entry/2017/02/25/150306

Page 23: ASP.NET Core 概要(2017年3月時点)

DEMO

Angularのプロジェクトの作成

Page 24: ASP.NET Core 概要(2017年3月時点)

まとめ

Page 25: ASP.NET Core 概要(2017年3月時点)

本日のまとめ

• アプリケーション起動時の動作が重要• サービスの DI、HTTP リクエストに対するパイプラインの設定、環境に応じた構成設定など

起動に関する設定のほとんどが Startup クラスに集約されている

• 「convention over configuration(設定より規約)」の要素は強い

• Client-Side の開発もモダンに!• Razorを使った ASP.NET 固有の開発ではなく、Angular や React といった選択も容易に!

Page 26: ASP.NET Core 概要(2017年3月時点)

追加情報>> クラウド環境やクロスプラットフォームへのデプロイ

• Azure のWebAppsへのデプロイは簡単> 右クリックからポチっとするだけでデプロイできます。VSTS などを使ってCI / CD ももちろん可能。

• Azure Functionsへは…

> Model のレイヤーを分けておけば、移行も簡単。VSTS などを使ってCI / CD ももちろん可能。

• うちは AWS なんだけど….

> もちろん流行りのAPI Gateway x Lambdaですよね?平野さんのセッションにて!

• うちは Linux なんだけど….

> Docker も使っちゃいますよね?田中さんのセッションにて!

Page 27: ASP.NET Core 概要(2017年3月時点)

開発に役立つと個人的に思っている

参考資料

• 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/

Page 28: ASP.NET Core 概要(2017年3月時点)

Thank you.

2017-03-11 Visual Studio 2017 リリース記念勉強会