10
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

pyspaAdvent Calendar 2015

Day 16

主にLinuxのための ASP.NET 5.0 メモ

Last updated at Posted at 2015-12-15

今年ちらりとあった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

以前のomnisharpNRefactory を利用していたようですが、開発は終了したようです。現在は 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 メソッドで簡単にかけます。
一番簡単な例

Startup.cs
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

Dapper

TODO

テスト

テストフレームワーク

TODO

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させるようにします。

DockerFile
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

参考文献

10
11
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?