Microsoftが提供する開発プラットフォームである.NETは、20年以上の歴史の中で劇的な進化を遂げてきました。
かつてはWindows専用の実行基盤であった.NET Frameworkから、オープンソース化とマルチプラットフォーム対応を実現した.NET Core、そしてそれらが統合された現在の最新の.NETへと至る道のりは、ソフトウェア開発のトレンドそのものを反映しています。
本記事では、これら各世代の違いや歴史的背景、そして現在の開発においてどのバージョンを選択すべきかを詳しく解説します。
.NETの歩みと進化の歴史
.NETの歴史を理解することは、現在の複雑なバージョン体系を整理する近道です。
Microsoftがどのようにしてクローズドな環境からオープンな開発環境へと舵を切ったのか、その変遷を確認しましょう。

.NET Frameworkの誕生(2002年~)
2000年代初頭、Windowsアプリケーション開発の標準として登場したのが.NET Frameworkです。
それまでのWindows開発ではVB6やC++が主流でしたが、メモリ管理の自動化(ガベージコレクション)や共通言語ランタイム(CLR)の導入により、開発効率が飛躍的に向上しました。
しかし、この時代の.NETはWindows OSに密接に依存しており、LinuxやmacOSでの動作は考慮されていませんでした。
また、OSの一部としてインストールされるため、新しいバージョンを導入するにはOS全体のアップデートや複雑な環境構築が必要になるという課題もありました。
.NET Coreによる革新(2016年~)
クラウドの普及とLinuxサーバーの台頭に伴い、Microsoftは大きな決断を下します。
それが、ゼロから設計し直された.NET Coreのリリースです。
.NET Coreは、従来のFrameworkとは異なり、オープンソースで開発され、WindowsだけでなくLinuxやmacOSでも動作するクロスプラットフォーム対応を実現しました。
これにより、Dockerコンテナでの運用や、クラウドネイティブなマイクロサービス開発が容易になりました。
.NET 5以降の「統合」と現在
2020年、Microsoftは「.NET Framework」と「.NET Core」という二つの流れを一つに統合することを発表しました。
それが.NET 5です。
名称から「Core」が外れ、単に「.NET」と呼ばれるようになりました。
現在では、偶数番号(.NET 6, .NET 8)がLTS(長期サポート)版、奇数番号(.NET 7, .NET 9)が最新機能を盛り込んだ標準期間サポート版として、毎年11月に定期アップデートされています。
.NET Frameworkと.NET Coreの決定的な違い
両者は似たような名前を持っていますが、その設計思想や内部構造には大きな隔たりがあります。
主な違いを比較表と詳細な解説で見ていきましょう。
| 比較項目 | .NET Framework | .NET Core / .NET (最新) |
|---|---|---|
| プラットフォーム | Windowsのみ | Windows, Linux, macOS |
| オープンソース | 一部公開(参照のみ) | 完全オープンソース |
| パフォーマンス | 標準的 | 非常に高速 (最適化が進んでいる) |
| インストール単位 | マシン全体 (OS依存) | アプリケーション単位 (OS非依存) |
| 開発モデル | モノリス、デスクトップ | マイクロサービス、クラウド、Web |
| 最新技術の対応 | メンテナンスモード | 積極的に新機能を追加 |

実行環境とマルチプラットフォーム対応
.NET FrameworkはWindows APIに強く依存しているため、Windows以外のOSでは動作しません。
一方、.NET Core以降はOSに依存しない抽象化レイヤーを持っており、同じコードをLinuxサーバーやクラウド環境でそのまま実行できます。
特にモダンなWeb開発においては、開発はWindowsやmacOSで行い、デプロイ先は低コストなLinuxサーバーやDockerコンテナにするという構成が一般的ですが、これを実現できるのは.NET Core以降のバージョンのみです。
デプロイメント(配布)方式の違い
.NET Frameworkでは、PCに特定のバージョンのランタイム(例: .NET 4.8)をインストールしておく必要がありました。
もし複数のアプリが異なるバージョンを要求する場合、競合が発生することもありました。
最新の.NETでは、自己完結型デプロイ(Self-contained)が可能です。
これは、アプリケーションの実行ファイルの中に、必要なランタイムをすべて同梱して配布する方式です。
これにより、実行側のPCに.NETがインストールされていなくても、ファイルをコピーするだけでアプリが動作します。
パフォーマンスの劇的な向上
.NET Coreへの移行において最も注目されたのが実行速度の向上です。
JIT(Just-In-Time)コンパイラの最適化や、メモリ使用量の削減が徹底的に行われました。
特にASP.NET Core(Webフレームワーク)のベンチマークでは、従来のASP.NETに比べて数倍から十数倍のリクエスト処理能力を記録することもあります。
これは、クラウド利用料の削減に直結する非常に重要なポイントです。
互換性を支える「.NET Standard」の役割
歴史の中で複数の.NET実装が乱立した時期、開発者を悩ませたのが「どのライブラリがどの.NETで使えるのか」という問題でした。
これを解決するために導入されたのが.NET Standardです。

ライブラリ共有のための共通仕様
.NET Standardは、それ自体が実行可能なプラットフォームではなく、「すべての.NET実装が共通して持つべきAPIのセット」を定義した仕様です。
例えば、.NET Standard 2.0に準拠して作成されたクラスライブラリは、.NET Framework 4.6.1以降でも、.NET Core 2.0以降でも、モバイル開発のXamarinでも使用できます。
現在の推奨事項
現在、Microsoftは新しいライブラリ開発において、可能な限り.NET 6や.NET 8などの最新バージョンを直接ターゲットにすることを推奨しています。
古い.NET Frameworkとの互換性を維持する必要がある場合に限り、.NET Standard 2.0を選択するのが一般的です。
実践的なコード比較:ターゲットの判定
プログラムの中で、自分がどのランタイム上で動いているかを知る必要がある場合があります。
以下のコードは、実行環境の情報を取得する簡単なサンプルです。
実行環境情報を出力するC#プログラム
using System;
using System.Runtime.InteropServices;
namespace RuntimeCheckApp
{
class Program
{
static void Main(string[] args)
{
// 現在実行されている.NETのバージョン情報を取得
string description = RuntimeInformation.FrameworkDescription;
// 実行されているOSの情報を取得
string osDescription = RuntimeInformation.OSDescription;
Console.WriteLine("=== .NET Runtime 情報 ===");
// .NET Frameworkか.NET Core/5+かを識別して表示
Console.WriteLine($"実行環境: {description}");
Console.WriteLine($"OS: {osDescription}");
// バージョンによる条件分岐の例
if (description.Contains(".NET Framework"))
{
Console.WriteLine("注意: 従来の .NET Framework 上で動作しています。");
}
else
{
Console.WriteLine("最新の .NET または .NET Core 上で動作しています。");
}
}
}
}
実行結果(最新の.NET 8の場合)
=== .NET Runtime 情報 ===
実行環境: .NET 8.0.x
OS: Microsoft Windows 10.0.19045
最新の .NET または .NET Core 上で動作しています。
実行結果(.NET Framework 4.8の場合)
=== .NET Runtime 情報 ===
実行環境: .NET Framework 4.8.xxxx.x
OS: Microsoft Windows 10.0.19045
注意: 従来の .NET Framework 上で動作しています。
このコードを実行すると、プログラムがどのランタイム上で動いているかが一目でわかります。
RuntimeInformation.FrameworkDescriptionプロパティは、デバッグや環境依存の処理を記述する際に非常に便利です。
どちらを選ぶべきか?移行の判断基準
新規プロジェクトを立ち上げる際や、既存のシステムを刷新する際、どのバージョンを選択すべきかは非常に重要な決定事項です。

新規開発の場合:最新の.NET (LTS)
今から新しいアプリケーションを作るのであれば、迷わず最新の.NET (現在は.NET 8 LTS)を選択してください。
.NET Frameworkは今後、新機能の追加が行われない「メンテナンスモード」に入っています。
最新の.NETを選択することで、以下のメリットを享受できます。
- C#の最新機能(レコード型、パターンマッチングの強化など)が利用可能。
- クラウドサービス(Azure, AWS, Google Cloud)との親和性が高い。
- 長期的なサポートが保証されている。
既存資産の維持の場合:.NET Framework 4.8
一方で、既存の巨大なシステムを無理に移行させる必要がないケースもあります。
特に以下の技術を使用している場合は、.NET Framework 4.8に留まる必要があります。
- ASP.NET Web Forms: Core以降ではサポートされておらず、BlazorやASP.NET Core MVCへの書き換えが必要です。
- WCF (Windows Communication Foundation) のサーバー側: 部分的なサポートはありますが、完全な移行にはgRPCなどへの変更が推奨されます。
- Windows専用の特定API: 非常に古いライブラリやハードウェア制御など、Windows OSに依存しすぎている場合。
移行のコストとメリット
.NET Frameworkから最新の.NETへの移行は、単なるバージョンアップではなく「再構築」に近い作業になることもあります。
しかし、移行に成功すれば、サーバーコストの削減や開発スピードの向上といった絶大なリターンが得られます。
まとめ
.NETは、Windows専用のクローズドな基盤から、あらゆるデバイスで動作するオープンなモダン・プラットフォームへと進化を遂げました。
- .NET Frameworkは、過去のWindows資産を支える安定した基盤。
- .NET Coreは、クロスプラットフォームと高性能を追求した革新の旗手。
- 現在の.NETは、それらが統合された「究極の共通基盤」。
今、私たちが手にしているのは、単一のコードでWeb、デスクトップ、モバイル、クラウド、AIといったあらゆる分野をカバーできる強力なツールです。
これまでの歴史を尊重しつつ、新しいプロジェクトでは積極的に最新の.NETを採用し、その圧倒的なパフォーマンスと開発体験を享受しましょう。
