「最新.NET技術がよく分からない」と感じる人のための用語整理:特集:ASP.NET 5を探る(2/3 ページ)
KRE、XREにDNX。ASP.NET 5を理解する前によく分からない用語がたくさんある。そこで、これらを整理して、ASP.NET 5とDNXに備えよう。
DNXの構造
では、DNXはどのような要素で構成されているのか。これを簡単にまとめたのが以下の図だ。
DNXの役割は、ランタイムをホストするネイティブプロセスの実行、マネージコード側のエントリポイント(とはつまり、開発者が記述したアプリのエントリポイント)の発見、マネージコードで記述されたアプリのホストなどだ。そして、図にある通り、DNXではアプリのホストには.NET Frameworkのランタイム(図ではFull CLR)、.NET Coreランタイム(Core CLR)、monoランタイムが使用できる。図では一つのDNXに複数のランタイムが存在しているかのように書いているが、実際にはそうではなく、ランタイムごとに一つのDNXとなる。そして、どのDNXを現在の環境で使用するかを指定するのが、先ほど紹介したdnvmコマンドとなる。
DNXには、DNXを構成するコンポーネント*1に加えて、dnxコマンドとdnuコマンドが含まれる。
- dnxコマンド: 現在のDNXを使用して、アプリを実行する
- dnuコマンド: NuGetクライアント。現在のプロジェクトのパッケージ管理を行う
dnxコマンドは、コマンドラインからDNXアプリを実行する(セルフホストする)場合に使用する。dnxコマンドは、DNXへのエントリポイントとなり、ここからランタイムをホストするプロセスが作成されたり、作成したアプリのエントリポイントが呼び出されたりする。
*1 ランタイムで必要となる各種アセンブリは「ユーザーのホームディレクトリ\.dnx\runtimes\ランタイムの種類\bin」ディレクトリ以下に格納される。.NET Core CLRをランタイムとするDNXでは、ランタイム自身(Core CLR)とCoreFXと呼ばれるクラスライブラリの一部も格納される。.NET Framework(Full CLR)とmonoをランタイムとするDNXでは、ランタイムと基本クラスライブラリはDNXとしては配布されない。
用語:dnxコマンド
dnxコマンド: 現在のDNXを使用して、アプリを実行する。旧称は「k」コマンドあるいは「klr」コマンド。
dnxコマンドは通常、「dnx アプリのベースディレクトリ コマンド」という形式で実行する。ただし、これはシンタックスシュガーであり、例えば「dnx . kestrel」というよく見られるdnxコマンドラインは「dnx --appbase . Microsoft.Framework.ApplicationHost kestrel」の省略形と考えてよい。
上記のコマンドラインに含まれる「Microsoft.Framework.ApplicationHost」がランタイムをホストする。そして、「dnx 〜 kestrel」というコマンドラインから察するに、そこからMicrosoft.AspNet.Hostingアセンブリ(のProgram.Mainメソッド)が呼び出されて、そこからWebサーバーであるKestrelが起動された後、最終的にアプリのエントリポイントが呼び出されてアプリの実行が開始されることになるだろう。
この内容と上記のDNXの構成図をつきあわせると、DNXがどんな処理をしているのかが何となく把握できるのではないだろうか。
dnuコマンドは、現在のプロジェクトのパッケージ管理を行う(ここでいうプロジェクトは、コマンドプロンプトやシェルのカレントディレクトリ以下に格納されているアプリのこと)。
DNXでは、プロジェクトが必要とするパッケージはdnuコマンドを使って管理する。ASP.NET 5を構成するアセンブリもその例外ではない(そのため、上の図では矢印を「ASP.NET 5」にも引いてある)。
用語:dnuコマンド
dnuコマンド: DNXでアプリを開発する際に使用するユーティリティコマンド。パッケージの管理、アプリのパッケージの作成、依存性のインストール、アプリのビルドなどで使用する。「dnu」は「.NET Development Utility」を意味する。旧称はkpm(K Package Manager)。
dnuコマンドは「dnu オプション コマンド」の形式で実行する。主なコマンドを以下に示す。
- restore: プロジェクトが依存しているパッケージを復元する(デフォルトでは「ユーザーのホームディレクトリ\.dnx\packages」ディレクトリにアセンブリごとにサブディレクトリが作成され、そこにバージョンごとにアセンブリが格納される
- install: 現在のプロジェクトが依存するパッケージを追加する(project.jsonファイルに追記される)
- publish: 配備用にアプリを出力する(デフォルトでは、カレントディレクトリの「bin\output」ディレクトリ以下にアプリが出力される。このとき、アプリが依存するアセンブリ群も展開される)
- build: プロジェクトのアセンブリを作成する
ここまでのまとめとして、以下の表にDNX関連用語を現在のものと以前のものに分けてクロスリファレンス的に示しておこう。
名称 | 説明 | 以前の名称 |
---|---|---|
DNX | クロスプラットフォームでの.NETアプリ実行環境の総称 | KRE/XRE |
dnvm | DNX環境のバージョン管理ユーティリティ。実行環境のバージョン管理を行う | kvm |
dnu | .NETアプリ開発用ユーティリティ。アプリが使用するパッケージの管理やアプリの配備などに使用する | kpm |
dnx | DNX上でアプリを実行するためのユーティリティ。一般には、このコマンドでランタイムのエントリポイント(を経由してアプリのエントリポイント)を呼び出す | k/klr |
DNX関連用語 |
名称 | 説明 | 現在の名称 |
---|---|---|
KRE | クロスプラットフォームでの.NETアプリ実行環境の総称。K Runtime Environment | DNX |
XRE | クロスプラットフォームでの.NETアプリ実行環境の総称。Cross-platform Runtime Environment | DNX |
kvm | K環境用のバージョンマネージャー(K Version Manager)。実行環境のバージョン管理を行う | dnvm |
kpm | K環境用のパッケージマネージャー(K Package Manager)。アプリが使用するパッケージを管理する | dnu |
k | KRE/XRE上でアプリを実行するためのユーティリティ。一般には、このコマンドでランタイムのエントリポイント(を経由してアプリのエントリポイント)を呼び出す | dnx |
klr | K Language Runtime。KRE/XRE上でアプリをセルフホストするためのユーティリティ(kコマンドから呼び出される薄いラッパー)。DNXではkコマンドと合わせてdnxコマンドになった | dnx |
以前の用語 |
次ページでは、ここまでに見てきたDNXの上で動作するASP.NET 5について、その特徴を簡単にまとめておこう。
Copyright© Digital Advantage Corp. All Rights Reserved.