📃

.NET Native AOTとは

2025/03/03に公開

はじめに

.NET 7からNative AOTと言われるものが正式に導入され、コンソールアプリケーション向けにサポートされるようになった。
.NETを普段触っている人でもあまり聞き馴染みのない言葉だと思う(私もその一人である)。
なので今回は、簡単にNative AOTについてまとめてみた。
.NET については、以下の記事にまとめているのでぜひ。

https://zenn.dev/takumi_machino/articles/dotnet-history

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 ツールや簡単なコンソールアプリであれば良いが前述の通り制限がたくさんあるため向き不向きがはっきりとしているものだとも感じた。

参考

https://learn.microsoft.com/en-us/dotnet/core/deploying/native-aot/?tabs=windows%2Cnet8

GitHubで編集を提案

Discussion