メインコンテンツへスキップ

Apple Silicon サポート

·3 分で読めます

今年の後半に Apple Silicon ハードウェアがリリースされるにあたり、新しいハードウェアで Electron アプリを実行するためのパスはどのようなものになるでしょうか?


Electron 11.0.0-beta.1 のリリースにより、Electron チームは、Apple が今年の後半にリリースを予定している新しい Apple Silicon ハードウェア上で実行される Electron のビルドを現在出荷しています。最新のベータ版は npm install electron@beta で入手するか、リリースウェブサイトから直接ダウンロードできます。

仕組みは?

Electron 11 の時点では、Intel Mac 用と Apple Silicon Mac 用の別々のバージョンの Electron を出荷します。この変更の前は、すでに 2 つのアーティファクト、darwin-x64mas-x64 を出荷しており、後者は Mac App Store の互換性用途向けでした。今回、前述のアーティファクトの Apple Silicon 版である darwin-arm64mas-arm64 の 2 つのアーティファクトを追加で出荷します。

何をすればよいですか?

x64 (Intel Mac) 用と arm64 (Apple Silicon) 用の 2 つのバージョンのアプリを出荷する必要があります。幸いなことに、electron-packagerelectron-rebuildelectron-forge はすでに arm64 アーキテクチャのターゲットをサポートしています。これらのパッケージの最新バージョンを実行している限り、ターゲットアーキテクチャを arm64 に更新すると、アプリは正常に動作するはずです。

将来的には、arm64 アプリと x64 アプリを単一のユニバーサルバイナリに「マージ」できるパッケージをリリースする予定ですが、このバイナリは*巨大*になり、ユーザーへの出荷にはおそらく理想的ではないことに注意してください。

アップデート: このパッケージは現在、@electron/universal で利用可能です。これを使用すると、パッケージ化された 2 つの x64 および arm64 アプリを単一のバイナリにマージできます。

潜在的な問題

ネイティブモジュール

新しいアーキテクチャをターゲットにしているため、ビルドの問題を引き起こす可能性のあるいくつかの依存関係を更新する必要があります。参照用に、特定の依存関係の最小バージョンを以下に示します。

依存関係バージョンの要件
Xcode>=12.2.0
node-gyp>=7.1.0
electron-rebuild>=1.12.0
electron-packager>=15.1.0

これらの依存関係のバージョン要件の結果として、特定のネイティブモジュールを修正/更新する必要がある場合があります。注意すべき点の 1 つは、Xcode のアップグレードによって新しいバージョンの macOS SDK が導入され、ネイティブモジュールのビルドエラーが発生する可能性があることです。

どのようにテストすればよいですか?

現在、Apple Silicon アプリケーションは、このブログ記事の執筆時点では市販されていない Apple Silicon ハードウェアでのみ実行されます。Developer Transition Kitをお持ちの場合は、それを使用してアプリケーションをテストできます。それ以外の場合は、アプリケーションが動作するかどうかをテストするために、製品版の Apple Silicon ハードウェアのリリースを待つ必要があります。

Rosetta 2 については?

Rosetta 2 は、Apple の最新の Rosetta テクノロジーのイテレーションであり、新しい arm64 Apple Silicon ハードウェアで x64 Intel アプリケーションを実行できます。x64 Electron アプリが Rosetta 2 で実行されると信じていますが、いくつかの重要な注意点があります(ネイティブの arm64 バイナリを出荷する必要がある理由)。

  • アプリのパフォーマンスは大幅に低下します。Electron / V8 は JavaScript に JIT コンパイルを使用しており、Rosetta の仕組みにより、事実上、JIT を 2 回実行することになります(V8 で 1 回、Rosetta で 1 回)。
  • メモリページサイズの増加など、Apple Silicon の新技術のメリットが失われます。
  • パフォーマンスが**大幅に**低下することを述べましたか?