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

ARM版Windows

Electron 6.0.8以降で動作するアプリであれば、Arm版Windows 10向けにビルドできるようになりました。 これによりパフォーマンスが大幅に向上しますが、アプリで使用されているネイティブモジュールを再コンパイルする必要があります。 また、ビルドおよびパッケージスクリプトに小さな修正が必要になる場合があります。

基本的なアプリの実行

アプリがネイティブモジュールを使用していない場合は、アプリのArmバージョンを作成するのは非常に簡単です。

  1. アプリのnode_modulesディレクトリが空であることを確認してください。
  2. *コマンドプロンプト* を使用して、通常どおりnpm install/yarn installを実行する前に、`set npm_config_arch=arm64`を実行します。
  3. Electronを開発依存関係としてインストールしている場合、npmはarm64バージョンをダウンロードして解凍します。 その後、通常どおりアプリをパッケージ化して配布できます。

一般的な考慮事項

アーキテクチャ固有のコード

Windows固有のコードの多くには、x64またはx86アーキテクチャのいずれかを選択するif... elseロジックが含まれています。

if (process.arch === 'x64') {
// Do 64-bit thing...
} else {
// Do 32-bit thing...
}

arm64をターゲットにする場合、このようなロジックは通常、間違ったアーキテクチャを選択するため、アプリケーションとビルドスクリプトにこのような条件がないか注意深く確認してください。 カスタムビルドおよびパッケージスクリプトでは、現在のプロセスアーキテクチャに依存するのではなく、常に環境内の`npm_config_arch`の値を確認する必要があります。

ネイティブモジュール

ネイティブモジュールを使用する場合は、MSVCコンパイラーのv142(Visual Studio 2017に付属)に対してコンパイルされていることを確認する必要があります。 また、ネイティブモジュールによって提供または参照される、事前にビルドされた.dllまたは.libファイルが、ARM版Windowsで利用可能であることを確認する必要があります。

アプリのテスト

アプリをテストするには、Windows 10(バージョン1903以降)を実行しているARM版Windowsデバイスを使用します。 アプリケーションをターゲットデバイスにコピーしてください。Chromiumのサンドボックスは、ネットワークロケーションからアプリケーションアセットを読み込むと正しく動作しません。

開発の前提条件

Node.js/node-gyp

Node.js v12.9.0以降を推奨します。 Nodeの新しいバージョンへの更新が望ましくない場合は、代わりにnpmのnode-gypのコピーを手動でバージョン5.0.2以降に更新できます。これには、Arm用ネイティブモジュールをコンパイルするために必要な変更が含まれています。

Visual Studio 2017

ネイティブモジュールをクロスコンパイルするには、Visual Studio 2017(任意のエディション)が必要です。Visual Studio Community 2017は、MicrosoftのVisual Studio Dev Essentialsプログラムからダウンロードできます。 インストール後、 *コマンドプロンプト* から以下を実行して、Arm固有のコンポーネントを追加できます。

vs_installer.exe ^
--add Microsoft.VisualStudio.Workload.NativeDesktop ^
--add Microsoft.VisualStudio.Component.VC.ATLMFC ^
--add Microsoft.VisualStudio.Component.VC.Tools.ARM64 ^
--add Microsoft.VisualStudio.Component.VC.MFC.ARM64 ^
--includeRecommended

クロスコンパイルコマンドプロンプトの作成

環境で`npm_config_arch=arm64`を設定すると、正しいarm64 ` .obj`ファイルが作成されますが、標準の *VS 2017用デベロッパーコマンドプロンプト* はx64リンカーを使用します。 これを修正するには

  1. *VS 2017用x64_x86クロスツールコマンドプロンプト* ショートカットを複製します(たとえば、スタートメニューで見つけて右クリックし、 *ファイルの場所を開く* を選択し、コピーして貼り付けます)。
  2. 新しいショートカットを右クリックして、 *プロパティ* を選択します。
  3. *ターゲット* フィールドを、`vcvarsamd64_x86.bat`の代わりに`vcvarsamd64_arm64.bat`が最後に表示されるように変更します。

成功した場合、コマンドプロンプトは起動時に次のようなものを出力します。

**********************************************************************
** Visual Studio 2017 Developer Command Prompt v15.9.15
** Copyright (c) 2017 Microsoft Corporation
**********************************************************************
[vcvarsall.bat] Environment initialized for: 'x64_arm64'

ARM版Windowsデバイスでアプリケーションを直接開発する場合は、 *ターゲット* で`vcvarsx86_arm64.bat`を代用して、デバイスのx86エミュレーションでクロスコンパイルを実行できるようにします。

正しい`node.lib`とのリンク

デフォルトでは、`node-gyp`はElectronのnodeヘッダーを解凍し、`node.lib`のx86およびx64バージョンを`%APPDATA%\ .. \ Local \ node-gyp \ Cache`にダウンロードしますが、arm64バージョンはダウンロードしません(この修正は開発中です)。これを修正するには

  1. arm64 `node.lib`をhttps://electron.dokyumento.jp/headers/v6.0.9/win-arm64/node.libからダウンロードします
  2. それを`%APPDATA%\ .. \ Local \ node-gyp \ Cache \ 6.0.9 \ arm64 \ node.lib`に移動します

`6.0.9`を使用しているバージョンに置き換えます。

ネイティブモジュールのクロスコンパイル

上記をすべて完了したら、クロスコンパイルコマンドプロンプトを開き、`set npm_config_arch=arm64`を実行します。 その後、`npm install`を使用して、通常どおりプロジェクトをビルドします。 x86モジュールをクロスコンパイルする場合と同様に、ネイティブモジュールが以前に別のアーキテクチャ用にコンパイルされていた場合は、`node_modules`を削除してネイティブモジュールの再コンパイルを強制する必要がある場合があります。

ネイティブモジュールのデバッグ

ネイティブモジュールのデバッグは、Visual Studio 2017(開発マシンで実行)と、ターゲットデバイスで実行されている対応するVisual Studioリモートデバッガーを使用して実行できます。 デバッグするには

  1. *コマンドプロンプト* 経由でターゲットデバイスでアプリ` .exe`を起動します(` --inspect-brk`を渡して、ネイティブモジュールがロードされる前に一時停止します)。
  2. 開発マシンでVisual Studio 2017を起動します。
  3. *デバッグ>プロセスにアタッチ...* を選択してターゲットデバイスに接続し、デバイスのIPアドレスとVisual Studioリモートデバッガーツールに表示されているポート番号を入力します。
  4. *更新* をクリックして、アタッチする適切なElectronプロセスを選択します。
  5. アプリ内のネイティブモジュールのシンボルが正しくロードされていることを確認する必要がある場合があります。 これを構成するには、Visual Studio 2017の *デバッグ>オプション...* に移動し、` .pdb`シンボルを含むフォルダーを *デバッグ>シンボル* の下に追加します。
  6. アタッチしたら、適切なブレークポイントを設定し、ChromeのNode用リモートツールを使用してJavaScriptの実行を再開します。

追加のヘルプの入手

このドキュメントに問題が発生した場合、またはアプリがx86用にコンパイルした場合は動作するがarm64用にコンパイルした場合は動作しない場合は、タイトルに「ARM版Windows」と記載して問題を報告してください。