この記事はもう過去のプレビュー版での話になってしまったので、現在は
https://docs.microsoft.com/ja-jp/dotnet/core/linux-prerequisites?tabs=netcore2x#install-net-core-for-debian-8-or-debian-9-64-bit
を参照のこと。

折角クロスプラットフォームになったdnx。実際にMac・Linuxで動かしてみた。

環境構築

Linux編

今回は、Debian8での構築。

Monoのインストール

普通にapt-getでmonoはインストールできるけれど、現在mono3.xになってしまう。MVC6を動かすには、mono4.xが必要とのことなので、リポジトリを登録して、apt-getする。

Monoのサイトできちんとした説明があるので詳細はWebで!
http://www.mono-project.com/docs/getting-started/install/linux/

# apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF
# echo "deb http://download.mono-project.com/repo/debian wheezy main" | tee -a /etc/apt/sources.list.d/mono-xamarin.list
# echo "deb http://download.mono-project.com/repo/debian wheezy-apache24-compat main" | tee -a /etc/apt/sources.list.d/mono-xamarin.list
# echo "deb http://download.mono-project.com/repo/debian wheezy-libjpeg62-compat main" | tee -a /etc/apt/sources.list.d/mono-xamarin.list
# apt-get update
# apt-get install mono-complete
libuvのインストール

Debianの場合、WebサーバーのKestrelを動かすのに必要っぽいのでインストール。こいつは、apt-getではなく野ビルド。

# apt-get install automake libtool curl
# curl -sSL https://github.com/libuv/libuv/archive/v1.4.2.tar.gz | sudo tar zxfv - -C /usr/local/src
# cd /usr/local/src/libuv-1.4.2
# sh autogen.sh
# ./configure
# make 
# make install
# rm -rf /usr/local/src/libuv-1.4.2 && cd ~/
# ldconfig
DNVM/DNXのインストール

ここからは、各ログインユーザーの世界なので、rootではなくログインユーザーで作業。

$ curl -sSL https://raw.githubusercontent.com/aspnet/Home/dev/dnvminstall.sh | DNX_BRANCH=dev sh && source ~/.dnx/dnvm/dnvm.sh
$ dnvm upgrade

Mac編

Macの場合は、brewで簡単にインストールできる。brewはインストール済みということで。

$ brew tap aspnet/dnx
$ brew update
$ brew install dnvm
$ source dnvm.sh
$ dnvm upgrade

こんだけ(汗)

MVC6アプリを動かしてみる

今回、社内システムようにMVC6で構築したアプリをデプロイしてみる。全くもってクロスプラットフォームなんて意識して作ってないのでどうなるか(笑)

パッケージのリストア

dnxは、利用するパッケージをgemやnpmのように管理しているので、dnuコマンドでプロジェクトに定義された必要なパッケージをダウンロードしてくれる。基本、デプロイイメージであれば必要なパッケージが同梱されているが、とりあえず、rubyでもgem updateはよくやるのでノリでやってみる。

$ cd <project.jsonのあるフォルダ>
$ dnu restore

ここで、Macの場合は、Nugetしないローカルにしかない自前のライブラリもきちんと処理してくれたんだけど、Debianの場合は、ローカルのライブラリが解決できずエラーに成ってしまう。

そんな場合は、wrapコマンドでローカルのライブラリをインポートできた。

$ dun wrap <xxx.dllのパス> -f dnx451
$ dun wrap <yyy.dllのパス> -f dnx451
$ dun wrap <zzz.dllのパス> -f dnx451
$ dnu restore

※-f は、DLLのframeworkバージョン

実行

$ dnx web

dnxで利用出来るコマンドは、project.jsonのcommandsで定義されているコマンドらしい。以前は、コマンド名がkestrelだったみたいなので、エラーになる場合は、project.jsonのcommandsを確認のこと。

結果

パスのセパレータを「¥」でつないでしまっているコーディングを修正し、設定ファイルのパス関連を修正するだけで、全く問題なく動いてしまった。(流石にDBのSqlServerは他のマシンのものを利用したけど...SqlServerのlocaldbなら動くらしいぞ)

MVC6の場合、デプロイイメージはDLLではなくソースベースなので、MacでもLinuxでもそのままソース修正もできた。

StudioCodeをエディタに使えば、補完機能もVisualStudioっぽくやってくれるので、開発作業を行うプラットフォームもWindowsじゃなくてももういいんじゃない?
(ちなみに、.net4.5以降ファイルエンコードは、UTF-8じゃないとビルドできなくなったのにはこの辺が理由だったんだね!)

2016/04/07 追記

LinqToSqlにて、SQLをパースできず実行時にエラーとなるケース有り。