開発が大きく変わる.NET5。その概要と移行方法をご紹介。

「特に変えずに、今のフレームワークのままでも大丈夫」とか「移行も大したことないでしょ」と思っているあなた。要注意です。.NET 5での変更は、チームに大きく影響する可能性が高いからです。

この記事では、.NET 5での変更点や直前になってドタバタせずに済むスムーズな移行方法をご紹介します。

.NET 5 の概要と大きく変わる点

.NET は、Microsoftからリリースされているソフトウェアのフレームワークと開発環境です。このフレームワークが非常にわかりにくいのは、色々な種類があり紛らわしいことと、各シリーズのナンバリングが飛び飛びで、順番に1、2、3…と並んでリリースされていないことです (下記図参照)。

.NET 5 は、元々 .NET Core と呼ばれていた系列の流れの上にあります。これは古いフレームワークを一新したもので、実際のところ、2016年に .NET Core がリリースされてからの初の大型アップデートが .NET 5 となります。また、.NET と .NET Core は並立して使用できるため、開発に合わせて好きな方を選んだり、.NET Standard を活用してライブラリを共有したりできます。

しかし、.NET Framework は .NET 5 のリリース後に廃止されるため、これに対するサポートも OS のサポートが切れると同時に打ち切られてしまいます。つまり、OS のサポートが短くなると当然フレームワークのサポートも短くなるということです。「サポートが続いている間はこれを使い続けよう」と思っていても、そのサイクルが短くなるため、今までのように使い続けるのが難しくなってきます。

.Net は、「新しくリリースされたフレームワークのほうが、古いフレームワークより早くサポートが終わる。」という、変なサポートがあるので、注意が必要です。詳細は、今すぐ移行しなきゃだめ?.NET の長期サポート (LTS) について徹底解説 – DevOpsツールと導入支援をご覧ください。

.NET Core から .NET 5 の移行は .NET Framework から .NET 5 へ移行するよりは簡単です。しかし、それでも注意すべきポイントがあるので、ここで解説いたします。さらに、新しく追加された便利な機能もご紹介します。

.NET 5の特徴: 独立性、堅牢性、クロスプラットフォーム性

Microsoft の公式ブログでは、.NET 5 の特徴として次の5つを挙げています。

  • 並列インストール
    • 既存のアプリケーションに影響を与えることなく、新しいバージョンをインストールできます。
  • アプリケーション内に .NET 5 を同梱することが可能
    • ビルトインできるので、アプリケーションをインストールする時にユーザーがわざわざ個別に .NET 5 をインストールする必要がない。
  • Windows OS のコンポーネントの一部ではない
    • .NET の新しいリリースは OS から独立して行われる
    • (Inedo 注:つまり、アップデートや廃止事項は OS とは関係なくリリースされます。)。
  • その他機能など

また、Microsoft は、.NET 5 を「.NET 5 Core をオープンソースにして、クロスプラットフォームにした」とも語っています。

.NET 5 は、リスクの低減、開発の効率化、さらには市場シェアの拡大を支援することを目的としています。しかし、これを実現するには事前準備が少し必要となります。

.NET 5 への移行に伴い気をつけるべきこと:  変更点と廃止事項

.NET 5 への移行は開発環境に大きな影響を与えることから、今までのアップデートみたいに「現場の開発者に丸投げ……」できません。

.NET 5 以降の大きな変更点は、Microsoft から毎年11月にメジャーアップデートがリリースされることです。そして、アップデート時にバージョンを表す番号が偶数で変化しています (今回は5ですが、次から6、8…となっていきます)。そのため、以後のメンテナンスの一環として、自分のコードを定期的にアップデートする必要があります。

そして、一部の重要な .NET Framework はすでに廃止が予定されているため、.利用したアプリケーションは計画的に新しいバージョンへの移行を進める必要があります。

ASP.NET Web フォーム

影響ウェブアプリケーション
代わりとなるもの✘ 代わりとなるものはなし
Microsoft は ASP.NET MVC かその他のフレームワークの利用をおすすめしています。
問題⚠️一からの書き直しが必要
ASP.NET Web フォームから ASP.NET Core MVC へ移行するには、アプリケーションを一から書き直す必要があります。   Web フォームの詳細は、「Web フォーム、そのままで大丈夫?ついに来た .NET 5+ 時代に備えるべきこととは? 」をご覧ください。

Windows Communication Foundation (WCF)

影響ネットワークに接続するアプリケーション
サービス指向のアーキテクチャ/API を使用し、サービスエンドポイントが存在するネットワークを介して他のアプリケーションまたはサービスに接続するアプリケーションは、WCF を用いてビルドされます。
代わりとなるもの✘公式から提供される代替物はなし
.NET Framework 4.5以降、Microsoft は WCF の後継として構築された ASP.NET Core Web API の使用を推奨しています。⚠ コミュニティ/オープンソースから代替物が提供
オープンソースコミュニティでは、GitHub上で CoreWCF の作成を開始しています。これで完全な実装は行えませんが、移行の1つの選択肢にはなります。
問題⚠️一から書き直すか、コミュニティを頼る必要あり
ASP.NET Core Web API に変換するには、APIを最初から書き直すか、コードを CoreWCF に移植する必要があります。これを行うと、必要となる機能が失われる可能性があります。

WCF の詳細は、「サポート終了?Windows Communication Framework (WCF) の今後について徹底解説」をご覧ください。

Windows Workflow Foundation (WF)

影響ワークフローのあるアプリケーション
ワークフローライブラリを使用するアプリケーションやサービス (ビルドや実行ワークフロー周辺のツール)。
代わりとなるもの✘公式から提供される代替物はなし
Microsoft から推奨されている特定のワークフローライブラリはありません。そのため、ワークフローのプロセスに Microsoft 以外のものを選択するか、独自のワークフローライブラリをビルドする必要があります。⚠ コミュニティ/オープンソースから代替物が提供
オープンソースコミュニティも CoreWF を作成しています。現時点では完全な実装はできませんが、完全に互換するものの完成を目指しています。
問題⚠️一から書き直すか、コミュニティを頼る必要あり
サードパーティの既製ライブラリを探し、内容を把握して、それと同等のものを書くか、コードを CoreWCF に移植する必要があります。これを行うと、必要となる機能が失われる可能性があります。

.NET Standard

.NET Standard とは仕様のことです。この仕様に従って作成することで、.NET 5 以前 (.NET Framework、.NET Core、Mono 等) の全ての .NET 実装と互換性を持たせることができますが、.NET 6 で廃止予定です。

.NET 5 移行に伴う Q&A

.NET 5 移行について、よくある質問とその回答についてまとめました。

絶対に .NET 5 へ移行しないといけない?

Microsoft は 2020年11月からフレームワークの廃止を開始することから、必ず移行する必要があります。フレームワークは、OS の機能の一部として OS がサポートされている間はそれもサポートされます。例えば、 Windows Server 2019 を使用している場合、その OS でサポートされているフレームワークは Windows Server 201のサポートが終了すると同時に、そのフレームワークのサポートも終了します。その次の OS で同じフレームワークがインストールできるとは限りません。仮にできたとしても、本来すべきでない方法で無理やり動かすことになるでしょう。可能性があります。

.NET 5 は .NET Core (Microsoft が説明するように「.NET Core 番号」となります) 系列であるため、NET Core から .NET 5 への移行の場合は比較的簡単です。とはいえ、Microsoft は2022年12月頃に最新リリース版である .NET Core (3.1.7) の長期サポートを終了するため、遅かれ早かれ移行の計画を立てる必要があります。

.NET 5 の移行にかかるコストは?

アップデートは無料なのでお金はかかりませんが、多大な時間、労力、人手を要します。どのぐらいのコストがかかるかは、チームが使用しているアプリケーションの .NET のバージョンによって大きく異なります。

現時点では、.NET 5 への移行に関する Microsoft 公式のコンサルティングやサポートはありませんが、もしかすると、主要な企業が移行を開始し始めた段階で案内が出るかもしれません。

.NET 5 を使用したアプリケーションと .NET Framework を使用したアプリケーションのデプロイ方法の違いは?

ウェブアプリケーション以外は、実質的に同じです。現在の .NET 5 実装は (ISS 使用時は) IIS にモジュールをインストールする必要があります。しかし将来的には、この依存関係が Microsoft によって見直されることが予想されます。 ただし、現時点では Microsoft から IIS に関する発表やアナウンスは何も出されていません。

日常的なパイプラインに対する変更はほとんどありませんが、ビルド (継続的インテグレーション) は変更する必要があります。ほとんどの.NET Framework のコードは、MSBuild と呼ばれるコマンドラインツール (CLI) を使用してコンパイルされます。.NET 5では MSBuild ではなく .NET CLI を使用しますが、すべての MSBuild の機能が.NET CLI に引き継がれるとは限らないため、その点異なってきます。また、基本的な機能を変えていないものの、MSBuild の多くの部分をカスタマイズしている場合、問題が発生する可能性があります。

スタッフのトレーニングにはどのくらい手間がかかる?

チームによって大きく異なります。例えば、チームが Windows Workflow Foundation (WF) を使用している場合、新しいワークフローライブラリに慣れてもらうのに非常に多くの手間と時間がかかります。一方、チームが Web API とやり取りを行う WCF を使用している場合、Web API を完全に理解するのに大抵そこまで時間はかかりません。そして、ASP.NET MVC を使用している場合は、ASP.NET Web フォームを使用している場合よりも更に短く済みます。

.NET 5 は (.NET Core と同じく) C# で書かれているものの、今までとは違う新しいシステムです。そのため、スタッフが新しいフレームワークを学習するのにどのくらい時間を要するのか、開発者とよく相談しておく必要があります。開発者は、大抵現在使用している機能がどんなもので、新しいものはどう違うのか理解しているので、すべきこととその時間の見積もりをより正確に出せるようになります。

移行って難しい?

繰り返しになりますが、個々のケースにより千差万別です。例えば、「.NET 5 のリリースで移行を行わない機能やツールに依存するアプリケーションがいくつあるのか」や「.NET Framework または .NET Core のどのバージョンのアプリケーションが実行されているのか」などが関係してきます。もしすべてのアプリケーションが .NET Framework で実行されている場合、移行はかなり大がかりな作業となります。.NET Core 3.x を使用している場合も移行に要する時間は長くなりますが、.NET 5 が .NET Core の次のバージョンであることから、比較的作業は楽でしょう。

サーバに関しては、.NET 5 はサポートされているすべてのバージョンの Windows で動作します。つまり、バージョンのサポートが終了 (EOL: End Of Sales) するまでは Windows Server を更新する必要はありません。サーバ OS の EOL に近づいたら (OS によって異なりますので、自分が使用しているもののスケジュールをご確認ください)、アプリケーションとその依存関係を確認した上で、移行方法やそのスケジュールを計画してください。

移行の準備はいつやるか?今でしょ!

.NET 5 の記事を読み、内容を理解してモチベーションも高くなった今この瞬間が、移行準備を開始するベストなタイミングです。

いずれにしても最終的には .NET 5 へ更新することになるので、「時期尚早」ということはありません。幸いにも .NET Framework と .NET Core が完全に廃止となるまで多少時間はありますが、今やらないと後々「あー、移行しなきゃなぁ……でも面倒くさいなぁ……」と罪悪感を抱えながらどんどん先延ばしになります。そして、タイムリミットが近づけば近づくほどより面倒になっていきます。今から少しずつでも進めていけば、最小限の手間で移行が可能ですので、是非検討しましょう。

移行には、下記の手順を参考にしてください。

手順 1.現在使用しているアプリケーションの棚卸し

まず、使用しているアプリケーションの状況を確認しましょう。.NET Framework と .NET Core を実行しているはどれなのか、そして実行している場合はどのバージョンを使用しているのか……などです。これらの情報は、大抵の場合開発者が把握しているので、彼らに聞くと早いでしょう。

手順 2.廃止となるコンポーネントを確認する

アプリケーションが使用している主要なライブラリで、どれが廃止となるかを確認します。もし開発者が知らない場合でも、コードを少し調べれば、すぐにわかるはずです。

手順 3.利害関係者と一緒に優先順位を決める

移行に関して、技術的な難易度やコストがどのくらいかかるかを一番よく知っているのは開発者です。そして、「.NET 5 で廃止されるコンテンツを .NET 5 用に書き直す」という選択肢も当然考えられます。しかし、他の利害関係者が、アプリケーション全体のビジネス上の戦略として「書き直さない方が良い (つまり、書き直すためにかかるコストを他に回す)」という選択を取る場合もあります。そうしたことから、利害関係者とはよく話し合って優先順位を決めるようにしましょう。

手順 4.大まかな移行スケジュールを決める

.NET 5 は2020年11月10日にリリースされますが、それに間に合うように急いでアプリケーションを移行する必要はありません。.NET Core と .NET Framework のサポート終了まで、まだ後数年時間があります。従って、現時点では移行の大まかなスケジュールを立てることをおすすめします。それにより、落ち着いて移行を進めたり、中長期的なコストやリスクへの理解を深めながら作業を進められます。

手順 5.定期的にアップデートして、日々の作業を楽にする

.NET 5 への移行は、定期的なアップデートがいかに重要かを教えてくれます。アップデートをほとんど行わない場合、アップデートの度に気が重くなったり、作業が面倒になったりします。しかし、頻繁にリリースを行ってどんどん自動化していくことで、アップデートがより楽になり、開発もより柔軟になっていきます。

移行手順の詳細は、こちらをご覧ください。「もう迷わない。NuGet を .NET 5 へ移行する方法を徹底解説