「プログラミング ASP.NET Core」をさっと 1 周した

今年の 5 月に出た書籍です。.NET Core のバージョンは 2.2 に対応されてます。(2.2 に関する部分は脚注でのフォローが多いですが)

さっと 1 周

とりあえず全体感を掴みたかったのもあるんですが、今だと .NET Core 3 の preview バージョンが出ていて、その環境で手を動かしながら読もうとすると、結構変更点が多くて、手が止まったり、別のことを調べ始めたりと進捗が悪かったので、一旦 3 系の事は忘れて読み進めたという感じです。

以下のページで 2.2 から 3 系への移行に関してはまとまってきています。(まだプレビューです)

docs.microsoft.com

また、16 章はまるまる飛ばしたり、4 部のフロントエンドは Web API の部分以外はかなり流し読みになりました。また必要になってからでいいかなと 😅

軽く感想

全体的に

去年から .NET Framework ですが、C# 開発を5 年ぶりぐらいにやっていたんですが、Web の開発というのはあんまりなくてコンソールアプリ中心だったので、ASP.NET Core はなかなか新鮮でした。

Program.cs から起動できるようになっていたり、Middleware のパイプラインで処理されたりと、まるで Rails 使って開発してる時の Rack Middleware を見るような感覚でした。

ASP.NET Core 自体は、MVC としての機能も「追加」の機能でしかなく、それを使わなくてもいいのですが、それでも route を Map して簡単に設定できる機能があり、「これは、Sinatra ?」というと、言いすぎかもですが、Ruby 開発やってた身としても割と既視感持って見れるのは、5, 6 年前だと考えにくかったなぁという気がします。(当時の私が知らなかっただけというのは多分にありますが 😩)

もちろん、 async/await などの非同期処理なんかは Rails アプリを書いていた身としては見慣れない部分もありますし、セキュリティ周りの ASP.NET Identity のような独自のものもありますが、全体通して、頭の中で Rails と対応付けながら読み進められました。

第 7 章 設計について考える

ASP.NET Core は Dependency Injection が最初から統合されている(他の DI package に置き換えも可能)のだけど、依存を分離する方法の整理からされててよかった。この辺りは Adaptive Code の方が詳しく書かれているけど、いきなり「DI が入っているよ」よりはだいぶ良い。「なんで必要なんですか?」って割と最初は感じる部分なので。

私は、ソフトウェアプログラマの仕事を始めて最初のプロジェクトが Struts + Seaser2 という組み合わせだったので、「ダイコンファイルががが」みたいな DI ありきな環境から始めたので、少し運が良かったんだなぁと思ったりした。(もう 12, 3 年ぐらい前か、、、)

「構成データ」に関しても、これまでの hoge.config ファイルから、JSON ファイルや環境変数からの読み込みもサポートされていて、やりやすそう。

「階層化アーキテクチャ」に関しては、ちょうど 8 月前半まで読書会で「Clean Architecture」を読んでいたので、この部分はちょっと雑な説明に感じたが、まあ 1 冊本書ける部分ではあるので、こんなもんかという気もした。

「例外の処理」に関しては、ロギングに関する言及もあったけど、DI はもちろんだが、Logger も最初から使えるようになっていて、削ぎ落とされている部分は削がれているが、有用なものはちゃんと入っていて良さそうに感じた。

第 8 章 アプリケーションのセキュリティ

途中から ASP.NET Identity 中心の話にはなるのだが、HTTPSTLS の話から始まり、Cookie に関してや Twitter 等の外部認証の話もあり、最後は認可の話も入ってきて、一通り学べた感じがした。
Rails では cancan(can) を使っていたが 、ポリシーベースの認可の部分を読んで、「これいいなぁ」と感じたり。Pundit とかはそういう感じなのかな。

第 9 章 アプリケーションデータへのアクセス

Entity Framework Core の話だけになるのかと思いきや、いきなり CQRS の話をぶっこんできたかと思えば、「永続化」「キャッシュ」「外部サービス」とインフラストラクチャ層で扱う様々なデータの話も入れてきていい感じだった。
また、Dapper のような Micro O/RM や、NoSQL の話も少し入っている。

最後にデータアクセスでの非同期処理について MethodAsync 使えばいいってもんじゃないっていう話があって良かった。結局 DB 側で詰まったら意味が無い。

第 14 章 ASP.NET Core のランタイム環境

本当にミニマルな Web サーバーの作り方から始まり、各設定項目を説明する感じがすごく良かった。

Kestrel の事もいまいちよく分かっていなかったが、Rails でいえば Unicorn や Puma の立ち位置になるものかという理解になった。

で、さらに前段に Apache や Nginx を置くという構成になりそう。 Kestrel に関しては古い記事だと libuv を transport に使っているとなっていたが、どうやら今は managed sockets を使っているらしい。 libuv と聞くと「Node.js 的な?」と感じてしまうが、C# に関しては Task という軽量スレッドみたいのがあるし、Node.js と同じアプローチを取る必要は無いかという印象。

Nginx と Kestrel だと Unix socket をバインドできるらしいので、デプロイする時はそのあたりか。

Middleware の説明もさらにされているが、 UseXxx というので use を使って登録するあたりも Rack Middleware っぽくて、個人的に分かりやすい。

最後に

わからないところはネットで調べると、基本的には MSDN に行くのだけど、MSDNチュートリアル等も充実していて、最新版を学ぶなら MSDN を一通り見るのが良さそうに感じた。(もちろん MSDN はボリュームごついので、あたりを付けるという意味で書籍はありがたい)

MSDN は日本語版も多少日本語変なところもあるが、英語版への追随も割といい感じに行われていて、日本語版でさっと概要掴んで、細かいところは英語の方を頑張って読むとかで良さそうに思えた(英語力が低すぎる人の言い訳。。)。

3.0 版が出版されることに期待して締めます。