先日11月14日に正式に .NET8 がMicrosoftからリリースされました。
.NET8についての解説は別にして、そのサポート期間と、.NETを使用したシステムやソフトウェアのライフサイクルなどについて、考えてみたいと思います。
(これまで常体を使用してきましたが、しばらく敬体を使用することにします)
.NET8 公式サイト
タウンロード
.NET8アプリの開発者はSDKをダウンロードします。
.NET8アプリを使用するだけのユーザーはRuntime(ランタイム)をダウンロードします。
Runtime(ランタイム)は、デスクトップランタイムと、通常のランタイムがあります。
画面を伴うアプリを使用する場合は、デスクトップランタイムをダウンロードします。
コンソールだけのアプリを使用する場合は、通常のランタイムをダウンロードします。
通常のWindowsパソコンの場合は、x64 をダウンロードします。
タウンロードした .exe ファイルを起動してインストールします。
新機能の紹介
後で解説しますが .NET6 を使用していたシステムやソフトウェアは、.NET8に載せ替える事になります。
その時、.NET8の新機能を意識してマイグレーションを行う事になります。
.NET8は.NET7の新機能を含みますので、.NET6からの移行ならば、.NET7と.NET8の新機能を意識する必要があります。
上記の公式ページで概要が紹介されています。
サポートポリシー
サポート期間やリリース期間のルール、サポートの終了したバージョンなどが解説されています。
.NET8 LTS のサポート期間
サポート期間は、公式のサポートポリシーに書いていますが、ここで簡単に解説しておきます。
.NET6以降のバージョンは、.NET Coreの後継で、全て同じルールでリリースされる事になっています。
バージョン番号が奇数(5,7)の物は、新技術のテスト用の最新版バージョンとも呼べる物で、まだ実験的側面のある新しい機能をいち早く導入したバージョンです。
バージョン番号が偶数(6,8)の物は、先行リリースされた奇数バージョンの運用経験を反映した安定化バージョンとも呼べるもので、ビジネスで使用するのは、こちらの偶数バージョンとなります。
奇数バージョンは、「標準期間サポート」と呼びます。英語ではSTS(Standard Term Support)です。以前は「現行リリース(Current)」と呼んでいました。
偶数バージョンは、「長期的サポート」と呼び、英語では LTS(Long Term Support)です。
STSのサポート期間は、1年半(18ヶ月)で、リリース期間は1年サイクルです。
LTSのサポート期間は、3年で、リリース期間は2年サイクルです。
.NET5 STSは2020年11月からリリースされ、2022年5月にサポート終了しました。
.NET6 LTS は2021年11月からリリースされ、2024年11月にサポート終了の予定です。
.NET7 STSは2022年11月からリリースされ、2024年5月にサポート終了の予定です。
.NET8 LTS は2023年11月からリリースされ、2026年11月にサポート終了の予定です。
STSがリリースされてから、1年後にLTSがリリースされます。
STSは1年半、LTSは3年サポートされます。
その1年後に次のSTSがリリースされ、さらにその1年後にLTSがリリースされます。
STSの後LTSがリリースされてから、半年間だけSTSとLTSのサポート期間の重複があります。
LTSから次のLTSがリリースされてから、1年間だけLTSとLTSのサポート期間の重複期間があります。
このライフサイクルはMicrosoftが方針変更をしない限り、今後のリリースでも同様です。
仮に、今後のバージョンのリリースを予測すると、以下のようになります。
.NET9 STSは2024年11月からリリースされ、2025年5月にサポート終了。
.NET10 LTS は2025年11月からリリースされ、2028年11月にサポート終了。
.NET11 STSは2026年11月からリリースされ、2027年5月にサポート終了。
.NET12 LTS は2027年11月からリリースされ、2030年11月にサポート終了。
(これは私による仮の予測であり、公式発表ではありません)
現行のバージョンのサポート期間と合わせて図で表したものが、以下の図になります。
システムやソフトウェアの開発ライフサイクルを考えるとき、上記の.NETバージョンごとのライフサイクルに合わせて、マイグレーションなどの計画を立てる必要があります。
システムのライフサイクル
抜本的なシステムの作り替えを行うのでは無く、基本的なシステム構成は変更する事無く、外部環境の変化への対応だけをやりながら、システムを運用し続ける場合、LTSがリリースされる度に、土台である.NETの載せ替え作業が必要になります。
.NETのリリースサイクルは、初めから分かっているので、システム載せ替えサイクルも、
初めから.NETのリリースサイクルに合わせて計画しておく必要があります。
.NET Framework (4.8以前)の頃は、あまりシステムのライフサイクルの事を考える必要は無く、予算や外部環境の変化のタイミングで、ランダムにマイグレーションする事ができていました。
しかし、.NET6以降に対応したシステムの場合は、アジァイル開発にも似た、固定期間の反復開発とシステムリリースが必要になります。
固定期間はLTSのリリース期間である2年です。
LTSのサポート期間は、新旧で1年の重複期間があるので、システムリリースの遅れが1年だけ許容できます。
また、LTSがリリースされる1年前に、ほぼ同機能のSTSがリリースされるので、STSで1年先行してシステム開発に着手する事もできます。
つまり、前後1年だけユーザーの都合に合わせる余白期間があるわけです。
この余白期間の2年の間にシステム・マイグレーションをすることになります。
また、LTSのリリース直前にRC1とRC2がリリースされますから、そちらでリリース前にテストを実施する事ができます。
.NET8の場合、正式リリースは11月14日で、RC1は9月12日リリース、RC2は10月10日にリリースされました。
LTSリリースの2が月前にはRC版でテストする事ができます。
システム固有の機能の改修と、.NET基盤のアップデート対応改修とを、完全に別々にそれぞれ独立して進めることも不可能ではないですが、無駄に管理とテストデバッグのコストが跳ね上がるだけなので、止めた方が良いでしょう。
両者の改修リリースを同時に行う事で、テストデバッグを一度に実施できた方が時間とコストの節約になります。
それに、結合テストは全部結合して実施した方が良いです。全部結合すると思わぬバグが見つかるものです。
システム・ライフサイクルの例
以下の図でシステム・ライフサイクルを考えてみましょう。
「マイグレーションに使える期間」は2年ごとに連続して訪れます。
マイグレーションに使用できる期間を最大の2年計画した場合、新システムの開発に着手するタイミングは、.NET新STSがリリースされたタイミングになります。
通常は .NET新STSには .NET新LTSに導入される予定の新機能が導入されています。
10ヶ月後には .NET新LTS のRC1版がリリースされますので、こちらでテストが可能になります。
.NET新STS リリースから1年後に .NET新LTS がリリースされ、これを使用して最終テストを実施します。
.NET新LTS がリリースされて1年後に、.NET旧LTS のサポートが終了してしまうので、この日までにシステム・マイグレーションを終了しなければなりません。
また、.NET旧LTS のサポートが終了日の直後に、新しい.NET STS がリリースされますので、この日から次のマイグレーション作業に入る事が可能になります。
このように最新の .NET 基盤は、.NET Framework と異なり、古い基盤を3年で廃止ししてしまいますので、システムの開発チームは、SIerがよくやるような「システム開発の期間だけ多数のITエンジニアを集めて、終わったら解散する」というスタイルの体制には、合わないライフサイクルになっています。
システムのライフサイクルは2年ごとに繰り返す事になりますから、ITエンジニアは継続的に確保しておく必要があります。
従来のように大規模なシステムを大人数で一気に開発して、終わったら少人数で保守運用するスタイルにも合わないと思います。
少なくとも2年周期の反復開発で、少しずつシステム(アプリ)が成長していく計画と体制でなければ、体制を維持するのが難しいでしょう。
システムの開発体制自体を、見直す必要があると思います。
以上、.NET8のリリースと、ライフサイクルの解説でした。
関連内部記事
以前、.NET6のリリースのとき、関連する解説をしているので、参考までに以下にリンクを張っておきます。
.NETのバージョンごとのサポート期間について注意事項(LTSとCurrent)