ASP.NET Coreで作成したアプリのIISへの発行方法

この記事はASP.NET Advent Calendar 2016の23日目の記事です。

今年のAdvent Calendarの金曜担当していましたがとうとう今回がラストになりました。

<a href="http://qiita.com/taiga_takahari/items/7809c78393750c42e443">私がこのAdvent Calendarに書いた前回の記事</a>ではASP.NET CoreのアプリケーションをIIS上で動かすためのIISの設定について書きましたが、今回は実際にASP.NET CoreのアプリケーションをIISに発行するところまで書いていきます。

前回構築した環境があれば、今回の内容をすぐ試せるようになっているはずです。

## ASP.NET Coreアプリケーションの作成

今回はVisual Studioからではなく、dotnet CLIからASP.NET Coreのアプリケーションを作成してみます。

アプリケーションを作成するパスに移動して管理者権限で以下のコマンドを実行します。

```
dotnet new --lang C# --type web
```

上記のコマンドを実行すると指定したディレクトリに以下のファイル群が作成されているのが確認できると思います。

![image](https://qiita-image-store.s3.amazonaws.com/0/39403/fd48a564-98cd-1464-628f-f6100d895300.png)

C#のWebアプリケーションが作成されています。

今回実行した```dotnet new```のコマンドですが、C#以外の言語(現状F#のみ)や作成するアプリケーションの種類を変えることも出来ます。

詳細は以下のリンク先にあるので、気になった方は見てみて下さい。

* <a href="https://docs.microsoft.com/ja-jp/dotnet/articles/core/tools/dotnet-new">dotnet-new</a>

## パッケージのリストア

作成したアプリケーションを試しに動かす前に、パッケージの復元を行う必要があります。

.NET Coreベースのアプリケーションでは全てのライブラリがパッケージを通じて参照されており、実行前に一回パッケージをダウンロードして依存関係の解決をする必要があります。

作成したアプリケーションのディレクトリで以下のコマンドを実行します。

```
dotnet restore
```

上記のコマンドを実行するとproject.lock.jsonというファイルが作成されているのが確認できます。

これまでの.NETのアプリケーションはcsprojファイルとpackages.config(と場合によっては.nuspecファイル)にプロジェクト情報と参照設定、パッケージ依存がバラバラに書かれていましたが、.NET Coreのアプリケーションではproject.jsonというファイルに統合されていて、先ほどのコマンドを実行することで参照しているパッケージの依存関係を解決して、その依存関係をproject.lock.jsonに出力しています。

Visual Studioでproject.jsonベースのアプリケーションを開発しているとたまに参照関係がうまく解決されないことがあるので、そういった時は上記のコマンドを実行すると解決されることがあります。

## 作成したアプリケーションを動かしてみる

パッケージの復元も完了したので、とりあえず作成したアプリケーションを実行してみます。

project.jsonのあるディレクトリでコマンドプロンプトを開き、以下のコマンドを実行してみましょう。

```
dotnet run
```

私の環境では警告が出てしまっていますが、上記のコマンドを実行すると以下のように表示されると思います。

![image](https://qiita-image-store.s3.amazonaws.com/0/39403/2e781e39-f289-5396-cd29-7b6aff90a035.png)

下から2行目の[Now listening on]という項目に書かれているURLにWebブラウザでアクセスしてみましょう。(上の例ではhttp://localhost:5000。)

そうすると以下のページに遷移します。

![image](https://qiita-image-store.s3.amazonaws.com/0/39403/cfa44ee1-753a-7eda-dde5-2cb53bdf1aad.png)

ただこの実行方法はIISは使用しておらず、Kestrelサーバーに直接アクセスしている状態です。

[Ctrl] + [C]でKestrelサーバーを終了します。

## アプリケーションの発行

ではIIS上で動かすためにアプリケーションを発行します。

ASP.NET Coreに限らず、project.jsonベースのアプリケーションは```dotnet publish```というコマンドで発行します。

```dotnet publish```コマンドについて詳細が知りたい方は以下のリンクを参照してみて下さい。

* <a href="https://docs.microsoft.com/ja-jp/dotnet/articles/core/tools/dotnet-publish">dotnet publish</a>

今回は以下のようなコマンドを実行します。([発行したファイルの出力先]には任意のパスを指定して下さい。)

ちなみに以下のコマンドでは、.NET Core 1.1のアプリケーションとしてReleae構成でビルド後に発行するようになっています。

```
dotnet publish --framework netcoreapp1.1 --configuration Release --output [発行したファイルの出力先]
```

※『No executable found matching command "[何らかのコマンド]"』というメッセージが表示された方は<a href="http://qiita.com/taiga_takahari/items/9485c01fb2904562e6fe#%E8%A3%9C%E8%B6%B3%E3%83%95%E3%83%AD%E3%83%B3%E3%83%88%E3%82%A8%E3%83%B3%E3%83%89%E5%91%A8%E3%82%8A%E7%92%B0%E5%A2%83%E6%A7%8B%E7%AF%89">こちら</a>を参照して下さい。

発行に成功するとコマンドプロンプトには以下のように表示されます。

![image](https://qiita-image-store.s3.amazonaws.com/0/39403/c8588382-6188-fa17-53f4-6b5cf5d5aa0b.png)

また発行先のディレクトリに遷移するとコンパイル済みのdll群が生成されているのが確認できます。

![image](https://qiita-image-store.s3.amazonaws.com/0/39403/87547a54-faa6-ec8e-c262-ed10f8184038.png)

## IISの設定とアプリケーションへのアクセス

IISの設定は<a href="http://qiita.com/taiga_takahari/items/7809c78393750c42e443#iis%E3%81%AE%E8%A8%AD%E5%AE%9A">前回</a>記載した通りで、<a href="">Webサイト作成時</a>の物理パスの項目を先ほど発行したファイルの出力先に合わせます。

Webサイトが作成できたら[Webサイトの参照]をクリックしてみましょう。

![website.png](https://qiita-image-store.s3.amazonaws.com/0/39403/6051a930-0696-3c79-5f54-bf4f0ce0d215.png)

Webブラウザが立ち上がって先ほどと同じページが表示されたら完了です。

![image](https://qiita-image-store.s3.amazonaws.com/0/39403/5b59eda0-f88d-2640-5bc6-e6db56de1e41.png)

## 補足：フロントエンド周り環境構築

dotnet CLIから作成したASP.NET Coreのアプリケーションではフロントエンドの技術としてbowerとgulpを使用しています。

bowerはパッケージ管理ツール(NuGetのようなもの)で、gulpはAltJS(TypeScriptやCoffieScript)やメタCSS(SCSS/SASSやLESS)などをコンパイルしたりファイルを簡素化・圧縮したりするタスクランナーです。

以下に各々の公式ドキュメントのページのリンクを載せておきます。

* <a href="https://bower.io/">bower</a>
* <a href="http://gulpjs.com/">gulp</a>

これらのツールのインストールにはnpm(Node Package Manager)が必要になります。

各々のWindows環境でのインストール方法については以下のリンクを参照してみて下さい。

* <a href="http://yohshiy.blog.fc2.com/blog-entry-307.html">Node.js の Windows へのインストールと npm の使い方</a>
* <a href="http://dev.classmethod.jp/tool/bower-installation-at-windows/">「Flight試してみたい！」でWindowsにBowerをインストールする</a>
* <a href="http://qiita.com/59naga/items/ec49758921a0030add20">gulpのセットアップ windows編</a>

## まとめ

dotnet CLIで作成したASP.NET Coreのアプリケーションを前回の記事で構築したIIS上にホストする方法を書きました。

前回と今回の記事を合わせて読めばASP.NET CoreのアプリケーションをIIS上で動かすまでの一通りの作業がカバー出来ていると思います。

IIS上にホストする上でいくつか知っておいた方がいいテクニックなんてのもあるんですが、この辺に関してはまた別の機会に書いていきます。