検索
連載

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

OS X/UbuntuでASP.NET 5アプリを動作させるまでの手順をステップバイステップに解説していく。

PC用表示 関連情報
Share
Tweet
LINE
Hatena
前のページへ |       

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アプリ開発ガイド

Copyright© Digital Advantage Corp. All Rights Reserved.

前のページへ |       
ページトップに戻る