今年ちらりとあったpyspaでは ASP.NET 5.0とかdnxとかいじって(あの頃からかなり変わっちゃったけど)たのでそのあたりまとめ。
ASP.NET 5.0 のこれまでとの大きな違い
- coreclrも対象なので Linux とか Mac とかでも普通に動く
- IISと決別
- その影響で名前空間が System.Web 以下から Microsoft.AspNet 以下に移動
ASP.NET 5.0 の環境 (DNX/dotnet)
今のところの環境構築
dnxを使って環境を制御します。どこぞの *env なしくみでしょう。
dnxはcoreclr専用ではなく、monoランタイムを使った環境も取り扱えます。
各種プラットホームでの構築方法は Getting Started にあります。
libunwindやlibuvなど別途必要なものもあるので注意。
今後の動向
kre,dnxところころ変わるツールですがまた dotnet という名前に代わるようです。
dnxまではASP.NETチームが開発していたのかリポジトリもそちらにありましたが、dotnetは .NET Foundation のリポジトリにcli という名前でリポジトリが作られています。
ASP.NET 5.0もrc2でツールチェインをdnxからdotnet-cliに移行する予定のようです。
もっと必要な環境
ランタイムやらコンパイルやらそのあたりのことはdnxにお任せでOKなので、それ以外のツールボックス
コードジェネレーター
だいたい最初に必要なファイルがそこそこあるので、しょっぱなのコードジェネレーターが便利です。
yoを使うので、そこらへん必要なものを準備。
- node
- npm
- yo
- generator-aspnet
エディター
Linux に Visual Studio などないので、Visual Studio Code などを利用します。
が、emacs(好きなエディタに脳内補完してください)ですべてをこなす身としては、専用のエディタに惑わされることなく OmniSharp を使いましょう。
Omnisharp
以前のomnisharp は NRefactory を利用していたようですが、開発は終了したようです。現在は dnx でも利用されている C#コンパイラの Roslyn を利用した omnisharp-roslyn にメインが移っているようです。
ASP.NET 5.0
ASP.NET 5.0 は OWin の考えを引き継いでいます。
ようするに WSGIとかRackとかあのあたりの話です。
サーバーとアプリケーション間の規約を決めたということで、IIS以外でも実行可能となるわけですが、Owin自体はいろいろ間に合わなかったようで、考え方だけが ASP.NET 5.0に持ち込まれたようです。
ASP.NET 5.0のアプリケーションは Startupクラスを定義して、ApplicationBuilderにアプリケーションの定義を追加していきます。
フレームワークなど使わずとりあえず実行してみるだけなら、 Run メソッドで簡単にかけます。
一番簡単な例
using Microsoft.AspNet.Builder;
using Microsoft.AspNet.Http;
class Startup
{
public void Configure(IApplicationBuilder builder)
{
builder.Run(async (context) => {
await context.Response.WriteAsync("Hello");
});
}
}
最初から非同期であることが後発の強みでしょうか。
その他Webアプリケーションやフレームワークを支えるためのインフラストラクチャっぽい部分も充実しています。
データベース
Entity Framework
Entity FramworkがASP.NETのリポジトリでcoreclr対応したバージョン(Entityframework7)を開発されています。
用意されているドライバは InMemory, SQLite, SQLServer が公式っぽいところですが、Linux向けとしては Postgresql 用のドライバ npgsql が、Entityframework7 対応のドライバも開発しています。coreclrビルドもすでにベータ提供されています。(MySQLはいつ...)
EFコマンド
TODO
- https://www.nuget.org/packages/EntityFramework.Commands/7.0.0-rc1-final
- ef migration
- ef database update
Dapper
TODO
テスト
テストフレームワーク
TODO
- xunit http://xunit.github.io/
- Microsoft.AspNet.TestHost
- カバレージ
CIツール
Windows向けはもう appveyor 一択として、 travis-ci は、 公式にmonoをサポートしている ので、そのうえでdnx環境を作ってテストを実行できるようです。
というか aspnet チームはLinuxでのcoreclrのテストは travis を使っている ので、このあたりを参考にすればよさそうです。
また、この後に書くように、microsoftがdocker hub にイメージを公開してくれている ので、このイメージを使えば wercker でもいけるのでは?
デプロイ
docker
microsoft謹製の ASP.NET用イメージが docker hub に登録されてます。
yoで生成したままのDockerfileでコンテナを作ると、Kestrelがデフォルトで 127.0.0.1 をListenするのがいけないのか、exposeされている5000番をdocker runのpublish指定してもつながりません。
server.urls
オプションを追加して、0.0.0.0:5000でListenさせるようにします。
FROM microsoft/aspnet:1.0.0-rc1-update1
COPY . /app
WORKDIR /app
RUN ["dnu", "restore"]
EXPOSE 5000/tcp
ENTRYPOINT ["dnx", "-p", "project.json", "web", "--server.urls=http://0.0.0.0:5000"]
docker build -t my/aspnet-1 .
などしてイメージを作成したのち、 docker run -p 127.0.0.1:5000:500 my/aspnet-1
などで起動すれば、 http://localhost:5000 でつながります。
TODO
- kudu
- heroku
- azure
ライブラリ
- nuget
- sake
- myget
- appveyor