対象者
.NETがなんなのか、よくわからない人。
.NET っていったいどれを指してる?
「.NET Core 6.0は、.NET frameworkの続きで、」
「.NET Core 5以降は.NETと表記し」、「MVCを用いて」・・・・。
いったん整理させてもらっていいですか・・・。
.NETってなんだろう
.NETとは
Microsoftによって開発された、無料かつオープンソースのアプリケーション開発プラットフォームです。
Microsoft公式 拙訳
ここで気になるのが、アプリケーション開発プラットフォームが、具体的に何を含んでいるか、です。
.NETは、以下の部品を含んでいます。
Introduction to .NET 最終更新日 : 2024/ 01/10 拙訳
- Runtime : アプリケーションのコードを実行する
- Libraries : 基本的な機能を提供する(例, JSONの変換)
- Compiler : C#やその他のCodeをRuntime時に実行可能なCodeへと置き換えます
- SDKやその他のtool : 現代的な作業工程でアプリのbuildやmonitoringを可能にする
- App stacks : ASP.NET CoreやWindows Formsといったアプリの開発を可能にするもの
上3つは良いですが、問題は下2つです。SDKやその他のtoolは、つまり、BuildやCodeのtest等を楽にしてくれる部品のようです(microsoft, Introduction to .NET 最終更新日 : 2024/01/10)。例えば、.NET SDKは、以下の部品を含みます。
microsoft, .NET SDK overview, 2023/02/11 拙訳
- Command Line Interface (CLI)
- .NET runtime やLibrary
- “dotnet” driver
一方、App stacksは、アプリ開発時によく使われるものをあらかじめ揃えたものになります。例えば、ASP.NET Core MVCでは、MVCパターンにあたるMVCクラスを用意してくれております。これによって、メソッドとURLの設定 (Routing) をあらかじめ設定してくれていたり、ControllerからResponseでViewを渡す処理を楽にしてくれていたりします。App stacksでは、Librariesで用意している基本的なクラス(例, データの型)をどんどん利用しているため、App stacksを利用する際には、.NETが必須となります。
また、.NETの前身である.NET Frameworkでは、その構成をRuntimeとClass libraryの2つに分けて説明しています(microsoft, Overview of .NET Framework, 2023/03/30)。.NETにも、class libraryは用意されていますが、上で参考にしたページ(microsoft, Introduction to .NET, 2024/01/10)には、載っておらず、少し疑問が残ります。
共通言語ランタイム(Common Language Runtime)
共通言語ランタイム (Common Language Runtime : CLR)は、Microsoftが実装した.NET Frameworkのアプリケーションの実行環境です。一般的なアプリケーションはWindows上で直接実行されますが、.NET FrameworkのアプリケーションはWindows上で動作するCLRの上で実行されます。CLRを利用することの利点は、主に3つあります。
様々なプログラミング言語の使用が可能
CLRをターゲットにしている様々なプログラミング言語を同時に使うことができます。例えば、Visual Basicで書かれたライブラリをC#で利用するといったことが簡単に実現できます。
CLRが動作するコンピューターで実行可能
CLR上で動作するため、サーバー上にCLRさえ入っていれば、OSを問わず、動作します。そのため、.NETの特徴であるLinuxやMac上での動作が可能となります。
セキュリティの向上
CLRはJITコンパイル(Just In Time Compile)の際に、「コードの検証」と呼ばれる処理によって、実行しようとしているプログラムが安全であることを確認し、安全とみなしたコードしか実行しません。これによってプログラムが不適切なメモリアクセスをしないことが保証されます。
.NET Class Library
.NETには、.NETを用いて開発するアプリケーションのために、.NET Class Library (Framework Class Library)を備えています。.NET Class Libraryには、より効率的に開発を行えるように、Classやinterface、delegate等が含まれております。例えば、IntやStringといったデータの型の定義は.NET Class Libraryに含まれます。
.NET上で開発するアプリケーションは、.NET Class Libraryを用いることによって、より効率的に開発することができます。
.NETの歴史
.NET Frameworkは、.NETの前身にあたります。
.NET Frameworkが開発される以前、アプリの開発は、アプリの種類に合わせて行う必要がありました。例えば、Webアプリを開発する環境とClientアプリを開発する環境は異なっており、それぞれのための開発環境を整える必要がありました。
しかし、.NET Frameworkでは、共通言語ランタイム(Common Language Runtime, 以降CLR)とClass libraryを用意することにより、すべての形態のアプリを同じ.NET Frameworkという環境で開発及び実行できるようになりました。
.NET 及び .NET Coreは同じシリーズとなります。.NET Core 1.0 ~ 3.0 までは.NET Core、一方、version5以降はCoreをつけずに.NETと表記するようになりました。理由は、.NETの主要な実装であることを強調するため、らしいです。
.NETの特徴はLinux及びMacでも開発・実行できるということです。もちろん、.NET Frameworkと同様にCLR(共通言語ランタイム)とClass libraryを用意しております。そのため、.NETでは、Windows, Linux, Macの3つのOSそれぞれで、Webアプリ、クライアントアプリ、モバイルアプリを開発することができます。
.NET上で開発可能なアプリ
.NET Frameworkの説明で、「すべての形態のアプリを同じ.NET Frameworkという環境で開発及び実行できるようになりました」としましたが、.NET環境では、以下のアプリ開発するためのbase libraryを用意しております。
そして、先ほど示したように、これらのアプリ(base library)では、.NET class libraryを使用することができます。
まとめ
- .NETとは、Microsoftによって開発された、OS上でアプリケーションを動作させるための環境であり、共通言語ランタイムと.NET class Libraryを備えています。
- 共通言語ランタイムにより、複数のプログラミング言語への対応、複数のOSでの動作、そして、高いセキュリティを実現します。
- .NET class Libraryにより、アプリケーションの種類に問わず、基本的な機能を提供します。
おまけ Visual Studioで.NET 及び ASP.NET のバージョンを調べる方法
.NET
プロジェクト名(赤)で右クリック → プロパティ
ターゲットフレームワークから、バージョンを確認。
stack overflow “How to find the .NET framework version of a Visual Studio project?”
ASP.NET
依存関係をクリック → フレームワーク → Microsoft.AspNetCore.App
アセンブリバージョンから確認。
OpenAI. (2023). ChatGPT (Feb 13 version) [Large language model]. https://chat.openai.com
コメント