自己紹介
- 政倉 智 (まさくら とも)
- codeArts 株式会社
- html5j 鹿児島
- バイク乗り
ちゃんとしたい人は明日福岡へどうぞ!
歴史
- 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! ある意味画期的だった!
スクリーンショットは 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 は進化を続けた
そろそろ限界が...
これ以上の進化のためには...
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 より
必要なものだけを組み立てて使う (= フットプリントが小さい)
セルフホスティング
最近のウェブアプリはアプリケーションサーバー内蔵が多い
- Unicorn/thin/WEBRick (Rails)
- Jetty (Java)
- Express.js (Node.js)
- Django/Flask (Python)
後ろ二つはちょっと違うけど...
- ただのアプリのなのでデバッグが楽
- IIS/Java EE だと、わざわざアタッチして..
- IDE が勝手にやるんですが、うまくいかん時がしんどい
- アプリの中にウェブアプリが組み込める
ウェブアプリを起動するの必要な
最低限のクラスは二つだけ
アプリケーションサーバーを起動する
public class Program
{
public static void Main(string[] args)
{
BuildWebHost(args).Run();
}
public static IWebHost BuildWebHost(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>()
.Build();
}
アプリケーションの定義をする
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 が増加してかなり使えるようになった
やってみる
- Install .NET Core
- Install Visual Studio Code
- Install C# Extension
mkdir app1
cd app1
dotnet new
dotnet new mvc
code .
- ASP.NET Core の基礎 - まじめな人
- とりあえずアプリが作りたい人は
- 自分は Middleware でも作ってみようかと