WisdomSoft - for your serial experiences.

1.2 .NET Framework とは?

.NET Framwork の概要と技術的な仕組みを解説します。

1.2.1 開発者にとっての .NET Framework

.NET Framework を一言で説明することは難しいことであります。.NET Framework はアプリケーションでも、サービスでも、開発環境でもありません。.NET Framework は一種のプラットフォームであると考えるのが適切です。

しかし、コンピュータの物理的原理を理解できる開発者に説明するならば、.NET Framework も巨大な仮想マシンに過ぎません。原理的には、.NET Framework 専用の中間言語を専用コンパイラを使って生成し、これを .NET Framework 仮想マシンが読み込んでネイティブシステムの機械語に変換して実行しているに過ぎません。詳細において様々な違いもありますが原理は Java と同じです。

.NET 開発環境が出力する中間言語を MSIL (Microsoft Intermediate Language) と呼び、中間言語を実行する仮想マシンを CRL (Common Language Runtime) と呼びます。Java で言うところ MSIL は Java バイトコード、CRL は Java 仮想マシンに位置します。

.NET Framework は強力なフレームワークを備えているため、従来の Win32 API を使ったアプリケーション開発に比べて生産性を向上させることができ、さらに仮想マシンの中で動作するということから安全性や移植性も優れています。Java と同様に、生成したインスタンスが不要になれば自動的に解放されるガベージコレクション機能があるので、開発者の負担を減らすことができます。

.NET 開発に利用できるプログラミング言語は数多く存在します。Microsoft がサポートしているプログラミング言語は、C#、C++、VB .NET、JScript、J# などが存在します。このうち、C++ は .NET 用にいくつかの拡張があります。また VB .NET も従来の VB に比べて .NET に対応するために大幅な変更が加えられています。

どのプログラミング言語で開発しても最終的に出力される実行ファイルは中間コードなので、どの言語が優位であるというものはありません。ただし、これらの言語の中で C# は .NET アプリケーションを開発するための言語として Microsoft に作られたものであるということから .NET アプリケーション開発には最適であると考えられます。

1.2.2 .NET Framework の今

Microsoft は 2000 年に .NET 構想を発表し、2002 年以降から .NET Framework 及び関連製品を次々と出荷しています。この文書を書いている現在においても .NET Framework は拡大し続けている技術であり、今後も多くの製品が .NET Framework 対応になるでしょう。当然、技術者にも .NET Framework に関する知識が求められるようになります。

Windows Server 2003 以降は .NET Framework が標準搭載されているため、次期 Windows クライアントである Windows Vista でも .NET は Windows アプリケーション開発や Web アプリケーション開発において中核的な技術になります。

Microsoft の技術的な戦略で見ると、.NET Framework は Windows DNA と呼ばれていたネットワークサービス技術の構想を進めたものと考えられます。こうした背景から、現在では ASP .NET や ADO .NET、XML など、Web アプリケーション、Web サービス、データベースの分野、すなわちエンタープライズ分野で積極的に利用促進を図っています。

一方で、クライアントアプリケーション、ゲーム、マルチメディアの分野においては、.NET 対応アプリケーションの数はまだ少なく、十分に普及していません。しかし、DirectX 9.0 から .NET に対応した Managed DirectX をサポートしているため、C# 言語から DirectX を利用したマルチメディアアプリケーションを開発することも可能です。.NET Framework を利用することで、従来よりも少ないコードで簡素に記述することができるため生産性の向上を期待することができます。

近年の Windows 向けゲームアプリケーションもオンライン化などが進み、エンタープライズとの関係が不可欠になりつつあります。これからゲーム開発を学びたいと考えている学生の方も、すでに C/C++ を使ってゲームを開発している方も、.NET を学ぶ価値は十分にあるのです。

1.2.3 MSIL と CLR

従来の Win32 アプリケーションは CPU が直接意味を理解することができる機械語で作られていますが、.NET アプリケーションは機械語ではなく .NET 専用に抽象化された中間言語 MSIL で作られています。当然 MSIL を CPU やネイティブプラットフォームが直接実行することはできません。

そこで、.NET アプリケーションを実行するには仮想マシンである CLR が実行時に必要となります。Windows Server 2003 以降は標準で搭載されていますし、Windows 98 以降の OS でも Windows Update からダウンロードしてインストールできます。

Java の場合、コンパイラは Java バイトコードを *.class ファイルとして出力しました。これに対して .NET Framework はネイティブアプリケーションと同様に *.exe 形式で実行することができます。この実行ファイルを PE (Portable Executable) ファイルと呼びます。しかし、.NET Framework アプリケーションの場合は機械語ではなく、MSIL コードとそのほかの必要な情報が格納されています。

図1 .NET Framework の開発から実行までの流れ
図1 .NET Framework の開発から実行までの流れ

具体的には、EXE 実行ファイルであれ、DLL ファイルであれ、アセンブリという単位で管理されています。アセンブリには、次のような要素が含まれています。

  • アセンブリマニフェスト
  • 型情報
  • MSIL コード
  • リソース

アセンブリには、アセンブリそのものの情報を表すアセンブリメタデータをアセンブリ マニフェストに保存しています。アセンブリマニフェストには、アセンブリ名、バージョン番号、カルチャなどの情報が含まれています。これによって、アプリケーションが独自のコードでバージョン管理やカルチャの管理をする必要がなくなります。マニフェストには、その他の依存しているアセンブリへの参照などの情報も含んでいます。

ひとつの実行ファイルに必要なすべてのデータを保存するシングルファイルアセンブリ以外に、リソースデータなどを分離してモジュール化するマルチファイルアセンブリなど、配置方法も多様に選択できます。例えば、ビットマップなどを保存する大容量のリソースを実行ファイルから分離させて配置したい場合はマルチファイルアセンブリが適しているでしょう。