コンピューターが直接実行できるのは機械語(マシンコード) と呼ばれる、0と1の命令だけです。
一方、私たちが書く C# は人間が読み書きしやすいように設計された言語です。このような言語を高水準言語と呼びます。
1
Debug.Log("Hello, Unity!");
この C# のコードをそのままコンピューターは実行できません。機械語に変換する処理が必要です。この変換処理をコンパイル(compile)、変換を行うプログラムをコンパイラー(compiler)と呼びます。
.NET(ドットネット) は Microsoft が開発した、プログラムを実行するためのプラットフォームです。C# で書いたプログラムを動かすために必要な仕組みがまとまっています。
| 役割 | 説明 |
|---|---|
| ランタイム | コンパイルされたプログラムを実際に実行する環境 |
| クラスライブラリ | ファイル操作・ネットワーク・計算など、よく使う機能をあらかじめ用意したコード集 |
.NET の特徴として、次の2点も押さえておきましょう。
クロスプラットフォーム:Windows・macOS・Linux など、異なる OS の上で同じプログラムを動かせます。C# で書いたコードがどの環境でも動く理由は、後述の「中間言語」の仕組みによります。
オープンソース:.NET の実装は GitHub 上で公開 されており、誰でもソースコードを確認したり改善に参加したりできます。
複数の言語が .NET を利用できる理由:C# だけでなく、F# や VB.NET など複数の言語が .NET の上で動きます。それぞれの言語のコンパイラーが共通の中間形式に変換するしくみがあるため、異なる言語でも同じ .NET のランタイムやライブラリを使うことができます。この中間形式については 中間言語と JIT コンパイル で詳しく解説します。
C# は「書く言語」、.NET は「動かす環境」です。両者はセットで使われます。
flowchart LR
src["C# ソースコード (.cs)"]
compiler["⚙️ .NET コンパイラー"]
runtime[".NET ランタイム"]
result["✅ 実行結果"]
src --> compiler --> runtime --> result
この図では「コンパイル → 実行」を1ステップのように描いていますが、実際には内部でさらに段階があります。詳しくは 中間言語と JIT コンパイル で解説します。
Unity も内部で .NET を使っています。Unity スクリプトは C# で書き、.NET の仕組みで実行されます。
Unity はエディター上の実行と、ゲームのビルド(最終成果物)で異なる実行方式を採用しています。エディターでは素早く動作確認できるよう、ビルドでは配布先プラットフォームに最適な形式が選ばれます。
この仕組みの詳細は 中間言語と JIT コンパイル で解説します。
.NET の内部でどのようにコードが処理されるか、より深く知りたい場合は 中間言語と JIT コンパイル へ。