コードジンのヘッダーが入ります
.NET Frameworkは、アプリケーションを容易に実装し、安全に実行することを支援するためのフレームワークだ。最初のバージョン1.0は2002年、Visual Studio .NET(2002)と一緒にリリースされた。機能を改善する形で1.1、2.0へと進化した。3.0はWindows Vistaと同じタイミングでリリースされた。3.0は2.0の改善ではなく機能の追加だ。最新は3.5だが、現在の.NET Frameworkはバージョン2.0と3.0を、3.5が包含する形になっている(図1)。
これらのバージョンにおいて共通する実行環境が共通言語ランタイム(CLR)である。このCLRを基盤とした .NET Frameworkの仕組みを理解することが、開発や運用において陥りがちなトラブルを未然に防ぐ一助となる。
.NET Frameworkのメカニズムを解説するに当たり、マイクロソフトの新村氏は「CLRの利用には異なるプログラミング言語での簡単な連携、高度なバージョン管理、ランタイムによるセキュリティの向上という3つのメリットがある」と強調する。
.NET Frameworkにおける開発では、ソースコードを言語別コンパイラでコンパイルし、CLRで解釈可能なDLLやEXE形式のアセンブリを作成する。アセンブリは配置とバージョン管理の単位で、その用途によりプライベートと共有の2種類が存在する。
アセンブリに含まれている情報は主に四つ。自己記述型のアセンブリ情報であるMANIFEST、言語別コンパイラがはき出した中間言語が入ったIL、ILと対をなす形のメタデータ、イメージデータや文字列などのリソースだ。
アセンブリの名前には簡易名と厳密名がある。簡易名はアセンブリ内のコアのファイル名と自動連動したテキストベースの簡単な名前だ。厳密名では開発者(発行者)の公開キーを割り付けられ、作成者を厳密に特定可能になっている。情報としてバージョンとカルチャを合わせ持つことで、同じ名前のアセンブリが複数存在しても識別可能だ。
.NET Frameworkにおけるアセンブリの実行はWindowsから対象のアセンブリEXEファイルの起動で開始する。アセンブリのファイルヘッダで実行するCPUアーキテクチャを選定し、構成ファイルなどの情報で実行するCLRのバージョンを選ぶ。続いてアセンブリローダにより実行対象のアセンブリがロードされ、タイプチェック、参照アセンブリ検索などが行われ、ロードしたアセンブリに対して適切なアクセスの許可を与えるのだ。
アセンブリ ローダによるアセンブリの検索は共有スペースのGAC(Global Assembly Cache)、構成ファイルの「codeBase」で指定されている場所の順に行われる。見つからない場合はアセンブリ名を元に探すProdingというプロセスに入る。そのためアセンブリの配置場所には注意が必要で、特に複数のアプリケーションで共有する場合はGACに格納することが望ましい。そして中間コードがJITコンパイラによりネイティブコードにコンパイルされ、セキュリティチェックを経た上で実行される。
セキュリティは、大きく2種類ある。「コードアクセスセキュリティ」は、プログラム実行時、リソースアクセスや特定操作に関して行われるアクセス制御だ。「ロールベースセキュリティ」は、主にビジネスロジックの制御で利用するもので、役割ごとにユーザーをグループ化した「ロール」単位で行うセキュリティ制御だ。
新村氏は、キーポイントが「サイド バイ サイド」、「アセンブリとその配置」、「コードアクセスセキュリティ」であるとまとめ、セッションを締めくくった。