BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ アーティクル C#9 and .NET 5 - ブックレビューとQ&A

C#9 and .NET 5 - ブックレビューとQ&A

ブックマーク

キーポイント

  • The book C# 9 and .NET 5, by Mark Price, is an implementation-oriented guide on developing .NET cross-platform applications. The author covers the main types of applications that can be built with C# 9 and .NET 5, providing a very comprehensive development guide to .NET beginner to intermediate programmers .
  • The author talks about the new features of C# 9 and the context in which .NET 5 is inserted. He also talks about the importance of knowing the .NET internals for developers that need to work with legacy .NET applications.
  • The book includes chapters on frameworks related to .NET 5, such as Entity Framework Core and ML.NET. These chapters were included according to what the author thinks as essential capabilities necessary for a developer nowadays - which includes Machine Learning.
  • The author emphasizes that Blazor Server and Blazor WebAssembly both use the same component model. This means that if a programmer is careful about how they design their Blazor components, they can be shared between either hosting model. The book has a dedicated chapter discussing the available Blazor hosting models.
  • .NET 6, the next Long Term Support release for .NET, will be available in November 2021. Any existing .NET Framework projects should start being migrated today to .NET 5. Considering the necessary refactoring and adjustment time, this will allow companies to take advantage of the full three years of .NET 6 support from Microsoft.

原文(投稿日:2020/12/21)へのリンク

Mark Price氏の著書"C# 9 and .NET 5"は、.NETによるクロスプラットフォームアプリケーション開発の実践的なガイドです。簡潔かつ実装指向にまとめられた同書には、テーマ毎に実践的なウォークスルーが紹介されています。C# 9と.NET 5で開発可能な主要なアプリケーション形式がすべてカバーされた、.NETプログラミングの極めて包括的な開発ガイドです。

InfoQでは同書のレビューに合わせて、著者のMark Price氏に同書の目的と内容についてインタビューしました。

InfoQ: この本を書いた理由は何ですか?

Mark: 既存のC#書籍市場に欠けている部分を自分が補えるのではないか、と思ったからです。2015年の夏、Packt出版からC#書籍執筆の打診を受けた時、既存のC#書籍の多くについては、すでに詳しく知っていました。自分自身が読むために何年も購入していたからです。当時はMicrosoftでさえ、.NETの長期的な計画について確信を持っていませんでした。新たにスリムダウンしたバージョンを".NET Core"と名付けたことにも、それが現れています。将来それが人気を博して、最終的に.NETが現代的なクロスプラットフォームになる上での世代交代の役割を果たすとは考えていなかったのです。 

InfoQ: どのような読者層を対象にしているのですか?

Mark: 本書が対象とするのは、初心者から中間レベルのプログラマです。つまり、おもに2つの読者層を想定しています。 

ひとつは、C#と.NETの初心者です。他の言語を習得しているか、あるいは少なくともSTEM(Science、Technology、Engineering、Mathematics)のバックグラウンドがあれば、最高のエクスペリエンスを得ることができるでしょう。そうでなくても、好奇心や学習意欲を持っていれば、本書に従ってスキルや知識を身に付けることができるはずです。

もうひとつは、過去にC#や.NETで開発した経験はあるが、スキルが古かったり、いまだ.NET Frameworkに留まっていたりするために、最新のクロスプラットフォーム.NETにジャンプアップしたい人たちです。 

InfoQ: .NET 5は過去の.NETエコシステムをどのように変えたと思いますか?今からソフトウェア開発キャリアを始めようという場合、.NETをパスとして選ぶべき理由は増えているのでしょうか?

Mark: .NETの最新バージョンは.NET Core 3.1から始まっています。このバージョンは.NET Framework 4.8よりも明らかに優れているので、すべてのプログラマに自身を持って推奨できます。.NET Frameworkのリプレースは、この.NET Core 3.1から始まりました。LTS(Long Time Support)リリースであり、Microsoftが2022年12月までのサポートを約束しています。.NET 5は多くの領域でパフォーマンスが向上し、Blaz WebAssemblyなど新たなプラットフォームも追加されていますが、モバイルを含むすべてのプラットフォーム用の.NETプラットフォームという目標が達成されるのは.NET 6になります。 

InfoQ: 2章にはC#の進化が簡潔にまとめられていますが、C# 9で注目の機能は何だと思いますか?

Mark: ポテンシャル的に最高の機能はRecordですね。Recordがクールな新機能だと聞いて、実際には必要がないのにRecordを使用するプログラマが現れるのではないか、と思っています。Recordは変更不能(immutable)なオブジェクトを提供することによって、関数型プログラミングスタイルを可能にします。関数型プログラミングスタイルをもっと詳しく調査して、本書の次版ではコード例を追加したいと思っています。第5版ではRecordを使う方法"how"を紹介していますが、Recordを使用する理由"why"をもっと示したいのです。 

トップレベルプログラミングのようなC# 9の新機能も、ある種のシナリオや学習目的には有用かも知れません。私が最も気に入っていて、おそらく頻繁に使用するであろう新機能は、target-typed newによるオブジェクトのインスタンス化だと思います。プログラマが毎日何度も書くコードを単純化してくれるからです。

InfoQ: 本書ではC# 9以外の.NET 5の特徴、例えばパッケージングや標準についても取り上げていますが、C# 9を始めようとする人にとって、なぜ.NET Standardが必要なのでしょうか?

Mark: .NETプログラマには、新規アプリケーションのみを開発するという贅沢は許されません。つまり、すべてのコンポーネントに.NET 5を使用できるような、完全に新しいアプリケーションばかりではないのです。もっと古いバージョンを使用したプロジェクトの開発もできなくてはなりません。.NET 5を使ったフレッシュな新プロジェクトよりも、.NET Frameworkで記述されていて、メンテナンスの必要なプロジェクトの方がはるかに多いのです。ですから、古いプラットフォームでも動作するようなクラスライブラリを新たに開発する方法が重要になります。.NET Standard 2.0のコードは.NETの新旧バージョンいずれでも動作するだけでなく、Windows専用の.NET Framework、Xamarinを使ったモバイルアプリ、最新のクロスプラットフォームの.NET Core 2.0以降でも動作します。 

InfoQ: 11章ではEntity Framework Coreを使用したデータベースの操作方法が説明されていますが、あなたの意見として、NHibernateなどのオブジェクト-リレーショナルマッパ(あるいは同等のもの)に代えて使用することのメリットは何でしょうか?

Mark: 最も大きな理由は、もちろん、Microsoftがサポートしていることです。Entity Framework Core (EF Core)は、Microsoftの公式なORM(Object-Relation Mapper)なのです。デフォルトのORMとして多くのプロジェクトで採用されているので、実運用でのテストも多く行われていますし、問題点もより早くフィックスされます。習熟したプログラマの数も多いので、プロジェクトの人員採用も容易になります。ほとんどのテクノロジがそうであるように、メリットにはテクノロジの機能よりも人的要素の方が大きいのです。 

InfoQ: Blazorは、特に今年初めのBlazor WebAssembly 3.2のリリース以降、多くの注目を集めるようになっています。本書では、サーバとクライアントの両面からBlazorを取り上げていますが、その違いは何なのか、どのような場合にどちらを選べばよいのか、説明して頂けますか?

Mark: 最初に強調しておきたいのは、Blazor ServerとBlazor WebAssemblyはいずれも同じコンポーネントモデルを使っている、ということです。これはつまり、Blazorコンポーネントの設計時に注意しておけば、本書のBlazorに関する章で示したように、両方のホスティングモデルで共有することが可能である、という意味です。では、2つのホスティングモデルについて説明しましょう。 

ASP.NET Coreを使い慣れていれば、Blazor Serverで作業するのは難しいことではありません。コードが実行されるサーバ上にすべてのデータリソースがあるので、複雑な処理を行う必要がないからです。ただしBlazor Serverでは、ブラウザクライアントとサーバ間に永続的な接続が必要になります。これはサーバリソースを消費するため、クライアントの最大数、すなわちソリューションのスケーラビリティを制限します。 

これに対して、コードがブラウザ内で実行されるBlazor WebAssemblyでは、リソースがブラウザ内部のものに制限されるので、動作条件はより厳しいものになります。ユーザインターフェースの更新などに必要なデータは、サーバからフェッチしなければならないのですが、この処理には通常、認証やデシリアライズといった操作が必要になります。一方で、クライアントとサーバを切り離すことが可能になるため、ソリューションのスケーラビリティは向上します。また、いずれにしてもWebサービスは開発しなければならないので、その他のタイプのクライアント、例えばモバイルやデスクトップ、スマートスピーカなども使用できるようになります。 

InfoQ: .NET 5ではgRPCに関連する改善が多数提供されていて、.NET上でのサービスアプリケーション開発におけるWCF(Windows Communication Foundation)を事実上リプレースしています。gRPCは正確にはWCFとどのように違うのか、WCFに対するアドバンテージという面で.NETエコシステムに何をもたらすのか、説明して頂けますか?

Mark: MicrosoftのWCFは単純ながらパワフル、かつ拡張性に富んだテクノロジなので、最新の.NETで採用されなかったことは残念ですね。NFCにはABC — アドレス、バインディング、コントラクトで定義されたエンドポイントという概念があります。コントラクトはC#のインターフェースを使って機能を定義するもので、そのため実装からは切り離されています。セットアップはおもにコンフィギュレーションファイルで行われるため、アプリを再コンパイルしなくても変更が可能です。さらにMSMQやSOAPやRESTといった、複数の一般的な通信テクノロジを強力にサポートしています。将来的なテクノロジに対処できる設計でしたので、MicrosoftがWCFを最新の.NETに実装せず、単にgRPCを追加したのは残念なことだと思っています。WCFはその名が示すように、.NET Framework内にのみ実装されたWindows専用のテクノロジです。

gRPCはGoogleが定義したテクノロジで、あらゆるプログラミング言語をサポートしますが、RPC(Remote Procedure Call)スタイルのインタラクションのみをサポートするという点で、WCFよりも限定的です。gRPCはメッセージ送信にProtocol Buffers (protobuf) バイナリフォーマットを使用します。本書にはgRPCのコードサンプルはありませんが、読者の関心が高いようであれば、第6版には含めるかも知れません。 

InfoQ: 21章では、クロスプラットフォームなモバイルアプリの開発について述べられていますが、このような開発をサポートする上で、.NET 5フレームワークにはどのような機能が用意されているのでしょうか?

Mark: .NET 5では、モバイルアプリはサポートされていません。.NET 6まで待つことになります。21章では、.NETのモバイル版であるXamarinが必要です。

InfoQ: .NET 5の一部ではありませんが、あなたの本では、.NETエコシステム用のマシンラーニングフレームワークであるML.NETを取り上げていますね。このフレームワークを含めることにした理由を教えてください。非常に特殊なフレームワークではないかと思うのですが、.NET開発を始めたばかりでも使うことができるのでしょうか?

Mark: Entity Framework Coreも.NET 5には含まれていませんが、本書では1章を使って取り上げています。どの開発者プラットフォームであっても、データベースの操作は重要な機能だからです。マシンラーニングは短い間に、データベース操作と同じくらい重要なものになりつつあります。そのために第4版から、MicrosoftのML.NETマシンラーニングライブラリの使用方法を示した章を加えました。ただし、本書でも述べているように、アプリケーションにインテリジェンスを加えるのは容易ではありません。マシンラーニングを100パーセント取り扱った本を買って、第1章で諦めてしまったプログラマがたくさんいるのではないでしょうか。そこで、マシンラーニングの専門書を買って失望することのないように、本書の一部としてマシンラーニングの章を書いたのです。ここでは、コマースWebサイトに製品のレコメンデーションを加えるためのインテリジェンス導入という、ひとつの完全な実践例を取り上げています。 

.NET開発を学び始めたばかりのプログラマにとっては、マシンラーニングの章が非常に高度なものであることは確かですが、この章を含めておくことで、マシンラーニングが今の自分にとってチャレンジしたい領域であるのか、あるいはもっと経験を積むか、プラットフォームが非専門家でも簡単に使用できるようになるまで待つのかを、プログラマ自身が判断することができるのです。 

InfoQ: 2021年の.NETエコシステムには、どのようなことが期待できるのでしょうか?

Mark: Microsoftは2021年9月9日(火)に.NET 6.0をリリースする予定です。.NET 5のすべてのプロジェクトタイプに加えて、.NET 6では、.NET MAUI (Multi-platform Application User Interface) を使用したモバイルアプリ開発がサポートされます。.NET MAUIは事実上Xamarin.Forms 6なので、現時点でXamarin.Forms 5を使ったプロジェクト開発を始めておけば、.NET 6がリリースされた時には、簡単な修正で.NET MAUIにアップグレードできるはずです。

Microsoftは2021年を通じて.NET 6プレビューを毎月リリースする予定ですが、9月と10月にはRC(Release Candidate)がGo Liveライセンスでリリースされます。.NET MAUIのプレビューはそれよりも少なく、現在のEF Coreのように別パッケージになる予定です。 

EF Core 6には便利な新機能がいくつか含まれていますが、これらの機能に関してMicrosoftでは、公式にフィードバックを募集しています

C# 10には、使用頻度のあまり高くない機能や、さらに関数型のプログラミングスタイルを可能にするような改良が含まれる予定です。

.NET 6はLTS(Long Term Support)リリースなので、企業の重要なプロジェクトのターゲットになるでしょう。ほとんどの.NET 5プロジェクトは、プロジェクトファイルを変更することで簡単に.NET 6にアップグレードできますから、.NET 5を使って今からプロジェクトに着手しておいて、後で.NET 6をターゲットにするように"スイッチを切り替え"れば、Microsoftによる3年間のサポートが受けられます。同じ理由から、既存の.NET Frameworkプロジェクトも、.NET 5へのマイグレーションを始めた方がよいでしょう。変更の必要な部分のリファクタや書き直しに、1年を要する場合もあるからです。 

著者について

Mark J. Price氏は、C#によるプログラミングとMicrosoft Azure Solutionのアーキテクチャ設計を専門とするMicrosoft Specialistで、20年以上の教育とプログラミングの経験を持っています。

 

この記事に星をつける

おすすめ度
スタイル

こんにちは

コメントするには InfoQアカウントの登録 または が必要です。InfoQ に登録するとさまざまなことができます。

アカウント登録をしてInfoQをお楽しみください。

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

コミュニティコメント

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

BT