個人的なメモ

Tomohiro Suzuki @hiro128_777 のブログです。Xamarin に関する事を中心に書いています。 Microsoft MVP for Developer Technologies 2017- 本ブログと所属組織の公式見解は関係ございません。

Windows も ARM へ移行が進む?ARM64 にネイティブ対応する Visual Studio 2022

ARM64 ネイティブ対応の背景

Microsoft は Visual Studio 2022 で 64ビット化対応を完了しました。そして次のステップとして Visual Studio の ARM64 ネイティブ対応を急速に進めています。2022年9月7日現在、ARM64 Visual Studio 2022 はプレビュー版がリリースされており、年末までに GA される予定となっています。
 
ではなぜここにきて Microsoft は急速に Visual Studio 2022 は ARM64 ネイティブ対応を進めているのでしょうか。今回はその背景と現時点での進捗について確認していきます。また、実際に ARM64 Visual Studio 2022 のプレビュー版に触れてみた感触についてもレポートいたします。
 
 

背景その1 持続可能性の価値の高まり

MicrosoftがVisual Studio の ARM64 ネイティブ対応を進める理由の一つは、.NET アプリを ARM64ネイティブで運用できる環境を整えたい動機が高まっているからです。その大きな理由のひとつは「Sustainability(持続可能性)」への取り組みです。
 
ARM 64アーキテクチャはx64に比べ電力効率に優れており、コストだけでなく持続可能性に大きく寄与するポテンシャルを持っています。昨今、持続可能性への取り組みは企業価値を高める指標として重要な位置を占めており、アプリは単にユーザビリティとパフォーマンスが優れているだけではテクノロジーによる社会への貢献というアプリのミッションを果たすことはできなくなりつつあります。
 
また、アプリの開発ではこれまでQCDが重視されていましたが、今後は運用時のコストとエネルギーの消費にもいっそうの配慮が必要になるため、その有効なソリューションとしてARMアーキテクチャへの注目が高まっています。このような背景においては.NETの開発者としても既存アプリのマイグレーションや新規アプリ開発時に持続可能性の観点も含めARM 64アーキテクチャ採用の知見を蓄積していく必要があります。
 
特にスケールを前提としたサーバーコンピューティングではエネルギー削減効果が顕著であり、サービス提供側が関与できないクライアントコンピューティングと違い ARM64 の導入が進みやすい状況にあります。
 
なお、Azure ではすでに ARM64 対応の VM が2022年9月1日にGAされており、以下の画像のように East US リージョンなどですでに利用可能です。なお、ARM64 対応の VM は x64 の VM に比べ概ね20%程度安価になっています。

 
docs.microsoft.com
 
 

背景その2 エコシシテムの整備

Microsoft は2022年中にAI関連の開発者向けの NPU 搭載 ARM アーキテクチャ Windows PC である Project Volterra を投入予定です。NPU は Neural Processing Unitの頭文字で、ニューラルネットワークや機械学習の高速化を専門に処理するプロセッサです。過去に CPU とは別にグラフィックを専門に処理するGPUが搭載されていったように、昨今の AI 需要の高まりによって、NPU を CPU や GPU とは別に搭載するケースが出てきました。将来的には過去の GPU がそうだったようにほとんどのデバイスに NPU が搭載されることになるだろうと言われています。
 
www.youtube.com
 
例えば iPhone では 2017年発売の iPhone 8、iPhone X 世代の Apple A11 Bionic プロセッサから標準で NPU が内蔵されています。
 
Microsoftはこれまでに何度かWindows のARM対応を進めてきましたが、Windows単体のリリースにとどまり、積極的な訴求活動も行われなかったため本格的な普及はしませんでした。しかし、今回はこれまで述べたようにWindows 11 ARM 64だけでなく、開発環境を整備するためのProject Volterra やVisual Studio、Visual Studio Code、デプロイ環境である Azure やLinuxといったようなエコシステム全体への積極的な投資を進めています。また、Microsoftは既存アプリをARMプロセッサ搭載デバイスに移植するための支援も計画しています。
 
この流れは、Apple M1 以降のMacのARM64化の辺りから顕著になってきており、M1 Macの影響は大きかったと考えられます。
 
 

ARM64 Visual Studio 2022のインストール

ARM64 Visual Studio 2022 は、Windows 11 ARM 64で利用できます。
 
注意点としてARM64 Visual Studio 2022 をインストールするには、いったんインストール済みのVisual Studio 2022を全てアンインストールし、Visual Studio 2022 の最新のプレビューをインストールします。
 
visualstudio.microsoft.com
 
Windows 11 ARM 64の環境を手軽に準備するには、AzureのWindows 11 ARM 64 VMを利用するか、M1/M2搭載の Mac に Parallels を導入し Windows 11 のライセンスを用意するのが最も簡単です。(この記事では M1 Mac の環境で検証を行なっています。)
 
また、.NET 6 は既定で ARM64 ネイティブ対応ですが、 .NET Framework についてもバージョン4.8.1 をインストールすることで ARM64 ネイティブ対応となります。
 
PowerShell でインストールされている .NET Framework のバージョンを調べることができます。
 

Get-ChildItem 'HKLM:\SOFTWARE\Microsoft\NET Framework Setup\NDP' -Recurse | Get-ItemProperty -Name version -EA 0 | Where { $_.PSChildName -Match '.*L.*'} | Where { $_.Version -gt 4.8} | Select PSChildName, Version

 
以下のように「4.8.09037」以上が確認できれば、.NET Framework 4.8.1 がインストールされています。インストールされていなければ以下よりダウンロードできます。
 

PSChildName Version
----------- -------
Client      4.8.09037
Full        4.8.09037 

 
dotnet.microsoft.com
 
現在、ARM64で利用できるワークロードは以下の画像の通り「ASP.NETとWeb開発」「.NETデスクトップ開発」「C++によるデスクトップ開発」「ユニバーサルWindowsプラットフォーム開発」の4つです。今後、.NET MAUIなどの他のワークロードもサポートされる予定です。

 
x64版と同様に利用したいワークロードにチェックを入れて「ダウンドードしながらインストールする」を実行すればインストールされます。
 
 

ARM64 Visual Studio 2022の使用感とアプリのx64版からの移行


ARM64 Visual Studio 2022 のルックアンドフィールは x64版と違いはありません。違和感なくx64版と同じ感覚で使用できます。

 
違いはバージョン情報にARM 64版である表記が入るくらいです。

 
また、アプリの移行についても.NET の世界に閉じている場合、非常にスムーズです。
※アンマネージドのdllなどをラップしている場合には、ARM64に対応したdllを準備する必要があります。
 
実際に、x64 Visual Studio 2022で作成した簡単な.アプリを、コードを何も変更せずARM64 Visual Studio 2022でビルド、デバッグ実行した様子を以下でご紹介します。
 
 

.NET Framework アプリのARM64への移行

x64 Visual Studio 2022で作成した簡単な.NET Framework のアプリを、コードを何も変更せずARM64 Visual Studio 2022でビルドしてみました。簡単なアプリのため少ない機能しか使用されていませんが、ビルド完了までは非常にスムーズで問題なく成功しx64版となんら違いは見られませんでした。
 
注意点として既定のAny CPU のビルド構成でビルドするとDebug でもReleaseでもなぜかx86でビルドされ、エミュレーションでの実行となってしまいます。
 
構成マネージャー

 
実行アプリのアーキテクチャ



回避するには以下の画像のように明示的にビルド構成でARM64を構成した上でビルドすることで、ARM64ネイティブでビルド、実行されます。

構成マネージャー

 
実行アプリのアーキテクチャ

 
 

.NET6 アプリのARM64への移行

同様にx64 Visual Studio 2022で作成した簡単な .NET6 のアプリを、コードを何も変更せずARM64 Visual Studio 2022でビルドしてみました。こちらも簡単なアプリのため少ない機能しか使用されていませんが、こちらもビルド完了までは非常にスムーズで問題なく成功しx64版となんら違いは見られませんでした。
 
また、.NET6の場合は既定のAny CPU のビルド構成でビルドしても期待通りARM64ネイティブでビルド、実行されます。
 
構成マネージャー

 
実行アプリのアーキテクチャ

 
 

最後に

ここまで見たようにARM64 Visual Studio 2022はプレビュー版とはいえすでにかなりの完成度に達しており、ワークロード側の対応が進めば迅速にリリースされることでしょう。.NET6はすでにWindows、Linux、MacOS全てのプラットフォームでARM64対応のランタイムがリリース済みです。
 
クライアントPCがARMアーキテクチャーに置き換わっていくにはもう少し時間がかかりそうですが、サーバーコンピューティングはクラウドベンダーであるMicrosoftが自社の企業価値を高めるためにも、Azureでサービスを提供する企業が自社の企業価値を高めるためにも今後急速にARM対応は進んでいくと予想されます。
 
.NETの開発者としてはいち早く自社のアプリのARM対応について検証を進め、おそらく我々の予想より早く到来するであろう.NETアプリの多数がARMで運用される時代の到来に備えることをお勧めいたします。
 
なお、今後の.NETの予定ですが、11月に .NET 7 のリリースが控えています。11月8日から10日(現地時間)には、ローンチイベント「.NET Conf 2022」も開催予定ですので、今後の情報公開が楽しみです。