非公式プロジェクト「nxnative」が、所有する初代Nintendo Switchのゲームから、iPhoneやiPad、Apple Silicon搭載Mac向けの独立したアプリを作成する仕組みを公開している。ゲームのCPUコードはAppleチップで直接実行し、Switch固有のOS機能や描画処理は互換実装で補う方式だ。『Diablo II: Resurrected』向けに開発された技術を基盤として、複数のゲームに対応できるよう共通処理を整備した。ただし、CPUコードを実行できることと、ゲームを問題なくプレイできることは別である。実用性を左右するのは、OSや描画処理の互換性に加え、ゲームのバージョンに応じた修正や端末側の対応状況だ。

AD

単独ゲーム向けの移植技術を複数タイトルに展開

nxnativeの出発点となったのは、『Diablo II: Resurrected』を対象とした「d2r-mobile」だ。nxnativeは、同プロジェクトで開発されたコード書き換え機構やSwitchのOS機能を代替する仕組み、Apple向けの描画処理などを引き継いでいる。これらを複数のゲームで利用できるように整理し、タイトル固有の調整は「ゲーム別設定」として切り分けた。共通の処理が各ゲームの設定を読み込む構造とすることで、タイトルごとの条件分岐を共通コードに直接組み込まずに済む。

利用者が用意するのは、所有するゲームのデータを収めたNSPファイルと、データの読み出しに必要な暗号鍵「prod.keys」だ。nxnativeはこれらを使ってiPhone/iPad向けのIPAファイルを生成するほか、Apple Silicon搭載Mac向けの.app形式にも対応する。ゲームデータや暗号鍵はプロジェクトに同梱されておらず、利用者自身が用意しなければならない。nxnativeはMITライセンスで公開されている非公式プロジェクトで、任天堂や各ゲームの発売元とは関係がない。

READMEのテスト済みゲーム一覧には、『スーパーマリオ オデッセイ』『Metroid Dread』に加え、『ゼルダの伝説 ブレス オブ ザ ワイルド』『ゼルダの伝説 ティアーズ オブ ザ キングダム』なども掲載されている。ただし、これは「MacまたはiPhoneでテストしたゲーム」の一覧であり、すべてをiPhoneで検証したわけではない。また、ゲームを最後まで問題なくプレイできることを保証するものでもない。実際の対応状況を判断するには、ゲーム名だけでなく、テストしたバージョンや端末、確認済みの動作範囲まで調べる必要がある。

CPUコードの直接実行とOS・描画の互換実装

Nintendo SwitchのOSである「Horizon」が提供する機能は、ゲームのCPU命令をAppleチップで実行するだけでは利用できない。描画についても、Switch向けの処理をAppleのグラフィックスAPI「Metal」に接続する仕組みが必要となる。nxnativeは、こうした違いを複数の互換実装で吸収している。公開された開発文書とREADMEを基に、処理の役割分担を整理すると次のようになる。

処理の層 ゲームから引き継ぐ部分 nxnativeが担う処理 主な課題
CPUコード ゲーム本体のCPUコードをAppleチップで直接実行 必要なコードを書き換え、Apple側の実行環境や呼び出し方式に適合させる OSの実行条件やゲームのバージョンに応じた修正
OSサービス ゲームがHorizonに要求する機能 スレッド管理、同期、メモリ管理、セーブデータの保存などを代替。入力、音声、動画にも対応する ゲームが要求する機能や動作の再現
描画 ゲームの描画処理とシェーダー NVNなどの描画処理をMetalに接続。Vulkan/OpenGLを使うゲームには別の変換層を用意 描画処理の準備やゲーム固有の表示不具合

この構造では、ゲーム本体のCPUコードを直接実行しながら、OSサービスや描画処理は別の仕組みで動作させる。ただし、Apple側の実行条件に合わせたコードの修正や、ゲーム固有の不具合への対応は引き続き必要となる。上の表は公開資料に基づく仕組みの整理であり、実機での性能比較を示すものではない。

描画処理には、既存のNintendo Switchエミュレーター開発で蓄積された技術も活用している。GPU上で動作する描画プログラム「シェーダー」は、Ryujinxの変換器を使ってSwitchのMaxwell形式から中間形式のSPIR-Vへ変換し、さらにSPIRV-CrossによってMetal Shading Languageへ変換する。一方、Vulkanを採用する『Hades』や、OpenGLを使用する『Digimon Story Cyber Sleuth』には、それぞれ別のMetal変換層を用いる。ゲームによって採用している描画APIが異なるため、すべてを同じ経路で処理できるわけではない。

CPU命令が共通でも、OSの違いによって正常に動作しない例として、『ペーパーマリオRPG』で発生した問題がある。開発記録によると、ゲーム内のスクリプトからネイティブ関数を呼び出す際、一時データなどを格納する「スタック」の位置が適切に整列されておらず、Apple環境で異常終了が発生した。Horizonではアプリ側のコードに対するスタックのアラインメント検査が無効になっている一方、Apple側のカーネルは整列していないスタックを使ったアクセスを認めない。この実行条件の違いが問題を引き起こしていた。

開発者はコード書き換え処理を修正し、スタックの確保量を16バイト単位に切り上げることで対処した。これはゲーム全体を別のプログラムに作り直すものではなく、問題が生じる箇所のコードを調整する手法だ。AppleチップがSwitchのCPU命令を実行できても、OSが許容する動作条件まで一致するとは限らない。nxnativeは、そうした環境の違いを必要な箇所で補正している。

AD

『ゼルダ』の60 fps動作報告とバージョンごとの互換性

開発者はREADMEで、『ゼルダの伝説 ブレス オブ ザ ワイルド』バージョン1.9.0と『ゼルダの伝説 ティアーズ オブ ザ キングダム』バージョン1.4.3について、Switchでは30 fpsで動作するゲームを60 fpsで実行できると報告している。ただし、これは特定のバージョンに関する開発者自身の報告であり、端末や測定条件を統一した独立した性能検証ではない。すべての対応端末やゲーム内のあらゆる場面で60 fpsを維持できると確認されたわけではない。

nxnativeのゲーム別設定フォルダーには、シェーダーに関するテーブルや手動で補足した情報のほか、実行コードのバージョンを識別するビルドIDごとの修正が保存されている。つまり、互換性を判断するにはゲーム名だけでなく、実行するバージョンも重要になる。前述のスタック修正のようにコードを書き換える場合、対象となる処理が別のバージョンでも同じ位置に、同じ構造で存在するとは限らない。READMEによれば、テスト済みとは異なるバージョンでもアプリの構築は試みるが、未テストであることを表示し、テスト済みのバージョン向けに用意された60 fps化などの修正は適用しない。未登録のゲームについても暫定的な設定で構築を試すにとどまり、起動できない可能性がある。

一部の修正には、更新されたコードの関数全体を指紋のように照合し、安全に適用できるかを判断する仕組みがある。ただし、コードが変更されていたり、照合結果が曖昧だったりする場合は修正を見送る。コード書き換え機構の技術文書でも、あらゆるゲームのアップデートに自動対応するものではないと明記されている。アプリの構築に成功することと、そのバージョンに適した修正を正しく適用できることは、分けて考える必要がある。

また、CI(継続的インテグレーション)によるビルドの成功も、実際にゲームをプレイできることの証明にはならない。nxnativeのiOS向けCIは合成データを使ってアプリをビルドし、各構成要素を組み合わせて正常に構築できるかを確認する仕組みだ。コード署名や実機へのインストールは行わないため、ゲームの起動やプレイ中の動作を確かめるには、別途実機でのテストが必要となる。

iPhoneの対応条件を左右するテクスチャー形式とメモリ制限

nxnativeがiPhone/iPad向けに定める動作条件は、iOS/iPadOS 26以上で、iPhone 15 Proに搭載されたA17 Pro以降のチップ、またはM1以降のチップを搭載したiPadだ。開発者によると、この条件はCPUの処理性能だけで決まっているわけではない。Nintendo Switchのゲームで使われる画像素材にはBC形式で圧縮されたテクスチャーがあり、古いiPhoneではこの形式を扱えないという。CPUの性能が十分でも、GPU側の対応状況によって利用できない場合がある。

メモリの利用上限も重要な制約だ。READMEによると、メモリ上限を拡張する権限がない場合、アプリが使用できるメモリは約3.4 GBに制限される。一方、必要な権限を付与できるツールでアプリに署名すると、比較的新しいiPhoneでは約6 GBまで利用できるという。『ゼルダ無双 厄災の黙示録』や『Hades II』は、3.4 GBの上限を超えてアプリが終了する場合があるため、対応チップを搭載しているだけでは十分とはいえない。ただし、これらのメモリ容量はすべての端末で保証されるものではない。

アプリの構築にはMac、Xcode、Homebrewが必要となる。READMEでは、初回の構築に30〜60分程度かかり、ストレージにはNSPファイルの約2倍に10 GBを加えた空き容量が必要と見積もっている。生成したIPAファイルは、App Storeを経由せずにインストールする「サイドロード」でiPhoneやiPadへ導入する。完成済みのアプリを入手してインストールするだけの仕組みではなく、利用者自身がゲームデータの準備からアプリの構築、端末への導入まで行う必要がある。

操作方法はタッチ操作と物理コントローラーに対応し、一部の振動機能や端末を振る操作も利用できる。一方、amiiboやオンライン機能はサポートされていない。また、初めて訪れる場面では描画処理の準備によって一時的に動作が引っ掛かることがある。アプリの構築段階でシェーダーを変換していても、実機で新しい場面を描画するための準備がすべて完了しているわけではない。アプリを再開した後の一部音声や地面の表示など、ゲーム固有の不具合も報告されている。

nxnativeは、Nintendo SwitchのゲームをApple端末で直接動かすための技術を、特定のタイトルから複数のゲームへと広げた点で興味深い取り組みだ。ただし、対応タイトルが増えることと、実用的にプレイできるゲームが増えることは必ずしも一致しない。今後の進展を判断するうえでは、対応一覧に加わるゲーム名だけでなく、どのバージョンをどの端末で検証し、描画・保存・入力などの動作をどこまで確認できたかが重要になる。共通の互換実装とゲーム別設定の改善が実機での安定動作につながるかどうかが、所有するSwitchゲームをApple端末で楽しめる範囲を広げる鍵となる。