.NET Native AOTとは
はじめに
.NET 7
からNative AOT
と言われるものが正式に導入され、コンソールアプリケーション向けにサポートされるようになった。
.NET
を普段触っている人でもあまり聞き馴染みのない言葉だと思う(私もその一人である)。
なので今回は、簡単にNative AOT
についてまとめてみた。
.NET
については、以下の記事にまとめているのでぜひ。
Native AOT とは
Native AOT
とは、.NET
アプリケーションを事前にネイティブコードにコンパイルする技術である。
従来の .NET
アプリは JIT (Just-In-Time) コンパイルを使用しており、実行時に IL(中間言語) をネイティブコードに変換していたが、Native AOT
では ビルド時に完全なネイティブバイナリを作成する。
メリット
起動が高速
JIT コンパイル が不要になるため、アプリがすぐに起動するため
コンソールアプリやマイクロサービスなどで特に効果的である。
メモリ使用量が少ない
JIT コンパイラ や不要なランタイムコンポーネントが削除され、メモリ消費が削減される。
単一バイナリでの配布が可能
自己完結型のネイティブバイナリ を作成でき、追加の .NET ランタイムが不要になる。
通常は、複数のファイルが必要で、.NET ランタイムがインストールされている環境でしか動作しない。
Windows、Linux、macOS などで直接実行可能。
デメリット
リフレクションが制限される
動的型解析が使えないため、事前に型を指定する必要がある。
DI(Dependency Injection)
やプラグインシステムが制限される。
一部のライブラリが非対応
Entity Framework Core
など、リフレクションを多用するライブラリは制限がある。
デバッグが難しくなる
通常の .NET
アプリのように IL コードを確認したり、JIT デバッグができない。
ビルド時間が長い
完全なネイティブコードを生成するため、JIT 版よりもビルドに時間がかかる。
まとめ
今後、どのように変化していくかわからないが現時点での魅力は、起動が高速であることやランタイムなしで実行ができることだと感じた。
CLI ツールや簡単なコンソールアプリであれば良いが前述の通り制限がたくさんあるため向き不向きがはっきりとしているものだとも感じた。
参考
Discussion