.NET 7の機能 - Native AOTデプロイ
(dotnetstuffs.com)- .NET AOTとは?
- Native AOTデプロイ
.NET 7では、コンソールアプリケーション向けに、Windows、Linux、macOSで .NET ランタイムなしでも、約2MBの小さなサイズのネイティブコードを生成でき、依存関係なしで実行可能になりました。
.NET 7では、コンソールアプリケーション向けに、Windows、Linux、macOSで .NET ランタイムなしでも、約2MBの小さなサイズのネイティブコードを生成でき、依存関係なしで実行可能になりました。
5件のコメント
.NET 7ではサポートされていなかったmacOSが、.NET 8で正式にサポートされるようになります。
https://learn.microsoft.com/en-us/dotnet/…
Microsoft の公式ドキュメントを見ると、この機能には事前にネイティブへコンパイルすることに由来する根本的な制約に加えて、開発初期段階であるために生じる追加の制約がいくつかあります。現時点ではまだ ASP.NET Core アプリには適用できず、ライブラリ段階でのサポートが必要で、デバッグやプロファイリングにもまだ限界があります。付け加えると、CPU アーキテクチャは x64 と ARM64 のみをサポートしているため、32 ビット Windows 向けアプリは作成できません。そして目を引く点として、この機能を通じて .NET 以外のアプリから利用できる静的ライブラリを作成できることが挙げられます。
MS は .NET 7 の発表に際して、「クラウドネイティブアプリのための」プラットフォームだと述べました。そのために、アプリを Docker コンテナとしてデプロイする機能も追加しています。AOT サポートも、このようなコンテナ化されたアプリのイメージ容量と起動時間を最適化するための手段として追加されたのではないかと思います。しかし肝心の ASP.NET Core へのサポートはまだ作業中なので、この機能がクラウドネイティブアプリで実質的に真価を発揮するのは、もう少し先のことになりそうです。
参考:
ご親切なご回答ありがとうございます。
コンソールアプリケーションはプレビュー段階を超えた正式リリース段階にあり、実際のアプリケーションを開発できます。
おっしゃるとおり初期段階のため、ASP.NET Core や WPF、Windows Forms、WinUI はまだサポートされていません。
また、Docker コンテナとしてデプロイしたいというニーズにも合致しません。まだ ASP.NET Core をサポートしていないからです。
同様に、おっしゃるとおりネイティブコードにコンパイルされるため、Reflector の機能の大半は利用できません。この点は初期段階に由来する制約というより、IL コードとネイティブコードの特性の違いによるもののようです。
現在の NativeAOT の意義は、Windows、Linux、macOS で依存関係のない純粋なネイティブコードを、少なくともコンソールアプリケーションのレベルでは見事にデプロイできる点にあるようです。
macOSではありません。私がリンクした Microsoft Learn の文書をご覧になれば分かるとおり、現時点でこの機能のサポート対象プラットフォームは Windows と Linux のみです。macOS はおそらく後で追加されるでしょう。
時間が解決してくれるでしょうが、この機能はまだ実務で使いにくいケースのほうが多いのではないかと思います。
macOSはまだサポートされていないという認識で正しいです。