今回は手作業で簡単なWebアプリを作成しながら、ASP.NET 5 Webアプリの基本構造を見た後、これを自動化する方法を紹介する。
powered by Insider.NET
前回はASP.NET 5をOS X/Ubuntuにインストールし、サンプルアプリを動作させるまでをステップバイステップで見た。今回は自分で手を動かして、ASP.NET 5のMVCアプリを実際に作成し、その後、アプリのひな型を自動作成するためのツール「yeoman」のインストールまでを見てみることにしよう。
なお、前回「XRE」と記述していたクロスプラットフォームな.NET実行環境の名称が「DNX」(.NET Execution Environment)に変わっている(「KRE」→「XRE」→「DNX」)。本稿ではDNX以前のバージョン(OS X/Ubuntu共に1.0.0-beta3)を使用している。また、実行環境についてはDNXではなくXREと記述する。DNXでの動作は未確認なので、実際に動かしてみようという方は安定版を使ってほしい。
まずは前回実行してみたHelloMvcアプリと同様なアプリを手作業で構築しながら、ASP.NET 5 Webアプリの基本構造について見ていくことにする。
ASP.NET 5アプリを実行するために最低限必要になるのが以下の二つのファイルだ。
project.jsonファイルはプロジェクトに関する各種構成を記述したファイルだ。XREで実行するには、コンソールアプリの場合はProgram.csファイルが、Webアプリの場合はStartup.csファイルが必要になる(実際には、コンソールアプリでは「public void Main」メソッドを含んだ「Program」クラスを含んでいれば、Webアプリでは「public void Configure」メソッドを含んだ「Startup」クラスを含んでいれば、ファイル名はこれらと違っていてもよい)。
project.jsonファイルにはプロジェクトの設定をJSON形式で記述する。最低限必要な設定内容は以下のようになる。ここでは、「~/work/aspnet5」ディレクトリにWebapptestディレクトリを作成し、そのディレクトリ内で作業を進めることにする。
{
}
最初は、catコマンドなどを使って、空の内容のproject.jsonファイルを作っておこう。
$ cat > project.json
{
}
[Ctrl]+[D]
$
ここではASP.NET MVC 6アプリを作成するので、もう一つ必要なファイルはStartup.csファイルだ。この内容は取りあえず次のようにしておこう。
namespace Webapptest
{
public class Startup
{
}
}
次に、kpmコマンドを使ってプロジェクトに必要なアセンブリを設定する。
project.jsonファイルは任意のテキストエディターを使用して編集できるが、依存関係の設定に関してはコマンドラインから「kpm install」コマンドを使って設定可能だ。
前回は「kpm restore」のようにして、アプリが必要とするライブラリパッケージを取得するのに使用した。が、このコマンドは以下に示すように、プロジェクトの構築時に必要なパッケージを指定するのにも使える。
例えば、ここではMVCアプリを作成するので「Microsoft.AspNet.Mvc」パッケージが必要になる。そこで以下のようにして、このパッケージをインストールする。
$ kpm install Microsoft.AspNet.Mvc
…… 省略 ……
Restore complete, 711ms elapsed
これにより、project.jsonファイルには以下のようなエントリが追加される。
$ cat project.json
{
"dependencies": {
"Microsoft.AspNet.Mvc": "6.0.0-beta3"
}
}$
前回はNuGet.configファイルで以下のような設定を行うことで、「kpm restore」で復元できなかったパッケージをMyGetからインストールできるようになると述べたが、これはもろ刃の剣的な性質を持っている。
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<packageSources>
<add key="AspNetVNext" value="https://www.myget.org/F/aspnetvnext/api/v2/" />
<add key="NuGet.org" value="https://www.nuget.org/api/v2/" />
</packageSources>
</configuration>
このような設定を行った場合(特に「~/.config/NuGet/NuGet.config」ファイルで上記を記述した場合)、ローカルマシンにインストールしているXREのバージョンと「kpm install」でインストールされるパッケージのバージョンが一致せずに、アプリの環境復元と実行に失敗する場合がある。
そのため、「~/.config/NuGet/NuGet.config」ファイルの設定は以下のようにデフォルトのNuGet.configファイルと同じ内容にしたまま、必要に応じて、プロジェクトディレクトリで上記の設定を行うのがよいだろう。
<?xml version="1.0" encoding="utf-8"?>
<configuration />
「kpm install Kestrel」コマンドも実行しておこう。前回も登場したKestrelはOS X/Ubuntu上でASP.NET 5 WebアプリをホストするWebサーバーだ。ただし、コマンドラインでアプリを実行する際には「k kestrel」と小文字の「kestrel」を指定したが(これはproject.jsonファイルの設定による)、パッケージをインストールする際には「Kestrel」と大文字の「K」で始める必要がある。
「k run」「k kestrel」など、kコマンドに与える引数(実際に実行するコマンドライン)の指定に関しては「kpm install」などのツールの支援はないようで、テキストエディターを使って自分で記述する必要がある。ここでは以下のようなコマンドを追加した。
{
"dependencies": {
"Microsoft.AspNet.Mvc": "6.0.0-beta3",
"Kestrel": "1.0.0-beta3"
},
"commands": {
"kestrel": "Microsoft.AspNet.Hosting --server Kestrel --server.urls http://localhost:5004"
}
}
この状態で試しにアプリを実行してみるとどうなるだろう。
$ k kestrel
System.Exception: TODO: ConfigureDevelopment or Configure method not found
at Microsoft.AspNet.Hosting.Startup.StartupLoader.FindMethod (System.Type startupType, System.String methodName, System.String environmentName, System.Type returnType, Boolean required) [0x00000] in <filename unknown>:0
…… 省略 ……
上のように例外が発生する。その原因は「ConfigureDevelopment」メソッドもしくは「Configure」メソッドが見つからないからだ。つまり、ASP.NET 5 Webアプリではこれらのいずれかがアプリのエントリポイントとなる。次ページではこれについて見てみよう。
Copyright© Digital Advantage Corp. All Rights Reserved.