LoginSignup

This article is a Private article. Only a writer and users who know the URL can access it.
Please change open range to public in publish setting if you want to share this article with other users.

More than 5 years have passed since last update.

ASP.NET Core 2.0

Posted at
1 / 47

自己紹介

  • 政倉 智 (まさくら とも)
  • codeArts 株式会社
  • html5j 鹿児島
  • バイク乗り

ちゃんとしたい人は明日福岡へどうぞ!

fukuten.png


歴史

Untitled.png

  • ASP.NET Core は ASP.NET の後継です
  • ASP.NET の新バージョンは出ません
  • ASP.NET Core は ASP.NET と互換性がありません

ASP

みんな大好き ASP!

<%
  Dim dtmHour

  dtmHour = Hour(Now())

  If dtmHour < 12 Then
    strGreeting = "Good Morning!"
  Else  
    strGreeting = "Hello!"
  End If
%>

  • [利点] シンプルではじめやすい
  • [欠点] IIS 専用
  • [欠点] HTML とコードが混在して読みにくい
  • [欠点] ライブラリが作りにくい

ASP.NET

WebForms! ある意味画期的だった!

screenshot.png

スクリーンショットは VS 2017 Preview です...


  • [利点] イベントドリブン方式で、VB アプリっぽく開発できる
  • [利点] ライブラリを作りやすい、豊富なライブラリ
  • [欠点] 出力される HTML が予想しにくい
    • ウェブの新技術への対応が難しい
    • セマンティックウェブの実現が難しい
  • [欠点] IIS 専用
    • ASP.NET 開発サーバーが投入されてかなりましに
  • [欠点] MVC がやりづらい

ASP.NET 3.5

ASP.NET MVC 投入! (RoR のパクリ)

    public class HomeController : Controller
    {
        public ActionResult Index()
        {
            return View();
        }

        public ActionResult About()
        {
            ViewBag.Message = "Your application description page.";

            return View();
        }

サンプルは VS 2017 Preview です...


  • [利点] RoR などの MVC 開発に慣れている人にとっつきがいい
  • [利点] HTTP/HTML そのままでウェブエンジニアには優しい
  • [欠点] System.Web.dll べったり
    • フットプリントが大きい
    • テスト駆動開発などに向かない
    • なんとかするためにちょっと強引...
  • [欠点] IIS 専用 (本番は)

ASP.NET 4.5

ASP.NET Web API 投入!

    public class ValuesController : ApiController
    {
        // GET api/values
        public IEnumerable<string> Get()
        {
            return new string[] { "value1", "value2" };
        }

        // GET api/values/5
        public string Get(int id)
        {
            return "value";
        }

サンプルは VS 2017 Preview です...


ASP.NET MVC の設計のいいところを使い、System.Web.dll に依存しない新設計!

  • [利点] WCF と比べて簡単に API が書ける
  • [利点] セルフホスティングが可能に
    • ASP.NET WebForms/MVC では不可
  • [欠点] ASP.NET MVC と良く似ている別物
    • 後発の Web API の方ができはいい
    • 似たような名前で同じ機能を持つ、別々のクラスが

時代が変わった

  • より HTML を意識したセマンティックウェブへ
  • RoR をはじめとする MVC Framework の台頭
  • テスト駆動開発をなどのイテレーション開発
  • セルフホスティング

そのために ASP.NET は進化を続けた


そろそろ限界が...

7b35adb73436cdb0f42160c91b7b333f_m.jpg


これ以上の進化のためには...


ASP.NET Core


  • 今後も戦えるよう、新しく再設計
    • System.Web.dll 依存からの脱却
    • IIS 依存からの脱却
    • ASP.NET WebForms の廃止
    • Dependency Injection を基本
    • 小さいフットプリント
  • ASP.NET Web API と MVC の統合
  • すべてをセルフホスティング可能
  • (ついでに) マルチプラットフォーム

実行プラットフォーム

  • .NET Framework
    • Windows Only!
    • 仕事だとまだこっちがいいかも
  • .NET Core
    • Windows/Mac/Linux に対応

開発環境 (ASP.NET Core 2.0)

  • [有償] Visual Studio (Win/Mac)
  • [無償*] Visual Studio Community (Win/Mac)
  • [無償] Visual Studio Code (Win/Mac/Linux)
  • [有償] JetBrains Rider (Win/Mac/Linux)

Visual Studio Community は条件付き無償


.NET Standard 2.0

  • .NET Standard は .NET Fx/Core/Mono の共通 API 仕様
  • .NET Standard Library は .NET Fx/Core/Mono で動作する
  • .NET Core 2.0 は .NET Standard 2.0 準拠
    • 1.x 時代はいろいろ API が足りなかった
    • 13,000 (1.6) -> 26,000 -> (2.0)
    • .NET Framework とそん色がない感じに

.NET Standard 2.0

  • .NET Core 1.x 時は API が少なすぎて、既存ライブラリの .NET Core 対応が進まなかった
  • .NET Core 2.0 は一気に API が増えたので、既存ライブラリの移植が進みそう
  • .NET Framework ライブラリの呼び出しができるように
    • nuget リポジトリにあるライブラリの 70% くらいが使えるらしい

.NET Core 1.x の API 不足に悩まされなくてもよくなったと思えば


ASP.NET Core Middleware


Node.js + Express の Middleware まんまだと思ってください

リクエストをパイプラインに投入して結果を返します。

パイプラインを自由に書けます。


ASP.NET Core Middleware Fundamentals より


どんなリクエストにも "Hello, World!" を返す Middleware

public class Startup
{
    public void Configure(IApplicationBuilder app)
    {
        app.Run(async context =>
        {
            await context.Response.WriteAsync("Hello, World!");
        });
    }
}

ASP.NET Core Middleware Fundamentals より


静的ファイルの表示もエラー表示も MVC もなんもかんも Middleware!

public void Configure(IApplicationBuilder app)
{
    app.UseExceptionHandler("/Home/Error"); // Call first to catch exceptions
                                            // thrown in the following middleware.

    app.UseStaticFiles();                   // Return static files and end pipeline.

    app.UseAuthentication();               // Authenticate before you access
                                           // secure resources.

    app.UseMvcWithDefaultRoute();          // Add MVC to the request pipeline.
}

ASP.NET Core Middleware Fundamentals より


必要なものだけを組み立てて使う (= フットプリントが小さい)

2df62c2eabe7c1261515a18db8dbe21e_s.jpg


セルフホスティング


最近のウェブアプリはアプリケーションサーバー内蔵が多い

  • Unicorn/thin/WEBRick (Rails)
  • Jetty (Java)
  • Express.js (Node.js)
  • Django/Flask (Python)

後ろ二つはちょっと違うけど...


  • ただのアプリのなのでデバッグが楽
    • IIS/Java EE だと、わざわざアタッチして..
    • IDE が勝手にやるんですが、うまくいかん時がしんどい
  • アプリの中にウェブアプリが組み込める

ウェブアプリを起動するの必要な

最低限のクラスは二つだけ


アプリケーションサーバーを起動する

Program.cs
public class Program
{
    public static void Main(string[] args)
    {
        BuildWebHost(args).Run();
    }

    public static IWebHost BuildWebHost(string[] args) =>
        WebHost.CreateDefaultBuilder(args)
            .UseStartup<Startup>()
            .Build();
}

アプリケーションの定義をする

Startup.cs
public class Startup
{
    public void Configure(IApplicationBuilder app)
    {
        app.Run(async context =>
        {
            await context.Response.WriteAsync("Hello, World!");
        });
    }
}

サポートライフサイクル


公開されてるけど、正直よくわかんない

  • LTS - いずれか短いほう
    • メジャー LTS リリースから三年
    • 次のメジャー LTS リリースから一年
  • Current - よくわからん...

長くても三年だけど、実質二年くらいじゃないか? っていう印象を受ける

  • リリース直後は Current
  • そこから LTS にピックアップされるらしい

来年頭に出る 2.1 が LTS になるといいなあ...

Version Release Support Level Support
2.1 2018/?? ??
2.0 2017/08 Current 2020/08 か次の Current から三か月か次の LTS から一年
1.1 2016/11 LTS (*) 2019/06 か次のメジャー LTS から一年
1.0 2016/06 LTS 2019/06 か次のメジャー LTS から一年

(*) 1.1 は Current から LTS に変更された経緯あり


2.0 になって

  • ASP.NET と遜色ない感じに
    • 1.x は作り直されたのでちょっと機能が足りない
  • Entity Framework Core 2.0 も遜色ない感じに
    • InMemory が便利 (1.x からあるよ)
  • SignalR は ASP.NET Core 2.1 (来年頭?) らしい
  • 2.1 が本命っぽい
  • しばやんさんのスライドが参考になるよ!

1.x は忘れましょう!

  • project.json なんてなかったんだ!

まとめ


  • ASP.NET Core は ASP.NET の後継で新設計
  • ASP.NET Core は ASP.NET と互換性はないよ
    • ASP.NET MVC や Web API の思想は引き継いでいる
  • ASP.NET Core は .NET Framework/Core の両方で動くよ
  • ASP.NET Core + .NET Core は Windows 以外でも動くよ
  • 2.0 になって API が増加してかなり使えるようになった

やってみる


mkdir app1
cd app1
dotnet new
dotnet new mvc
code .


がんばりましょう!


面白いものができた人は発表してね!

0

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