連載
» 2015年02月20日 13時41分 公開

第1回 ASP.NET 5をOS X/Linuxで使うための準備連載:OS X/LinuxによるASP.NET 5アプリ開発ガイド(5/5 ページ)

[かわさきしんじ,Insider.NET編集部]
前のページへ 1|2|3|4|5       

Webアプリを実行してみる

 次に「Home-master/samples」ディレクトリにあるHelloMvcプロジェクトを実行してみる。これはASP.NET MVCベースのWebアプリのサンプルだ。ただし、本稿執筆時点ではaspnet/Homeで配布されているサンプルコードが、XREのバージョンに合っていないため、多少の変更が必要になる。

 まずは、OS XでHelloMvcアプリをそのままの状態で実行してみる(Ubuntuでの実行方法は後述するが、OS Xでの実行の流れを読んでから、Ubuntuの場合の説明に進んでほしい)。

OS XでのHelloMvcアプリの実行(Ubuntuでも同じ手順が必要)

 先ほどは「k run」コマンドでコンソールアプリを実行したが、今度は「k kestrel」コマンドを実行する。「Kestrel」は、ASP.NET 5用のWebサーバーであり、OS X/Ubuntuの両者で動作する。「k kestrel」コマンドではこれを使用して、HelloMvcアプリをホストする。

 「k kestrel」でHelloMvcアプリを実行したところ、見事に例外が発生している。

$ cd ~/work/aspnet5/Home-master/samples/HelloMvc/
$ kpm restore  # パッケージを取得
Restoring packages for /Users/user_name/work/aspnet5/Home-master/samples/HelloMvc/project.json
  GET https://www.nuget.org/api/v2/FindPackagesById()?Id='Kestrel'.
  GET https://www.nuget.org/api/v2/FindPackagesById()?Id='Microsoft.AspNet.Diagnostics'.
  …… 省略 ……
Installing System.ComponentModel.Primitives 4.0.0-beta-22231
Installing System.IO.Compression 4.0.0-beta-22231
Restore complete, 256576ms elapsed
$ k kestrel    # 「k kestrel」コマンドでWebアプリを実行
System.IO.FileNotFoundException: Could not load file or assembly 'Microsoft.Framework.ConfigurationModel.IConfiguration, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null' or one of its dependencies.
  …… 省略 ……


おっと!
「Microsoft.Framework.ConfigurationModel.IConfiguration」アセンブリが見つからなくてエラーとなった。

 これは、OS XにインストールされているXREのバージョンとproject.jsonファイルに記述されている依存が合致していないことが原因だ(Ubuntuの場合はさらにもう一つ原因があるが、これについては後述)。そこで、XREのバージョンを確認する。これには「kvm list」コマンドが使える。

$ kvm list

Active Version              Runtime Location             Alias
------ -------              ------- --------             -----
  *    1.0.0-beta3-11030    mono    ~/.k/runtimes        default


OS XにインストールされているXREのバージョンを確認

 インストールされているのは「1.0.0-beta3-11030」だ。次に、project.jsonファイルの内容を確認してみよう。

$ cat project.json
{
  "dependencies": {
    "Kestrel": "1.0.0-beta1",
    "Microsoft.AspNet.Diagnostics": "1.0.0-beta1",
    "Microsoft.AspNet.Hosting": "1.0.0-beta1",
    "Microsoft.AspNet.Mvc": "6.0.0-beta1",
    "Microsoft.AspNet.Server.WebListener": "1.0.0-beta1"
  },
  "commands": {
    "web": "Microsoft.AspNet.Hosting --server Microsoft.AspNet.Server.WebListener --server.urls http://localhost:5001",
    "kestrel": "Microsoft.AspNet.Hosting --server Kestrel --server.urls http://localhost:5004"
  },
  "frameworks": {
    "aspnet50": {},
    "aspnetcore50": {}
  }
}


HelloMvcプロジェクトのproject.jsonファイルの内容

 「"dependencies"」セクションでは、このプロジェクトで使用するアセンブリのバージョンが「1.0.0-beta1」であると記されている。このバージョンの違いがエラーの原因だ。これについてはUbuntuでも同様だ(ただし、本稿執筆時点ではUbuntuにインストールされるXREのバージョンは1.0.0-beta2と差異がある)。

 そこでこのファイルを次のように書き換える。

{
  "dependencies": {
    "Kestrel": "1.0.0-*",
    "Microsoft.AspNet.Diagnostics": "1.0.0-*",
    "Microsoft.AspNet.Hosting": "1.0.0-*",
    "Microsoft.AspNet.Mvc": "6.0.0-*",
    "Microsoft.AspNet.Server.WebListener": "1.0.0-*"
  },
  "commands": {
    …… 省略 ……
  },
  "frameworks": {
    …… 省略 ……
  }
}


修正後のproject.jsonファイル

 以上の修正を行い、「kpm restore」コマンドを実行し、続いて「k kestrel」コマンドを実行すると、OS Xでは無事にWebアプリが起動される。

$ k kestrel
Started


「k kestrel」コマンドでHelloMvcアプリを実行
「Started」と表示されればOKだ。

 先ほど見たproject.jsonファイルに以下のような「"commands"」セクションがあったことにお気付きだろうか。この中にある「"kestrel"」の値が「k kestrel」コマンドで実行される内容だ。

  "commands": {
    "web": "Microsoft.AspNet.Hosting --server Microsoft.AspNet.Server.WebListener --server.urls http://localhost:5001",
    "kestrel": "Microsoft.AspNet.Hosting --server Kestrel --server.urls http://localhost:5004"
  },


「k kestrel」コマンドで実行される内容

 「web」と「kestrel」の二つのコマンドが記述されている。前者はWindowsでこのアプリを実行するためのコマンドだ。後者の「kestrel」コマンドの記述からは、このアプリはローカルホストの5004番ポートをリッスンすることが分かる(「--server.urls http://localhost:5004」)。そこで、localhost:5004ポートにWebブラウザーでアクセスをしてみると次のような画面が表示される。これでHelloMvcの動作も確認できた。

HelloMvcアプリの実行画面 HelloMvcアプリの実行画面

 Kestrelサーバーを終了させるには、ターミナル画面で[Enter]キーを押す。これでアプリの実行が終了する(ターミナルにもプロンプトが表示され、コマンド入力待ちになる)。

 なお、project.jsonファイルの修正だけではうまくいかない場合もある。その場合には、NuGet.configファイルをアプリケーションのルートディレクトリに作成して、例えば以下のような内容を記述する。

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <packageSources>
    <add key="AspNetVNext" value="https://www.myget.org/F/aspnetrelease/api/v2/" />
    <add key="NuGet.org" value="https://nuget.org/api/v2/" />
  </packageSources>
</configuration>

「www.myget.org」をパッケージの入手元として設定

 「kpm restore」コマンドはデフォルトでNuGetから必要なパッケージをインストールするが、ASP.NET 5は現状ではまだベータ版であり、日々進化が続いている。そのため、NuGetで配布されているパッケージでは依存を解決できないことがある。そのときには、MyGetからNightlyビルドなどのパッケージを入手するように設定すると問題が解決できる場合がある。

 MyGetからは以下のようなURLでASP.NET 5関連の各種パッケージが配布されているので、必要に応じて適切なパッケージを入手できるようにNuGet.configファイルを作成/編集しておこう。

  • https://www.myget.org/F/aspnetmaster/api/v2: ASP.NET 5のマスタービルド
  • https://www.myget.org/F/aspnetrelease/api/v2: ASP.NET 5のnightlyビルド(「release」バージョン)
  • https://www.myget.org/F/aspnetvnext/api/v2: ASP.NET 5のnightlyビルド(「dev」バージョン)

 NuGet.configファイルは「~/.config/NuGet」ディレクトリに置かれるが、個々のプロジェクトごとにそのルートディレクトリに同名のファイルを作成することで、その設定を変更できる。

 OS Xでは、project.jsonファイルの修正だけでHelloMvcアプリが動作したが(必要に応じて、NuGet.configファイルも編集すること)、Ubuntuではもう少し手間が必要になる。

UbuntuでHelloMvcアプリを実行する場合の注意点

 Ubuntuの場合、project.jsonファイルを上記のように修正するだけでは、HelloMvcアプリは動作しないかもしれない(筆者の環境ではそうだった)。この状況が発生する主な原因は、WebサーバーであるKestrelが依存しているlibuv.so.1ファイルがインストールされていないことだ。

$ k kestrel
System.InvalidOperationException: Unable to load libuv. Make sure libuv is installed and available as libuv.so.1
  …… 省略 ……


libuv.so.1ファイルがないのでエラーとなった

 libuvはGitHubの「libuv/libuv」ページからダウンロードしてビルド/インストールすればよい。ビルドの手順もこのページに記載されているので、参考にしてほしい。ここでは、以下の手順でlibuv.so.1ファイルをビルド/インストールした。

  1. libuvのソースを取得して適当なディレクトリに展開する
  2. automake、libtoolの二つのパッケージをインストールする(「sudo apt-get install automake libtools」コマンド)
  3. libuvのソースを展開したディレクトリに移動する
  4. 「sh autogen.sh」コマンドを実行する
  5. 「./configure」コマンドを実行する
  6. 「make」コマンドを実行する
  7. 「sudo make install」コマンドを実行する
  8. 「sudo ldconfig」コマンドを実行する

 以上の手順でlibuv.so.1ファイルを「/usr/local/lib」ディレクトリにインストールした後、OS Xと同様の手順でHelloMvcアプリを実行できた(実際にはこの作業は、XREのインストール前に行っておいてもよい)。


 今回は、OS X/UbuntuへのASP.NET 5の導入とサンプルコードを動作させるまでの手順を見た。次回は、実際に自分でコードを書いてみることにしよう。

「連載:OS X/LinuxによるASP.NET 5アプリ開発ガイド」のインデックス

連載:OS X/LinuxによるASP.NET 5アプリ開発ガイド

前のページへ 1|2|3|4|5       

Copyright© Digital Advantage Corp. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。