Ubuntu14.04上にASP.NET MVC 5.2開発環境をつくる
引き続きC#/.NETについてお勉強をしている今日このごろですが、きょうはUbuntu上にASP.NET MVC 5.2開発環境をつくるというのを試してみました。最終目標はKestrelを使ったサーバ環境構築ですが、だんだんと行きましょう。今回はともかく開発環境です。
あらかじめまとめじみた感想を述べておくと、WindowsとVisual Studioの組み合わせよりもMac OS XとXamarin Studioの組み合わせのほうが、そしてそれよりさらにLinuxとMonoDevelopの組み合わせのほうが圧倒的に快適だということです。
もちろんプラットフォームのちがいにより使用できるアプリケーション・モデルがちがったり、フレームワークのバージョンに制限があったりと課題も多いのですが、IDEの起動とビルドの観点で言うとMacとLinuxが圧勝でした。多分にSSDの効果もあるようですが。とにかく速いのです。
前提
環境構築
フェーズ1:仮想マシンの用意
まずはこれから環境構築していくLinuxマシンを用意する。
今回はMacbook上で作業するのでLinuxマシンを稼働させるための仮想マシンを用意する必要がある。
Oracle VM VirtualBoxの公式サイトからMac OS X用のインストーラをダウンロードする。
ダウンロード・ページでは
Mac OS X用インストーラのリンクが「VirtualBox 5.1.6 for OS X hosts amd64」となっており、この「amd64」という表記が釈然としないが、ともかくこれしか選択肢はないのでこれを選ぶ。
ダウンロードしたdmgファイルをオープンして、インストーラを起動、ウィザードにしたがい淡々とインストールする。
続いて仮想マシン上で動かすLinux OSの準備をする。いろいろ本題以外のところで躓きたくはないので、Ubuntu Japanese Teamの皆さんが公開してくれている
できあいのUbuntu 14.04 LTSハードディスクイメージを使ってセットアップする。
具体的な手順はダウンロード・ページを参照のこと。
今回はデフォルト通り搭載メモリ1GBで仮想マシンを作成している。WindowsとVisual Studioの構成であればありえないと思うが、後述の通りLinuxとMonoDevelopの構成ならこれで十分である。
フェーズ2:MonoDevelopのインストール
LauncherからUbuntuソフトウェアセンターを起動する。
MonoDevelopを検索する。この記事を書いている時点でデフォルトのリポジトリにあったMonoDevelopのバージョンは4.0.12。
パッケージ詳細ページにていくつかの追加のアドオン(下図)を選択した上で、[インストール]をクリックする。数分間待つとインストールが終わる。
余談ではあるがパッケージのダウンロードサイズの小ささにびっくりさせられる。50MB以下である。すごく小さい。
インストールが完了したらLauncherからMonoDevelopを起動する。
これも余談ではあるが、このときの待機時間に注目で、今回構築したUbuntu(CPUコア数1、メモリ1GB)上でも5〜10秒程度で起動した。Macbook(CPU動作周波数1.1GHz、CPUコア数2、メモリ8GB)上でXamarin Studioを起動するよりも明らかに速い。さらにはHDD搭載のWindowsマシン上で稼働するVisual Studioの、全体的にもっさりした動作の中でもとりわけ印象深い起動時間の長さと比べたとき、ちょっとした感動を覚えてしまう(もちろんMacbookは──したがって仮想マシン上のLinuxも──ストレージはSSDなのでこの比較は多分に不公平ではある)。
続いて後述の事情からNuGetアドインをインストールする。
- MonoDevelopのメニューから[ツール]→[アドインマネージャ]をクリック。
- 表示されたAddin Managerのウィンドウの[Gallery]タブをクリック。
- [リポジトリ]欄のプルダウンから[Manage Repositories…]をクリック。
- 表示されたアドインリポジトリ管理ウィンドウの[追加]ボタンをクリック。
- [Url]欄に「http://mrward.github.com/monodevelop-nuget-addin-repository/4.0/main.mrep」と入力して[OK]をクリック(下図)。
- アドインリポジトリ管理ウィンドウを閉じる。
- [Gallery]タブの[リポジトリ]欄から今しがた登録したリポジトリ「mrward.github.com」を選択。
- 「NuGet Package Management」というアドインが表示されるので(下図)これを選択して[インストール]をクリック。
インストールが完了したらアドインマネージャのウィンドウを閉じる。
フェーズ3:ソリューションの準備とビルド
MonoDevelopのバージョン4.0.12が提供するソリューション作成時のオプションで選べるのはASP.NET MVCのバージョン3.0で、バージョン5.xは選べない。また仮にこのバージョン3.0のオプションを選んでも、MonoDevelop 4.0.12のパッケージのバグでアプリがきちんと動作しない。
例によってWeb上には先人たちが苦労したログがそこここにあるが(例えばここ)、ASP.NETどころか.NETそのもの初心者にとってハードルは高い。
よってここでは「Xamarin Studioでスケルトンを作成してそれを使う」という強引な方法をとった。
Xamarinで作成したスケルトンはこちらのGitリポジトリからダウンロードできる。
リポジトリからダウンロードしたzipファイルを展開し、slnファイルをダブルクリックしてMonoDevelopでオープンする。
- プロジェクトの[参照]を開くと参照エラーとなっている箇所がある。
- そこでソリューション名の上で右クリックし[Manage NuGet Packages]をクリックする。
- 警告が表示されるが(「そんなこと言われてもYESと答えるしかない」)、[はい]をクリック。
- そしてキーワード欄に「ASP.NET MVC」と入力してパッケージを検索。
- 一覧に表示された結果のなかから「Microsoft ASP.NET MVC」を選択、右側ペインの下側に表示された[Manage]をクリック(下図)。
- Select Projectsウィンドウが表示されるのでメインのプロジェクトとテストのプロジェクト双方にチェックを入れて、[OK]をクリック。
- ここで再度前述の警告が表示されることもあるが同様に対処する。
- 加えてライセンスへの同意を求められるので内容を確認して[OK]をクリックする。
- 続いてキーワード欄に「NUnit」と入力してパッケージを検索。
- 一覧に表示された結果のなかからその名も「NUnit」(バージョンはこの記事を執筆している時点で3.5.0)を選択。
- Select Projectsウィンドウが表示されるのでテストのプロジェクトにだけチェックを入れて、[OK]をクリック。
- テストのプロジェクトのpackage.jsonにNUnitのバージョン2.6の指定が残ってしまうのでこの行を削除して保存。
ここでMonoDevelopを再起動する。これをしないとプロジェクトの参照設定が正しくならなかった。
- MonoDevelopのメニューから[ビルド]→[全て再ビルド]をクリック。
- ビルド完了し次第、[実行]→[Start Without Debugging]をクリックしてアプリケーションを起動する。
[アプリケーション出力]欄に以下のようなメッセージが出力され、しばらくするとWebブラウザが起動してトップページが表示される:
Adding applications '/:.'...
Registering application:
Host: any
Port: any
Virtual path: /
Physical path: /home/ubuntu01/ダウンロード/Hello.NetMvc52.On.MonoDevelop-master/Hello.NetMvc52.On.MonoDevelop/
xsp4
Listening on address: 127.0.0.1
Root directory: /home/ubuntu01/ダウンロード/Hello.NetMvc52.On.MonoDevelop-master/Hello.NetMvc52.On.MonoDevelop
Listening on port: 8080 (non-secure)
──のだが、なぜか初回表示時は以下のようにエラー画面になってしまう。
そして、再読込をすると治る(下図)。以後は問題ない。