第6回:Hello! .NET 5

ソフトウェアアーキテクト四方山話

みなさんこんにちは。システムエグゼの相田です。

前回の記事は技術的ヨコモジだらけだったので、今回は日本語比率を上げてみようと思ったのですが、技術の領域で少々早めに触れておいた方が良い話題が出てきました。なので、急遽予定を変更して今回もヨコモジだらけの回です。

第六回目は Microsoft のソフトウェア開発プラットフォーム「.NET」のお話です。

「.NET」と言われて、恐らく多くの方が Windows OS 向けの「.NET Framework」を思い浮かべるでしょう。しかし 2019年現在、実は「.NET Framework」は「.NET」のごく一部でしかなく、また「.NET」の中心的存在でも無いのです。そして今年、Microsoft から .NET 世界を大きく揺るがす大ニュースが発表されました。

それが今回の主役「.NET 5」です。

三種類の「.NET」

2019年現在、実は「.NET」は三種類存在します。

一つが皆さんご存知の「.NET Framework」です。Windows OS 向けであり、最も歴史 が長いプラットフォームです。

もう一つが、元々 Linux 用だった「Mono」と、色々あって(※)モバイル向けのプラットフォームと統合された「Xamarin/Mono」です。
(※ 凄く色々ありました)
これは元々 Microsoft 以外のコミュニティや企業が主体となって進められていたのですが、現在は Xamarin 社が Microsoft に買収され、事実上 Microsoft 傘下のプロジェクトとなっています。

そしてもう一つが「.NET Framework」が Microsoft 主導でオープンソース(OSS)化された「.NET Core」です。.NET をクロスプラットフォーム向けに拡張したもので、Windows OS、macOS、Linuxで動作する OSS 版「.NET」です。

実は現在ではこの .NET Core が「.NET」の中心であり、最も活発に開発が進められているプラットフォームです。この記事を書いている時点で最新版が .NET Core 3.0 で、もしかするとこの記事の公開が遅れれば(※)LTS 版の .NET Core 3.1 がリリースされているかもしれません。
(※ 2019年11月リリース予定です)

と、このような状況下で、以前より Microsoft が計画していると噂になっていたのが次世代「.NET」である「.NET Core vNext」です。

.NET Core vNext ─ この名前が既に「次世代は .NET Core ベースとなる」と予告しているようなものですね。そしてついに、.NET Core vNext の詳細が発表されました。2020年 11月に公開予定のその名も「.NET 5」です。

「.NET Framework」は現在の 4.8 で終了となる

「.NET Framework」の最新版はバージョン 4.8 です。

なるほど「.NET 5」とはこの次のバージョン・・・と考えそうになりますが、そうではないのです。ここが大きなポイントです。というのも、今回公式に発表された .NET Core vNext の基本方針とは、

 「.NET Core 3 をベースに次世代 .NET を開発し、他の2つの『.NET』も統合する」

なのです。つまり「.NET」はついに一つに統合される事になりました。これ自体は良い事です。大変分かりやすい。

しかしながら .NET Framework と .NET Core は、内部的には全く異なるものです。.NET Framework はこれまで「Windows OS ありき」で開発されて来たもので、その実装は Windows OS 自体が持つコンポーネントに大きく依存しています。

例えば、ASP.NET は Windows に付属した IIS が無いと動作しません。昔ながらの Windows Forms に至っては、そもそも「Windows OS 向けのネイティブアプリケーションを開発するための」フレームワークです。当然ですが Windows OS以外では動作しません。

そこで今回明らかになったもう一つの方針が、

 「クロスプラットフォーム化するのが難しいレガシー技術は捨てる」

なのです。いつかはこんな日が来るとは思っていましたが、これはつまり「.NET Framework」の終了宣言に他なりません。

「.NET Framework」の最終バージョンは 4.8 であり、既に .NET Core に移植済みのものはそちらで代替する事になります。そして未移植のものの一部は新たに .NET Core プロジェクトに預けられ、移植が難しいものは廃止されます。

長い間お疲れさまでした .NET Framework!

・・・と簡単に言えない現場も多いと思われます。

生き残った技術/廃止される技術

一昔前と比べ、社内システムがWindows Server ベースで構築される事例はかなり増えたと思います。そしてその現場の多くで .NET Framework ベースのソフトウェア開発が行われていると思われます。その初期には「元祖 ASP.NET」である「ASP.NET Web Forms」で多くの Webアプリケーションが開発されました。

また、かつての Visual Basic 6.0(以前)で開発された C/S システムが .NET に「マイグレーション」された、Windows Forms アプリケーションも多く稼働しています。

この2つは Microsoft の統合開発環境である Visual Studio に付属したビジュアルレイアウトエディタにより「見た目を直観的に確認しながら」画面が開発出来るので、非常に人気のあったフレームワークです。これら初期から存在するフレームワークは、Windows OS への依存度が特に高いフレームワークでもあります。そして、後述しますが「.NET Framework」は大変「塩漬け」されやすいプラットフォームなので、未だ稼働しているアプリケーションが多く存在しています。

さて、.NET 5 への「統合」に当たり、この2つがどうなるかと言うと・・・

 ■ASP.NET Web Forms → .NET 5 には移植されず、廃止される事が発表されました

 ■Windows Forms → 例外的に「Windows OS 専用」のまま .NET 5 に統合される事が発表されました

と、明暗が別れてしまいました。この方針は既に現在最新の .NET Core 3 に反映されており、Windows Forms は「.NET Core Windows Forms」となり、ASP.NET Web Forms に関しては「ASP.NET Core MVC」或いは「Blazor」への移行が案内されています。

・・・恐らくですが。ASP.NET Web Forms の廃止で困るお客様が結構多いのではないかと予想しています。

というのも・・・

現在の「.NET Framework」のサポート期間は?

・・・というのも、.NET Framework は大変「塩漬け」されやすいプラットフォームだからです。製品としての .NET Framework は Widows OS の一部として提供されており、OS のサポートが継続されている限り、.NET Framework のサポートも継続されます。

例えば今現在レガシー目前の Windows Server 2012 R2 でも、延長サポートの終了日は 2023/10/10 です。あと三年近く使えます。そしてその三年間、付属している.NET Framework(の、最新版)のサポートは継続されます。

サポートされちゃうんですよね、これが・・・

ここで言う「サポート」とは、.NET Framework 及び実行環境(CLR)に対するセキュリティパッチの提供です。つまり「対象バージョンの .NET Frameworkアプリケーションを動かし続ける事が出来る」わけです。こうなると、既存の .NET Framework アプリケーションを作り直すよりも、ついつい延命・塩漬けを選択しがちになるのも仕方ありません。

ただし、サポートされるのはあくまでも「アプリケーションの動作」であって、あまりにも長期塩漬けしてしまうと、色々な問題が出てきます。

代表的な問題が、

 ① 対象バージョンの開発環境(Visual Studio)が調達出来なくなってしまう。

 ② 次回のシステム更改時のコストが増大する。

 ③ 担当する IT エンジニアのスキルセットがレガシー化してしまう。

① はディストリビューターで在庫を探せばなんとかなる場合もありますが、動作保証が無い PC 上で動かす事態になりかねません。

② は社内各システムのライフサイクル管理をしっかりして、次回更改時の予算をきちんと経営に提示し計画しておく必要があります。(しっかり計算すると早めに更改した方が安かった、という事も多いですが・・・)

大きな問題になるのが ③ で、もしも自社の社員が担当して内製している場合、その方のスキルセットやキャリアパスに直接影響してしまいます。また、システムを長期間塩漬けにしてしまうと往々にしてドキュメント整備が疎かになるものです。システム更改を弊社のような外部の SI ベンダーに依頼するにしても、レガシー技術にも精通した人材(※)確保が難しかったり、ドキュメント不足が原因で現行解析といった作業が必要となり、更改コストが増してしまいます。
(※ 大抵年配者なので割高です。この点ご容赦ください・・・)

実行環境に対するサポート期間と「ソフトウェアの(事実上の)寿命」は異なりますので、適切なタイミングでバージョンアップ対応やマイグレーションを計画すべきでしょう。少なくとも、新規開発の際には最新のプラットフォームを選択すべきでしょう。

.NET Core/.NET 5 のサポート期間は・・・え? .NET 6 待ち?

もちろん「.NET 5」の登場により大きく改善される点も多々あります。

何よりもクロスプラットフォーム化されるのが大きいですね。.NET Core/.NET 5 で開発すれば Linux 系サーバでも動作しますので、実行環境の選択肢が増えます。かつ、サーバ OS の移行にも柔軟に対応出来るという事です。

また、歴史が長い分 .NET Framework には非常に多種類のフレームワークが含まれていました。利用者が少なく既に使用が非推奨になっているのに、後方互換性の維持のために残されているもの(※)も含めるとあまりにも数が多すぎました。
(※ ASP.NET Web Forms は正にこの例です)
これらが .NET Core/.NET 5 化にあたりかなり整理されたので、要素技術の選択が非常にシンプルになりました。

これはもう .NET Core/.NET 5 を採用するしかないですね!!

・・・と、言いたい所なのですが、エンタープライズ(企業内システム)向け開発の場合、極めて大きな変更点が一つあります。それが「.NET Core/.NET 5 のサポート期間」です。

実は .NET Core/.NET 5 は OSS であるため、他の OSS と同じように「長期サポート」に関する課題が発生してしまいました。具体的には、.NET Core/.NET 5 では、特定のバージョンに対してしか長期サポート(LTS)が提供されません。

これはどういう事かと言うと、例えば「.NET Core 3」の場合、.NET Core 3.0 にはLTS が提供されません。LTS が提供されるのは .NET Core 3.1 です。

また、.NET 5 に関しては(現時点での発表では)毎年 11月にメジャーバージョンがリリースされ、偶数バージョンが LTS とされています。つまり、.NET 5 には LTS が無く、LTS が必要な場合は 2021年 11月に公開予定の「.NET 6」を待たなければならない、という事です(※)。
(※ 本稿を書いている時点の情報です。今後方針が変更され .NET 5 に対してLTS が提供される可能性もあります)

しかもここで言う「長期サポート」は「リリース後3年」です。非常に短く感じるかもしれませんが、OSS としてはむしろ長い(※)サポート期間でしょう。これが「普通」なのです。
(※ JavaScript 系のフレームワークだと長くて一年半とかなので・・・)

最近同じような話題を記事にしたような気がします。

そう、本連載の第一回で触れた、Java/Oracle JDK が OSS 化されて OpenJDK になったのと全く同じ話なのです。と、言う事はですよ。推測ですが・・・

今後、.NET Core/.NET 5 を独自にビルドして提供する「.NET ビルドファーム」が登場し、「.NET ディストリビューション」が出現するかもしれません。

実際問題として Red Hat は RHEL に独自の .NET Core ビルドを載せていましたし。大手クラウドベンダーなんかも自社クラウド環境向けにディストリビューションの提供を始めるかもしれません。

そうなれば、もっと長期間の LTS がついた .NET Core/.NET 5 を利用出来るようになるかもしれません。そうなると良いですね・・・




というわけで。

大きなニュースがあったので、今回は予定を変更して技術のお話をお送りしました。

.NET 5 についてはまだまだ未確定事項も多く、情報も少ないため今回はこのくらいでご容赦いただきたいと思います。弊社では、今後も継続的に次世代 .NET に関する情報を追って、随時お客様に情報提供出来るよう準備して参ります。

それでは、また第七回(あれば)でお会いしましょう。