ARMアーキテクチャは、英Arm社が仕様を定めてライセンスしているRISC系のCPUアーキテクチャです。スマートフォンのSoC、家電のマイコン、MacのApple Silicon、AWSのGravitonまで、同じ命令セットの系譜で動いています。この記事では、同じC関数をarm64とx64向けにコンパイルした命令列を並べてx86との違いを確かめたうえで、Cortex-A・R・Mの種類と2025年の改名、Armv7からArmv9.8までの世代差、手元の環境がarm64かどうかを調べるコマンドまでを2026年10月時点の一次情報で整理します。
まとめ:ARMアーキテクチャの要点(2026年10月時点)
- ARMはRISC系の命令セットアーキテクチャ(ISA)。演算はレジスタ同士で行い、メモリに触れるのはロード/ストア命令だけ。AArch64の命令は全て4バイトの固定長。
- x86(x64)とはバイナリ互換がない。Arm版Windowsは「Prism」、MacはRosetta 2がx64アプリを変換して動かすが、Rosettaの一般アプリ対応はmacOS 27で終わる。
- Cortexは用途別にA(アプリケーション)・R(リアルタイム)・M(マイコン)の3系統。スマホ向けの新コアは2025年9月にCortex-A/Xから「C1」へ改名され、2026年9月8日にはC2-Ultra・C2-Proが発表された。Cortex-MとCortex-Rは今もCortex名で売られている。
- 世代はArmv8-Aで64bit(AArch64)になり、Armv9-A(2021年)以降はSVE2・SMEなどのベクトル・行列拡張が中心。拡張は毎年1版ずつ追加され、2026年9月の仕様文書でArmv9.8が加わった。
- Arm社は2026年3月から自社チップも売っている。IPのライセンス、検証済みサブシステム(CSS)、完成品のArm AGI CPUの3形態になった。
- 移行の難所は命令セットではなく依存関係。コンテナのマルチアーキ対応と、ネイティブ拡張・ドライバのarm64版の有無で難易度が決まる。
ARMアーキテクチャの仕組み:RISC設計とA・R・Mの3プロファイル
ARMアーキテクチャは、Armプロセッサが命令をどう実行し、例外やメモリをどう扱うかを定めた仕様(ISA)です。その仕様を満たすCPUコアの設計(マイクロアーキテクチャ)はArm社や各社が別に作り、同じArmv9でも性能や消費電力は実装ごとに変わります。ISAとしてはRISC(Reduced Instruction Set Computer)に分類され、命令の長さと形をそろえ、メモリアクセスをロード/ストア命令に限る設計を取ります。命令の解読(デコード)を単純にできるのが設計上の利点で、CPU全体の電力効率はそこにプロセス技術やキャッシュ構成などの実装が加わって決まります。
ARMの読み方と語源:Acorn RISC MachineとArm社の設立
ARMは「アーム」と読みます。英Acorn Computers社のAcorn RISC Machineが原型で、最初のARM1は1985年に動きました。1990年にAcorn・Apple・VLSI Technologyの合弁としてAdvanced RISC Machines Ltd(現在のArm社)が設立されています。企業・ブランドとしては「Arm」、アーキテクチャ名や歴史的な文脈では「ARM」と書かれ、英語では「Arm architecture」です。
Aプロファイル・Rプロファイル・Mプロファイルの違い
ARMの仕様は用途別に3つのプロファイルに分かれます。A(Application)は仮想記憶のMMUを持ち、Linux・Android・iOS・Windowsのような汎用OSを動かすためのもの。R(Real-time)は割り込みへの応答時間を一定に保つことを優先し、ストレージコントローラや車載の制御に使われます。M(Microcontroller)は数十KBのRAMで動くマイコン向けで、命令は16bit中心のThumbだけを実行します。版の表記「Armv9-A」の末尾の「A」はこのAプロファイルを指し、Rプロファイルなら「Armv8-R」、Mプロファイルなら「Armv8-M」のように書きます。
ARMの設計上の特徴:同じC関数によるArm・x86の命令列比較
RISCかCISCかという分類だけでは、ARMの設計が何を選んだのかが見えません。そこで、3つの小さなC関数を4種類の命令セット向けにコンパイルし、出てくる機械語を逆アセンブルして並べました。使ったのはzig 0.16.0に同梱のClang(zig cc -O2 -fomit-frame-pointer、比較しやすいようループ展開と自動ベクトル化は無効)で、32bit Armは -mcpu=cortex_a7 を指定し、2026年10月18日にmacOS上で生成しています。なお sum の long は、32bitのA32・T32では4バイト、64bitのAArch64・x86-64では8バイトになるため、後の合計バイト数はABIの違いも含んだ値です。
void add_mem(int *a, const int *b, const int *c) { *a = *b + *c; }
int max2(int a, int b) { return a > b ? a : b; }
long sum(const int *p, long n) { long s = 0; for (long i = 0; i < n; i++) s += p[i]; return s; }
ロード/ストア型:メモリ上の値を演算するときの命令数
1つ目の add_mem(メモリ上の2つの値を足して書き戻す)で、設計の違いが一番はっきり出ました。
# AArch64(arm64): 5命令・20バイト
ldr w8, [x1] // *b をレジスタへ
ldr w9, [x2] // *c をレジスタへ
add w8, w9, w8 // レジスタ同士で加算
str w8, [x0] // *a へ書き戻す
ret
# x86-64: 4命令・7バイト
movl (%rdx), %eax # *c をレジスタへ
addl (%rsi), %eax # *b をメモリから直接読んで加算
movl %eax, (%rdi) # *a へ書き戻す
retq
x86の addl (%rsi), %eax は、メモリの読み出しと加算を1命令でこなしています。Armの演算命令はレジスタ(と即値)しか相手にせず、メモリに触れるのは ldr/str だけなので、メモリ上の値を足すには先に読み込む命令が要ります。これがロード/ストア型の設計で、1命令あたりの仕事を単純にそろえておくと、デコード回路が小さくなり、パイプラインに命令を流し込みやすくなります。
固定長命令:AArch64の4バイトとx86の1〜15バイトの差
出力のバイト数を見ると、AArch64の命令はどれも4バイトでした。x86-64の命令は retq の1バイトから movslq (%rdi,%rcx,4), %rdx の4バイトまでばらつき、関数の先頭位置をそろえる詰め物(nop)には9バイトの命令も出ています。x86の命令長は最大15バイトです。命令の境目が決まっていれば、CPUは複数の命令を同時に切り出してデコードできます。x86は前の命令の長さが分かるまで次の命令の開始位置が確定しないため、その判定に回路と電力を使います。
一方、コードの小ささではx86が勝ちました。3関数の実コードはx86-64が44バイト(詰め物込みで68バイト)、AArch64が80バイトです。固定長は、デコードのしやすさと引き換えにコード密度を手放しています。
条件実行とThumb:A32・T32・A64の命令形式とコードサイズ
2つ目の max2(大きい方を返す)では、世代ごとの違いが出ました。
| 命令セット | max2の命令列 | 3関数の合計 |
|---|---|---|
| A32(32bit Arm命令) | cmp → movle → bx lr |
76バイト |
| T32(Thumb-2) | cmp → it le → movle → bx lr |
42バイト |
| A64(AArch64) | cmp → csel → ret |
80バイト |
| x86-64 | mov → cmp → cmovg → retq |
44バイト |
A32の movle は、普通の転送命令に「直前の比較で以下だったときだけ実行する」という条件が付いた形です。A32は大半の命令に4bitの条件フィールドを持ち、短い分岐を命令列から消せるのが特徴でした(T32は it 命令で後続の命令に条件を付けます)。AArch64は汎用的な条件フィールドをやめ、条件付きの処理を csel(条件選択)や条件分岐などの専用命令に絞っています。AArch64では汎用レジスタも31本に増えています。
T32は16bitと32bitの命令を混ぜる符号化で、A32で76バイトだった3関数を42バイトに縮めました。フラッシュメモリが数十〜数百KBしかないマイコンではこの差が効くため、Cortex-MはThumb命令だけを実行します。3つ目の sum(配列の合計)では、AArch64の ldrsw x9, [x0], #0x4 が「読み込み」と「ポインタを4バイト進める」を1命令で済ませており、ループ本体はAArch64もx86-64も16バイトでした。
ARMの特徴は命令の数が少ないことではありません。デコードしやすい固定長・ロード/ストア型を基本にし、メモリが小さいマイコン向けにはThumbでコード密度を取り戻す、という使い分けを続けてきたことです。命令長の比較をRISC-Vまで広げた実測はRISC-VとArm・x86の違いを比較|ライセンス・命令長・OS対応で選ぶ【2026年】にあります。
Arm社のビジネスモデル:IPライセンス・CSS・自社チップの3形態
Arm社はもともと、半導体を製造せずに設計の権利を売る会社です。収益は、設計を使う権利へのライセンス料と、その設計を載せたチップが出荷されるたびに入るロイヤリティの2本立てで、2026年4〜6月期(FYE27第1四半期)の決算では売上高12億8,900万ドルのうちロイヤリティが7億1,500万ドル、ライセンスその他が5億7,400万ドルでした。ライセンスには、Arm設計のコアをそのまま使う形と、命令セットの仕様だけを使って自社でコアを設計するアーキテクチャライセンス(AppleやQualcommのオリジナルコアがこの形)があります。
2023年8月には、CPUコアにインターコネクトなどを組み合わせて検証まで済ませたNeoverse CSS(Compute Subsystems)を始め、単体のコアIPより上の階層を売るようになりました。さらに2026年3月24日、Arm自身が設計したデータセンター向けCPUArm AGI CPUを発表し、完成品のシリコンの提供に踏み出しています。製品資料の仕様表は136コア・128コア・64コアの3構成で、最大周波数は136コア版と128コア版が3.5GHz、64コア版が3.7GHz、Base TDPはいずれも300Wです。「Arm社はチップを作らない」という説明は、2026年以降は正確ではありません。仕様と出荷状況の詳細はArm AGI CPUとは?136コアの仕様・ソシオネクストとの関係と出荷状況【2026年10月】で扱っています。
x86(x64)との違い:arm64との仕様比較とアプリ互換性
「arm64」「aarch64」「ARM64」は同じものを指し、「x64」「x86_64」「amd64」がIntel/AMD系の64bit環境です。両者はバイナリ互換がありません。ダウンロードページで迷ったときは、次の表の「表記」の行で読み替えてください。
| 観点 | ARM(arm64 / AArch64) | x86(x64 / x86_64) |
|---|---|---|
| 設計分類 | RISC(固定長・ロード/ストア型) | CISC(可変長・メモリ演算可) |
| 命令長 | 4バイト固定(A64命令) | 1〜15バイト |
| 汎用レジスタ | 31本(64bit) | 16本(APX拡張で32本) |
| 供給の形 | Arm社がIPを供与し各社が実装(2026年から自社チップも) | Intel・AMDなどが設計・販売 |
| SIMD拡張 | NEON・SVE2・SME | SSE・AVX2・AVX-512・AVX10 |
| 表記 | arm64・aarch64・ARM64 | x64・x86_64・amd64 |
NEONとAVX2の使い方の違いはSIMDとは?AVX2・NEONの仕組みと自動ベクトル化・組み込み関数の書き方で、組み込み関数のコード付きで比べています。
Prism・Rosetta 2で動くものと動かないものの境界
arm64のPCで既存のx64アプリが動くのは、OSがバイナリを変換しているからです。MicrosoftのHow emulation works on Armによると、Windows 11 on Armはx86・x64の両方のエミュレーションに対応し、Windows 11 24H2には変換エンジン「Prism」が含まれます。変換の対象はユーザーモードのコードだけで、カーネルドライバは対象外です。アンチウイルスやVPNクライアントのようにドライバを伴うソフトは、arm64版のドライバが無いと動きません。x64専用のプラグインは別の問題で、ホストのアプリがArm64ネイティブだと同じプロセスに読み込めません。ホストアプリがx64のまま動いているか、x64コードとの混在に対応したArm64ECでビルドされていれば読み込めます。以前はAVX命令を使うアプリも動きませんでしたが、Microsoftの互換性資料ではWindows 11 24H2以降のPrismがAVX・AVX2・BMI・FMA・F16Cに対応したとされています。
Mac側では、Appleがサポート文書で、Rosettaによる一般的なIntelアプリの対応をmacOS 27までとし、macOS 28以降はIntel向けフレームワークに依存する古いゲームの一部に限ると案内しています。Macでx64バイナリに頼る構成は期限付きなので、arm64ネイティブ版への置き換えを前提に計画してください。
手元のPCとサーバーがarm64かx64かを確認するコマンド
# Windows(PowerShell): CPU自体の種類。12 なら ARM64、9 なら x64
(Get-CimInstance Win32_Processor).Architecture
# Windows(PowerShell): プロセスから見たアーキ。ARM64 / AMD64 が返る
echo $env:PROCESSOR_ARCHITECTURE
# macOS: Appleシリコンは arm64、Intel Macは x86_64
uname -m
# macOS(Appleシリコン): 1 ならこのシェルはRosetta 2の変換下で動いている
sysctl -n sysctl.proc_translated
# Linux: aarch64 ならArm、x86_64 ならIntel/AMD
uname -m
Windowsの環境変数には落とし穴があります。エミュレーション下のアプリがプロセッサ情報を問い合わせると、エミュレートされたCPUの情報が返るため、x64版のシェルから実行するとArm PCでもAMD64と表示されることがあります。迷ったら1行目のCIMの値か、「設定 > システム > バージョン情報」の「システムの種類」に「ARM ベース プロセッサ」と出るかで判断してください。Macでも、Rosetta 2経由で起動したターミナルでは uname -m がx86_64を返すので、 sysctl.proc_translated の値で変換中かどうかを確かめます。Linuxのコマンドの使い分けはLinuxのバージョン確認:OS確認コマンドの早見表とos-release・unameの使い分けにまとめています。
実行ファイル・ライブラリの対象アーキテクチャの確認
# Linux / macOS: ELF・Mach-Oの対象アーキが表示される
file ./app
# ELF 64-bit LSB executable, ARM aarch64, ... ← arm64向け
# ELF 64-bit LSB executable, x86-64, ... ← x64向け
# Linux: ELFヘッダの Machine 行だけを見る
readelf -h ./libfoo.so | grep Machine
# macOS: ユニバーサルバイナリに含まれるアーキを列挙する
lipo -archs ./MyApp
# Windows(Visual Studio の開発者コマンドプロンプト)
dumpbin /headers app.exe | findstr machine
Pythonのホイールなら、ファイル名末尾の manylinux_2_28_aarch64 や macosx_11_0_arm64 がプラットフォームタグです。純Pythonの none-any や、macOSでx86_64とarm64を1つにまとめた universal2 もarm64で動きます。これらのどれにも当たらない依存パッケージは、ソースからビルドするか代替を探すことになります。
Armv7・Armv8・Armv9の違い:64bit化とベクトル・行列拡張
「Armv◯-A」は命令セットの世代で、Cortex-A78やC1-Ultraのような個々のCPU製品名とは別の軸です。1つのCPUは「Armv9.2-Aに準拠し、SMEを実装」のように、版と任意拡張の組み合わせで仕様が決まります。
| 版 | 主な追加 | 搭載例 |
|---|---|---|
| Armv7-A | 32bit(AArch32)・Thumb-2・NEON | Cortex-A7・A9・A15 |
| Armv8-A(2011年発表) | 64bitのAArch64(A64命令) | Cortex-A53・A72(Raspberry Pi 4) |
| Armv8.2-A | 半精度浮動小数点・内積命令など | Cortex-A76(Raspberry Pi 5) |
| Armv9-A(2021年3月) | SVE2・機密計算(CCA) | Cortex-X2以降 |
| Armv9.2-A | SME・SME2を任意で実装可能 | Apple M4(SME2) |
| Armv9.3-A | — | C1-Ultra・C1-Pro(2025年9月) |
| Armv9.7-A(2025年) | AI向け6bitデータ型・MPAMv2 | — |
| Armv9.8-A(2026年) | 条件付きフォルト命令など | — |
Armv7とArmv8の違い:AArch64の実行状態とレジスタ構成
分岐点はArmv8-Aです。この世代で64bitの実行状態AArch64が導入され、汎用レジスタは64bit幅の31本になりました。32bitの実行状態はAArch32として残されています。Armv7-Aは32bitのみで、1プロセスの仮想アドレス空間は原則4GBまでです(LPAEで物理アドレスは広げられますが、プロセス側の上限は変わりません)。前の章で見た条件実行の廃止もこの切り替えで起きた変更です。モバイル向けの最近のコアは32bit実行の対応を外しています。
Armv9のSVE2・SME:CPUでベクトルと行列を回す拡張
Armv9-Aは2021年3月に発表され、当初の柱はベクトル長に依存しないSIMDのSVE2と、機密計算の枠組みCCAでした。行列演算向けのSMEは、Arm社の仕様文書で「Armv9.2から任意(OPTIONAL)」と定義されており、拡張版のSME2も同じくArmv9.2以降で任意に実装できます。Arm社の開発者向け資料は、Apple M4搭載機をSME2で行列積を速くする対象機種として挙げています。2025年9月10日に発表されたモバイル向けのLumex CSSは、SME2に対応したArmv9.3のCPUクラスタ(C1-Ultra・C1-Proなど)を中核にしています。
拡張は毎年1版ずつ足されています。2025年10月2日のArm開発者ブログで公表されたArmv9.7-Aは、AIモデル向けの6bitデータ型(OCP MXFP6)を扱うSVE・SME命令と、資源配分機能MPAMv2を追加しました。2026年9月28日版の仕様文書「Feature names in A-profile architecture」にはArmv9.8の章が加わり、条件付きフォルト命令(FEAT_CFLT)などが定義されています。版の数字が新しいことと、そのCPUが製品として手に入ることは別なので、CPUを選ぶときは版ではなく「どの拡張を実装しているか」を見てください。
CPUのSVE2・SME対応状況の確認コマンド
# Linux: CPUの機能フラグから主要なSIMD拡張だけを抜き出す
grep -m1 '^Features' /proc/cpuinfo | tr ' ' '\n' | grep -x -E 'asimd|sve|sve2|sme|sme2'
# macOS(Appleシリコン): SME系の機能フラグ。対応チップでは値が 1 になる
sysctl hw.optional.arm | grep -i sme
Linuxで出る文字列は、カーネルがユーザー空間に知らせるハードウェア機能(HWCAP)で、どのフラグがどのIDレジスタから立つかはカーネル文書ARM64 ELF hwcapsに一覧があります。asimdはNEON相当の128bit SIMDで、64bitのArm環境ならまず存在します。ただし、フラグはCPUが機能を持つかを示すだけで、sve2が無いときにNEON版へ切り替えるか、スカラー処理になるか、起動に失敗するかはライブラリの実装次第です。高速化を期待するライブラリは、ビルド時の対象と実行時の機能判定(ディスパッチ)の両方を確認してください。
ARMコアの種類:Cortex-A・R・Mの3系統とC1・C2への改名
Cortexは「コーテックス」と読み、Arm社が自社設計のCPUコアに付けてきたブランドです。末尾の1文字が前述のプロファイルに対応し、スマホの最上位コアには別系列のCortex-X(X925など)がありました。
| 系統 | 用途 | 代表的なコア | 搭載例 |
|---|---|---|---|
| Cortex-A | スマホ・PC・SBC | A53・A72・A76・A720 | Raspberry Pi 4・5 |
| Cortex-R | ストレージ・車載制御 | R52・R82・R82AE | SSDコントローラ・Zena CSS |
| Cortex-M | マイコン・IoT | M0+・M4・M33・M52・M55・M85 | RP2040・RP2350 |
| Neoverse | サーバー・インフラ | N2・V2・V3 | AWS Graviton・Arm AGI CPU |
Cortex-Mはマイコンの標準的な選択肢で、Raspberry Pi PicoのRP2040はCortex-M0+、Pico 2のRP2350はCortex-M33を積んでいます。RP2350はCortex-M33とRISC-Vコア(Hazard3)のどちらで起動するかを選べるため、同じボードでArmとRISC-Vを比べられます。ボードの違いはRaspberry Pi Pico Wとは?WH・Pico 2 Wとの違い、できることとWi-Fi接続【2026年10月】、Cortex-A系のシングルボードコンピュータはRaspberry Pi 5とPi 4の違いを比較|スペック・性能・価格と選び方【2026年10月】で扱っています。Cortex-MやCortex-Rの上で動かすOSの選び方はRTOSとは?リアルタイムOSの仕組み・主要製品の比較と採用判断を実装者目線で解説が参考になります。
Neoverse・Niva・Lumex・Zena・Orbisの新命名とC1・C2シリーズ
Arm社は2025年5月15日の発表The Arm Evolution: From IP to Platform for the AI Eraで、製品を市場別のプラットフォーム名で呼ぶ方式に切り替えました。インフラ向けがNeoverse、PC向けがNiva、モバイル向けがLumex、車載向けがZena、IoT向けがOrbisです。続く2025年9月のLumex CSSで、CPUコアはC1-Ultra・C1-Premium・C1-Pro・C1-Nanoという名前になり、これまでのCortex-X・Cortex-A7xx・Cortex-A5xxの後継の位置に入りました。
1年後の2026年9月8日には、次の世代が「Arm CSS for Mobile 2」として発表されています。CPUはC2-UltraとC2-Proで、C2-UltraはC1-Ultra比で1スレッド性能が最大15%、AI性能が最大1.7倍とされています。発表文はLumexの名前を使っておらず、プラットフォーム名の扱いはまた変わりつつあります。いずれもArm社がSoCメーカーにライセンスする設計で、搭載スマホが出るのはその後です。
改名の範囲には注意が必要です。Cortexの名前が消えたのはスマホ・PC向けのCortex-A/Xの後継だけで、Arm社の製品ページでは今もCortex-M52やCortex-R82AEがCortex名のまま掲載され、Zena CSSのリアルタイム処理もCortex-R82AEが担っています。「Cortex-Aの最新版」を探すならC1・C2のCシリーズを、マイコンなら引き続きCortex-Mを見てください。
ARMアーキテクチャの採用領域:スマホ・PC・クラウドの現在地
スマートフォン:CPU・GPU・NPUを1チップにまとめたSoC
QualcommのSnapdragon、MediaTekのDimensity、AppleのAシリーズは、いずれもARMの命令セットを実装したSoCです。1チップに高性能コアと高効率コアを組み合わせたCPU、GPU、NPUを載せ、限られた電池容量で性能を出す構成です。モデムは同じチップに統合する製品と、AppleのC1のように別チップにする製品があります。NPUとCPU・GPUの役割分担はNPUとは?CPU・GPUとの役割分担とTOPSの実効性能・採用判断【2026年版】で扱っています。
PC:Apple SiliconとSnapdragon Xの2系統
MacはApple Silicon(M系)に移行済みで、CPU・GPU・Neural Engineを統合メモリで結ぶ構成です。Neural Engineの役割はNeural Engine(ANE)とは?16コアの意味・Neural Acceleratorとの違い・M6世代の変化、統合メモリを使ってMacでLLMを動かす例はMLXとは?Apple SiliconでLLMを動かすmlx-lmの導入手順と採用判断で扱っています。Windows側はQualcommのSnapdragon Xシリーズが中心で、2025年9月に発表されたSnapdragon X2 Eliteを載せたPCが2026年に出荷されています。
クラウド:Graviton5搭載インスタンスの東京リージョン提供
Armサーバーの主戦場はクラウドです。AWSは2026年6月10日にGraviton5搭載のEC2 M9g・M9gdを一般提供し、M8g比で計算性能最大25%の向上を掲げました。2026年9月3日からは東京リージョンでもC9g・C9gdが使えます。選ばれる理由はCPU単体の最高性能ではなく、ワットあたり・コストあたりのスループットです。AWSがArmチップに投資する狙いはAWS Graviton5とは?Metaの数千万コア契約とAI推論でCPUが選ばれる理由で解説しています。
arm64への移行:クロスビルドと依存関係の確認手順
Armへの移行で最初に詰まりやすいのは、命令セットそのものより依存関係です。自作コードでも、x86のインラインアセンブリやSSE・AVXの組み込み関数、メモリ順序に頼った並行処理はarm64で書き直しや再検証が要ります。「arm64向けにビルドが通るか」「コンテナイメージ」「ネイティブ部品」「実行先」の順に確かめると手戻りが少なく済みます。
x64開発機でのarm64向けクロスビルドとQEMU実行
# 前提: main関数を含む hello.c を用意しておく
# クロスコンパイラとユーザーモードQEMUを入れる(Ubuntu)
sudo apt install -y gcc-aarch64-linux-gnu qemu-user
# arm64向けに静的リンクでビルドし、x64上でQEMUに変換実行させる
aarch64-linux-gnu-gcc -O2 -static -o hello-arm64 hello.c
file ./hello-arm64
qemu-aarch64 ./hello-arm64
ここで確かめられるのは、arm64向けにビルドが通って正しく動くかまでです。QEMUのユーザーモードは命令を変換しながら実行するので、性能の評価には使えません。速度とコストの比較はGravitonなどの実機で測ってください。アーキごとに処理を分けたいときは、GCC・Clangがarm64向けビルドで定義するマクロ __aarch64__ で分岐できます。
buildxによるマルチアーキテクチャイメージの作成と確認
# 前提: マルチプラットフォーム対応のbuilder・Dockerfile・レジストリへのログインが済んでいること
# arm64とx64の両方を1つのタグにまとめて push する(registry.example.com は自分のレジストリに置き換える)
docker buildx build --platform linux/amd64,linux/arm64 \
-t registry.example.com/app:1.0 --push .
# タグに入っているプラットフォームを確認する
docker buildx imagetools inspect registry.example.com/app:1.0
# DockerfileのFROMに書いたベースイメージがarm64版を出しているかを確認する
docker buildx imagetools inspect node:22-slim
マルチアーキのイメージなら、 imagetools inspect の出力にマニフェストリストとプラットフォームごとのイメージが並び、そこに linux/arm64 が無ければarm64のノードでは起動しません。単一プラットフォームのイメージは一覧にならないので、イメージ設定のアーキテクチャを見ます。ベースイメージの対応状況は、完成したイメージからは分からないため、FROMに書いたタグを同じコマンドで調べてください。ビルド方式の選び方はDocker公式のMulti-platform builds、仕組みはBuildKitとは|Dockerの新ビルドバックエンドの仕組み・キャッシュ/secret/マルチアーキと採用判断を実装者目線で解説、CIでの組み方はGitHub ActionsでDockerイメージをビルドする|push先とキャッシュ・マルチアーキの設計とGitHub Actionsのruns-on|ラベル指定の記法と-latest更新・arm64への備えにあります。
ネイティブ拡張・ドライバ・商用エージェントの棚卸し
Pythonのネイティブ拡張、Node.jsのnative addon、JavaのJNIライブラリ、監視やセキュリティの商用エージェントは、arm64版が配布されていなければ自前ビルドか代替探しになります。言語ごとの注意点はAWSがGitHubで公開しているAWS Graviton Technical GuideにJava・Python・Go・.NETなどの章があり、自分の構成に関係する章だけ読めば足ります。AWSではインスタンスタイプだけ変えてもAMIがx64用のままなら起動しないので、AMI・起動テンプレート・Auto Scaling・コンテナイメージの4点をそろえてarm64へ切り替えてください。既存のx64構成からGravitonへの移行設計を外部に任せたい場合は、一創のインフラ構築(AWS・Google Cloud・Azure)で依存部品の棚卸しから相談を受け付けています。
Armを採用すべき場面と見送る場面の判断基準
全部をArmにするか、全部をx64のままにするかの二択で考える必要はありません。ワークロード単位で分けると判断は単純になります。
Armに移してよいのは、Web・APIサーバー、コンテナ化したステートレスな処理、Java・Python・Node.js・Goなどのランタイム上で動くアプリケーション、Arm版が用意されたマネージドのデータベースやキャッシュです。依存がOSSとランタイムで閉じていることが多く、マルチアーキのイメージを用意すればインスタンスを切り替えて比べられます。コストが下がるかは、同じ負荷で必要になるインスタンス数と単価、移行の手間を実測で比べて判断します。開発機がAppleシリコンのMacなら、ローカルと本番のアーキがそろう利点もあります。
見送るべきなのは、x64専用のドライバやハードウェアキーに依存するシステム、AVX-512向けに手で調整した数値計算、ベンダーがarm64をサポート対象外としている商用ソフトが業務の中心にある環境です。商用ソフトは「動くか」ではなく「サポートされるか」で判断し、保守契約の対象外になる構成は本番に置かないでください。迷う場合は、開発・検証環境とステートレスなWeb層だけを先に移し、性能とコストを実測してから範囲を広げます。
Armの将来性:自社チップへの拡大とRISC-Vという対抗軸
Arm社は単体コアのIPからCSS、さらに自社チップへと、売る単位を上の階層へ広げています。これは顧客の開発負担を減らす一方、同じ市場でチップを売る顧客と競合する面も持ちます。実際、Armとアーキテクチャライセンスを結ぶQualcommとの間では訴訟が続いており、2026年10月13日には陪審評決が出ました(Arm側の発表では、4件の請求でArmが支持され、Qualcommが勝った2件の損害賠償は各1ドル)。
対抗軸はRISC-Vです。ライセンス料のかからないオープンなISAで、マイコンや専用アクセラレータのようにソフト資産の縛りが弱い領域から広がっています。スマホやサーバーのように既存のソフトウェア資産が効く領域では、当面はArmが優位です。ライセンス契約の種類、訴訟の両社の主張、命令長の実測まで含めた比較はRISC-VとArm・x86の違いを比較|ライセンス・命令長・OS対応で選ぶ【2026年】にまとめています。
よくある質問
ARMの読み方と正式名称は?
「アーム」と読みます。Advanced RISC Machinesの略で、さらに遡るとAcorn RISC Machineが起源です。企業・ブランドとしては「Arm」、アーキテクチャ名としては「ARM」「Armv9-A」のような表記が使われます。
ARMとx86はどちらが速いですか?
アーキテクチャだけでは決まらず、比べる製品とワークロード次第です。ISAが同じでもApple M系、Snapdragon X、Gravitonでは設計も消費電力もまったく違い、x86側も同様です。クラウドならArmとx86のインスタンスに同じ負荷をかけ、処理量・応答時間・時間あたり単価を並べて決めるのが確実です。参考までに、AWSはGraviton5搭載のM9gを前世代のGraviton4(M8g)比で計算性能最大25%向上としていますが、これはArm同士の世代比較です。
armv7とarmv8の違いは何ですか?
Armv8-Aで64bitの実行状態AArch64が導入された点が最大の違いです。汎用レジスタが64bit幅の31本になり、A32が大半の命令に持っていた条件フィールドは無くなって、 csel などの専用命令に置き換わりました。Armv7-Aは32bitのみで、1プロセスが扱える仮想アドレス空間は原則4GBまでです。
Arm版のWindows PCで既存のアプリは動きますか?
多くは動きます。Windows 11のPrismがx86・x64のアプリを変換して実行し、24H2以降はAVX・AVX2を使うアプリにも対応しました。ただしカーネルドライバは変換の対象外なので、一部のセキュリティソフト、VPN、周辺機器のドライバはarm64版が無いと動きません。
Cortex-Aシリーズの最新版はどれですか?
スマホ向けの新しいコアは2025年9月からCortex-Aの名前を使っていません。2025年9月にLumex CSSのC1シリーズ(C1-Ultra・C1-Premium・C1-Pro・C1-Nano、C1-UltraとC1-ProはArmv9.3世代)が出て、2026年9月8日にはArm CSS for MobileとしてC2-Ultra・C2-Proが発表されました。2026年10月時点で設計として最も新しいのはC2世代です。マイコン向けのCortex-Mとリアルタイム向けのCortex-Rは、今もCortexの名前で提供されています。