Mac版Steamだけで何が遊べるのか を書いたとき、思っていたより大事な発見がありました。ユニバーサルバイナリを配っているゲームなのに、Steamから起動するとRosettaで動いていたという話です。同じ絵を出すのにCPUの仕事が1.44倍かかっていました。

あのときは「そういうことが起きる」で終わったのですが、読み返して物足りなさが残りました。では、買う前にどうやって見分けるのか。ここが書けていません😅

そこで今回は「探し方」に振りました。調べられるタイミングは3つあって、それぞれ分かることと分からないことがはっきり違います。ぜんぶ手元のMacで実測しています。

先に結論です。

  • ★買う前に分かるのは「macOSで動くか」までで、ネイティブかどうかは分かりません
  • ★アプリ48本を中身まで調べたら、本体はネイティブなのに中にIntel専用が混ざっているものが23%ありました
  • ★Rosettaの代償は「計算」ではなく「メモリ」に出ます(整数演算0.99倍に対しメモリ走査1.7倍)

【前置き】「macOS対応」と「Apple Silicon対応」は別の話

スポンサーリンク

いまのMacはApple Silicon(M1〜M4など)で動いています。しかし、ゲームやアプリの中にはIntel時代のMac向けに作られたままのものがあります。それらは Rosetta 2 という仕組みで翻訳されて動きます。

問題は、ストアに並んでいる情報が「macOSで動くかどうか」しか教えてくれないことです。中身がIntel向けなのかApple Silicon向けなのかは、書いていないことのほうが多いのです。

用語集

用語平たく言うとなぜそれが効くのか
x86_64Intel向けの命令の形式これしか入っていなければRosettaでしか動かない
arm64 / arm64eApple Silicon向けの命令の形式。e はポインタ認証という保護つき★arm64e もれっきとしたネイティブ。見落とすと集計が壊れる
ユニバーサルバイナリ1つのファイルに両方の形式を入れたものどちらのMacでも動く。★入っていても、選ばれるとは限らない
Rosetta 2Intel向けのプログラムを、実行前に翻訳して動かす仕組み動くが代償がある。★どこに代償が出るかを後で測る
Mach-OmacOSの実行ファイルの形式。アプリの中に何十個も入っている★本体だけ見ても足りないのはこのため
lipoMacに最初から入っている、実行ファイルの中身を調べるコマンド買ったあとなら、これ1つで判定できる
メモリ順序
(TSO)
「書いた順に見えること」をどこまで保証するかの決まり。IntelとApple Siliconで違う★Rosettaが遅くなる理由がここにある

【全体像】調べられるタイミングは3つある

3つのタイミングで、分かることが違う 右へ行くほど確実になるが、右へ行くには先にお金と時間を払うことになる ① 買う前 ストアの表記・システム要件 分かる: macOSで動くかどうか 分からない: ネイティブかどうか 要件の文面は更新されていない ことがある ② 入れたあと lipo -archs 分かる: 何が入っているか ★中身まで見ないと足りない 本体はネイティブでも、 同梱物がIntelのことがある ③ 動かしている間 vmmap / 種類の列 分かる: いまどちらで動いたか ★ここだけが答え合わせ 持っていることと、 選ばれることは別 ①で分かるのは入口だけ。②で中身が分かり、③で「実際にどちらが選ばれたか」が確定する。

【① 買う前】ストアの表記から分かること・分からないこと

Steamには公開されたAPIがあり、タイトルごとの対応プラットフォームを取れます。無料・オープンソースのタイトルだけを対象に調べました。

https://store.steampowered.com/api/appdetails?appids=(番号)
    → platforms: { "windows": true, "mac": true, "linux": true }

結果です。右の列は、システム要件の文面にアーキテクチャの手がかりがあったかを見たものです。

タイトルmacOS対応要件の文面にある語実物(lipoで確認)
Endless Sky(GPL3)true(何も書いていない)ユニバーサル
Battle for Wesnoth(GPL2)trueIntelユニバーサル
Dota 2trueIntel—
Counter-Strike 2false——
Team Fortress 2falseIntel—
ValheimtrueM1 / M2—

★「macOS対応」はtrue/falseしかない
APIが返すのは動くかどうかだけで、アーキテクチャの情報はどこにもありません。
しかもBattle for Wesnoth は要件に「Intel」と書いてあるのに、実物はユニバーサルでした。要件の文面はIntel Mac時代のまま更新されていないことがあります。逆にEndless Sky は何も書いていないのにユニバーサル。
★書いてあれば手がかりになるが、書いていないことは何の情報でもない——これが①の限界です。

もうひとつ、過去に対応していたからといって、今も対応しているとは限りません。Counter-Strike 2 と Team Fortress 2 は、どちらも mac: false でした。古い記事を見て「Macでも遊べる」と思って買うと、そこで止まります。

【② 入れたあと】lipo で実行ファイルを見る

入れてしまえば確実に分かります。Macに最初から入っている lipo を使います。

$ lipo -archs "/Applications/○○.app/Contents/MacOS/○○"
x86_64 arm64      ← ユニバーサル(どちらでも動ける)
arm64             ← Apple Silicon専用
x86_64 arm64e     ← ★これもユニバーサル
x86_64            ← ★Intel専用。Rosettaでしか動かない

手元の /Applications の46本と、Steamで入れたゲーム2本、あわせて48本を分類しました。

分類本数割合
ユニバーサル3368.8%
Apple Siliconのみ816.7%
判定できず(ブラウザの外側だけのアプリなど)510.4%
Intel専用24.2%

Intel専用だったのは2本だけでした。Macのアプリ側の移行は、もうほとんど終わっています。

⚠ arm64e を「ネイティブではない」と数えない
p971で同じ集計をしたとき、arm64e を除外してしまい、87本中48本(55%)がIntel専用という、明らかにおかしい結果を出しました。macOSのシステムアプリはほとんどが arm64e です。判定は「arm64 で始まるか」で見るのが安全です。

【② 承前】中身まで見たら、23%が混ざっていた

ここからが今回の本題です。アプリは1つの実行ファイルでできているわけではありません。中にヘルパーやライブラリが何十個も入っていて、それぞれが別の実行ファイルです。

そこで、48本すべてについてバンドルの中のMach-Oを全部調べました。結果、本体はネイティブなのに、中にIntel専用が混ざっているアプリが11本(23%)ありました。

アプリIntel専用 / 中の実行ファイル総数割合
Speedtest31 / 4667%
Epic Games Launcher15 / 2952%
Ollama7 / 1839%
VMware Fusion18 / 10018%
Visual Studio Code6 / 4713%
OneDrive11 / 11410%
Xcode128 / 1,9197%
Google Chrome3 / 645%
Docker3 / 734%

ゲームの文脈でいちばん効くのは Epic Games Launcher の52%です。ゲーム本体がネイティブでも、起動を仲介するランチャーがIntel向けなら、その部分はRosettaで動きます。p971で「Steam経由で起動するとRosettaになった」という話と、根っこは同じです。

逆に、Steamで入れたオープンソースの2本は中まで完全にきれいでした(Endless Sky は13個、Battle for Wesnoth は48個すべてがネイティブを含む)。

【③ 動かしている間】いま翻訳されているかを確かめる

持っていることと、選ばれることは別です。最後は動かしてみるしかありません。

$ vmmap (プロセス番号) | grep "Code Type"
Code Type:       ARM64                  ← ネイティブ
Code Type:       X86-64 (translated)    ← Rosettaで翻訳中

アクティビティモニタの「種類」列でも同じことが分かります(Apple/Intel と表示されます)。

手元で動いている470個のプロセスを全部調べたら、翻訳中は0件でした。ふだんMacを使っているぶんには、もうRosettaはほとんど動いていません。

最初は25件が「翻訳中」だった
実は1回目の調査では25件出ました。中身を見たら全部がWine(Windowsのふりをする仕組み)のプロセスで、前回の記事の作業で残っていたものでした。MacのWineはx86_64なので、Wineの上のWindowsアプリは二重に翻訳されて動きます。
片付けてから測り直して0件です。★「翻訳中のプロセスが出た」ときは、まず自分が何を動かしていたかを疑うのが早道でした。

【実験】Rosettaの代償は、どこに出るのか

ここまでは「見分け方」の話でした。ではRosettaだと実際どれだけ損をするのか。ゲームを起動せずに測れる形にしました。

やり方は単純です。ユニバーサルバイナリを1つ作り、同じファイルを2通りで走らせます。

arch -arm64  ./bench     ← ネイティブで動かす
arch -x86_64 ./bench     ← Rosettaで動かす

中身は3種類の処理です。整数演算(かけ算と排他的論理和を2億回)、浮動小数点演算、メモリ走査(64MBを8周)。

★測る前に、本当に翻訳されているかを自己申告させました。プログラムの中から sysctl.proc_translated を読んで出力に混ぜています。ここを確認しないと、「翻訳したつもりで両方ネイティブだった」という結果を出しかねません。

$ arch -arm64  ./bench
{"built_for": "arm64",  "translated": 0, ...}
$ arch -x86_64 ./bench
{"built_for": "x86_64", "translated": 1, ...}   ← ★経路を確認できた

4回ずつ、順序を入れ替えながら(ネイティブ→翻訳→翻訳→ネイティブ)測った平均です。

処理の種類ネイティブRosetta比
整数演算0.186秒0.184秒0.99倍(差なし)
浮動小数点演算0.027秒0.027秒1.00倍
メモリ走査0.012秒0.020秒1.7倍
合計0.225秒0.232秒1.03倍

★計算はまったく落ちていません。整数も浮動小数点も誤差の範囲です。落ちたのはメモリ走査だけで、1.7倍でした。計算結果(チェックサム)は両方で完全に一致しています。

【承前】計算は落ちないのに、メモリだけ遅い理由

意外に思えますが、理由ははっきりしています。

Rosettaが払っているのは「翻訳代」ではなく「約束代」 計算 ── ほぼ落ちない Rosettaは実行前にまとめて翻訳する (走りながら訳しているわけではない) → 出来上がるのは普通のarm64の命令 実測 0.99倍・1.00倍 =一度訳してしまえば、あとは ネイティブと同じ速さで走る メモリ ── ここで払う Intelは「書いた順に見える」ことを 強く保証している(TSO) → Apple Siliconは、その約束を守る   モードに切り替えて動かす 実測 1.7倍 =メモリを触るたびに代金がかかる

IntelのCPUは「書き込んだ順序が、他のCPUからもその順で見える」という約束を強く守ります。Apple Siliconは通常この約束を緩めて速く動きますが、Intel向けのプログラムを正しく動かすには、その約束を守るモードに切り替える必要があります。計算そのものは翻訳済みの命令をそのまま走らせるだけなので落ちず、メモリを触る処理だけが重くなる——実測はこの説明と一致しました。

そう考えると、p971のゲームでCPU時間が1.44倍になっていたのも腑に落ちます。ゲームは計算よりもメモリの出し入れとシステムへの呼び出しが多いからです。逆に言えば、純粋な計算が主役のソフトなら、Rosettaでもあまり困りません。

【整理】ネイティブ版を選ぶための手順

  1. 買う前:ストアの「macOS対応」を確認する。★ここで分かるのは入口だけ。要件の文面に「Apple Silicon」「M1」などがあればラッキー、無くても悲観しなくてよい
  2. 買う前・その2:古い情報を疑う。かつてMac版があったタイトルでも、今は取り下げられていることがある(実際に2本ありました)
  3. 入れたあと:lipo -archs で本体を見る。★arm64 で始まる表記があればネイティブ
  4. 入れたあと・その2:★ランチャーを経由するなら、ランチャー側も見る。本体がネイティブでも、そこがIntelなら翻訳が挟まる
  5. 動かして確定させる:アクティビティモニタの「種類」列、または vmmap の Code Type。★ここだけが答え合わせ
  6. 重いと感じたら:起動方法を変えてみる。p971ではランチャー経由をやめて直接起動するとネイティブになりました(⚠プレイ時間の記録などが効かなくなる可能性はあります)

【整理】Rosettaが終わる日

この話には期限があります。Rosetta 2 は macOS 27 までは今までどおり使えますが、macOS 28(2027年秋の見込み)で一般的なアプリ向けのサポートが終わります。影響を受けるIntel専用アプリは18,800本以上と見積もられています。macOS 26.4 以降は、Intel専用アプリを起動すると警告が出るようになりました。

★ゲームだけは例外の含みがある
Appleは「Intelのフレームワークに依存する、更新が止まった古いゲーム向けの一部機能は残す」と説明しています。ただし「一部」の範囲は明示されていません。
いま買うタイトルについては、ネイティブ対応しているかどうかが、そのまま「2027年以降も遊べるか」に直結します。

出典:財経新聞(2026-06-01)、TechTimes(2026-05-30)

つまずき集

  • ★翻訳中のプロセスが25件出て驚いたら、全部が自分で動かしていたWineだった。前回の作業の残りで、しかもプレフィックスを消してもプロセスは生き残っていました
  • ★速度差を測る前に、本当に翻訳されているかを自己申告させる。sysctl.proc_translated をプログラムから読めば1行で確認できます。整数演算が「差なし」と出たとき、これが無ければ測り方を疑って時間を溶かしていました
  • ⚠ ps には種類(アーキテクチャ)を出す列がありません。vmmap を使うか、アクティビティモニタで見ます
  • ⚠ アプリの中を全部調べると数分かかります(Xcodeだけで1,919個の実行ファイルがありました)

まとめ

  • ★「macOS対応」はネイティブを意味しません。ストアのAPIが返すのは true / false だけです
  • ★システム要件の文面は当てになりません。「Intel」と書いてあるのに実物はユニバーサル、という例がありました。書いてあれば手がかり、無ければ情報なしと考えます
  • ★かつてMac版があっても、今は取り下げられていることがあります(調べた6本のうち2本)
  • ★★本体だけ見ても足りません。48本中11本(23%)は、本体がネイティブなのに中にIntel専用が混ざっていました。Epic Games Launcher は29個中15個(52%)
  • ★arm64e もネイティブ。除外すると集計が壊れます(55%が誤判定になった前例あり)
  • ★ふだん使いのMacでは、もうRosettaはほとんど動いていません(470プロセス中0件)
  • ★★Rosettaの代償は計算ではなくメモリに出ます。整数0.99倍・浮動小数点1.00倍に対し、メモリ走査は1.7倍。ゲームが遅くなるのは、計算が遅いからではありません
  • ⚠Rosetta 2 は macOS 28(2027年秋見込み)で一般アプリ向けが終わります。古いゲーム向けに一部残る含みはありますが、範囲は不明です

「動くかどうか」だけなら簡単に分かるのに、「どう動いているか」は自分で確かめるしかない——今回も結局そこに行き着きました😊

それでは、今回はここまで。最後までありがとうございました😊