ASP.NET Core fundamentals overview - 日本語意訳

- 2017/03/14(Tue) 時点の情報に基づいています
- 公式ドキュメント：[ASP.NET Core fundamentals overview](https://docs.microsoft.com/ja-jp/aspnet/core/fundamentals/)

# ASP.NET Core 基礎編 概要
ASP.NET アプリケーションは単なるコンソールアプリケーションで、その Main メソッドの中で Web サーバーを生成します。

``` csharp
using System;
using Microsoft.AspNetCore.Hosting;

namespace aspnetcoreapp
{
    public class Program
    {
        public static void Main(string[] args)
        {
            var host = new WebHostBuilder()
                .UseKestrel()
                .UseStartup<Startup>()
                .Build();
            host.Run();
        }
    }
}
```

`Main` メソッドでは、 builder パターンに従う `WebHostBuilder` クラスを使って Web アプリケーションホストを生成します。builder は Web サーバーや StartUp クラス(例えば、`UseKestrel` や `UseStartUp`)を定義するためのメソッドを持っています。上記のサンプルでは [Kestrel](servers/kestrel.md) Web サーバーを使用していますが、他のサーバーを指定することもできます。
次のセクションで `UseStartUp` についてさらに詳しく説明します。`WebHostBuilder` クラスは、IIS および IIS Express でのホスティングのための `UseIISIntegration` メソッド、ルートコンテンツディレクトリを指定するための `UseContentRoot` メソッドなど、様々なオプションメソッドを提供します。`Build` メソッドはアプリケーションをホストする `IWebHost` オブジェクトを生成します。`IWebHost` オブジェクトの `Run` メソッドで HTTP リクエストのリスニングを開始します。


## Startup

`WebHostBuilder` クラスの `UseStartup` メソッドは、アプリケーションの `Startup` クラスを指定します。

```csharp
public class Startup
{
    public void ConfigureServices(IServiceCollection services)
    {
    }

    public void Configure(IApplicationBuilder app)
    {
    }
}
```
`Startup` クラスは、リクエスト処理パイプラインを定義したり、アプリケーションで必要なサービスを構成するための場所です。`Startup` クラスは public かつ以下のメソッドを含まなければなりません：

```csharp
public class Startup
{
    public void ConfigureServices(IServiceCollection services)
    {
    }

    public void Configure(IApplicationBuilder app)
    {
    }
}
```

* `ConfigureServices` メソッドは、アプリケーション(ASP.NET MVC Core framework、Entity Framework Core、Identity、など)で使用されるサービス([Services](#services) を参照)を定義します。
* `Configure` メソッドは、リクエストパイプラインにおける [middleware](middleware.md) を定義します。

詳細については、[アプリケーションの起動](startup.md)を参照してください。


## Services

Service はアプリケーションで共通的に使用されることを意図したコンポーネントです。Service は Dependency Injection (DI) によって使用可能になります。ASP.NET Core はシンプルなビルトイン Inversion of Control (IoC) コンテナを含んでいます。IoC コンテナはデフォルトでコンストラクタインジェクションをサポートします。このビルトインコンテナは他のコンテナに簡単に置き換え可能です。DI により、疎結合のメリットに加えて、アプリ全体で Service を利用できるようになります。例えば、[logging](logging.md) サービスはアプリ全体で使用できます。

詳細については、[Dependency Injection](dependency-injection.md) を参照してください。


## Middleware

ASP.NET Core では、[Middleware](middleware.md) を使用してリクエストパイプラインを構成します。ASP.NET Core の Middleware は `HttpContext` 上で非同期ロジックを実行し、シーケンス内の次の Middorware を呼び出すか、リクエストを直接終了します。一般に、NuGet パッケージに依存し、`Configure` メソッド内で `IApplicationBuilder` で `UseXYZ` 拡張メソッドを呼び出すことによって Middleware を "使用" します。

ASP.NET Core には豊富なビルトイン Middleware が付属しています：

* [Static files](static-files.md)

* [Routing](routing.md)

* [Authentication](../security/authentication/index.md)

ASP.NET Core で任意の [OWIN](http://owin.org) ベースの Middleware を使用でき、また、独自のカスタム Middleware を作成することができます。

詳細については、[Middleware](middleware.md) と [Open Web Interface for .NET (OWIN)](owin.md) を参照してください。


## サーバー

ASP.NET Core のホスティングモデルはリクエストを直接リッスンしません。むしろ、HTTPサーバーの実装を頼りに、リクエストをアプリケーションに転送します。転送されたリクエストは、`HttpContext` に構成された機能インターフェースのセットとしてラップされます。 ASP.NET Coreには [Kestrel](servers/kestrel.md) と呼ばれるマネージドクロスプラットフォーム Web サーバーが含まれています。これは通常 [IIS](https://iis.net)や[nginx](http://nginx.org)のようなプロダクション Web サーバーの背後で実行されます。

詳細については、[Servers](servers/index.md) と [Hosting](hosting.md) を参照してください。


## Content root

Content root は view や Web content など、アプリケーションで使用されるあらゆるコンテンツへの基本パスです。デフォルトでは、Content root は、アプリケーションをホストする実行可能ファイルへのアプリケーション基本パスと同じです。 * WebHostBuilder* で別の場所を指定することができます。


## Web root

アプリケーションの Web root とは、プロジェクト内の、css、js、image ファイルなどのパブリックな静的リソースを格納するためのディレクトリを指します。
Static files Middleware は、デフォルトでは、Web root ディレクトリ(およびサブディレクトリ)からのファイルのみを提供します。Web root パスのデフォルトは *\<content root>/wwwroot*ですが、*WebHostBuilder* を使用して別の場所を指定することもできます。


## 構成

ASP.NET Core は、単純な名前と値のペアを処理するための新しい構成モデルを使用します。新しい構成モデルは `System.Configuration` や *web.config* に基づいていません。むしろ、順序付けられた構成プロバイダーのセットから引き出します。ビルドインの構成プロバイダーは、さまざまなファイル形式(XML、JSON、INI)と環境変数をサポートし、環境ベースの構成を可能にします。独自のカスタム構成プロバイダーを作成することもできます。

詳細については、[Configuration](configuration.md) を参照してください。


## 環境

"Development" や "Production" のような環境は、ASP.NET Core のファーストクラスの概念であり、環境変数を使用して設定できます。

詳細については、[Working with Multiple Environments](environments.md) を参照してください。


## .NET Core vs. .NET Framework runtime

ASP.NET Core アプリケーションは .NET Core または .NET Framework 実行環境を使用できます。

詳細については、[Choosing between .NET Core and .NET Framework](https://docs.microsoft.com/dotnet/articles/standard/choosing-core-framework-server) を参照してください。


## 追加情報

以下のトピックも参照してください：

- [Logging](logging.md)
- [Error Handling](error-handling.md)
- [Globalization and localization](localization.md)
- [File Providers](file-providers.md)
- [Managing Application State](app-state.md)