ビルド手順
カスタム Electron バイナリの作成にあたって Electron そのもの をビルドするには、以下のガイドラインに従ってください。 アプリのコードをビルド済み Electron バイナリにバンドルして頒布する場合は、アプリケーション頒布 のガイドを参照してください。
プラットフォーム要件
続行する前に、以下から各プラットフォームのビルド要件を確認してください。
ビルドツール
Electron ビルドツール は、さまざまな設定やビルドターゲットを使ってソースから Electron をコンパイルするためのセットアップの多くを自動化します。 手動で環境構築する場合の手順は以下の通りです。
Electronは、プロジェクト生成にGNを用い、ビルドには ninjaを使用します。 プロジェクト設定は.gn と .gni ファイルを見てください。
GN ファイル
以下のgnファイルにはElectronのビルトのメインルールを含んでいます:
BUILD.gnは、Electron 自身をどのようにビルドするかを定義し、Chromium とリンクするデフォルト設定を含んでいます。build/args/{testing,release,all}.gnには、Electronをビルドするためのデフォルトのビルド引数が含まれています。
GN 要件
depot_tools をインストールする必要があります。このツールセットは Chromium とその依存関係のダウンロードに使用されます。
更に Windows では、DEPOT_TOOLS_WIN_TOOLCHAIN=0 と環境変数を設定する必要があります。 これを行うには、コントロール パネル → システムとセキュリティ → システム → システムの詳細設定 を開き、DEPOT_TOOLS_WIN_TOOLCHAIN 環境変数を追加して値を 0 にします。 これはローカルにインストールされているバージョンの Visual Studio を使用するように depot_tools に知らせます (デフォルトで depot_tools は Google 社員のみがアクセスできる Google 内部のバージョンをダウンロードしようとします) 。
git キャッシュのセットアップ
Electron を複数回チェックアウトする予定がある場合 (例えば複数の並列ディレクトリを異なるブランチにチェックアウトさせるなど)、git キャッシュを使用することでその後の gclient 呼び出しを高速化できます。 これをするには GIT_CACHE_PATH 環境変数を以下のように設定する必要があります。
$ export GIT_CACHE_PATH="${HOME}/.git_cache"
$ mkdir -p "${GIT_CACHE_PATH}"
# 16G ほどあります。
コードを取得
$ mkdir electron-gn && cd electron-gn
$ gclient config --name "src/electron" --unmanaged https://github.com/electron/electron
$ gclient sync --with_branch_heads --with_tags
# これはしばらくかかります。コーヒーでも飲みに行きましょう。
https://github.com/electron/electronの代わりに、https://github.com/<username>/electronのような自分のフォークを使うこともできます。
プル/プッシュ時の注意
もし将来公式の electron レポジトリから git pull や git push をする予定であれば、現在はそれぞれのフォルダの origin URL を更新する必要があります。
$ cd src/electron
$ git remote remove origin
$ git remote add origin https://github.com/electron/electron
$ git checkout main
$ git branch --set-upstream-to=origin/main
$ cd -
📝 gclient は、Chromium や Node.js のような依存の解決のために src/electron フォルダ内の DEPS と呼ばれるファイルを確認します。 gclient sync -f を実行することで Electron のビルドに必要な依存関係をすべて取得します。
なので、プルするには、以下のコマンドを実行するとよいでしょう。
$ cd src/electron
$ git pull
$ gclient sync -f
ビルド
Chromium ビルドツール用の環境変数を設定します。
Linux と macOS の場合
$ cd src
$ export CHROMIUM_BUILDTOOLS_PATH=`pwd`/buildtools
Windowsの場合:
# cmd
$ cd src
$ set CHROMIUM_BUILDTOOLS_PATH=%cd%\buildtools
# PowerShell
$ cd src
$ $env:CHROMIUM_BUILDTOOLS_PATH = "$(Get-Location)\buildtools"
Electron の Testing ビルド設定は以下のようにして生成します。
Linux と macOS の場合
$ gn gen out/Testing --args="import(\"//electron/build/args/testing.gn\")"
Windowsの場合:
# cmd
$ gn gen out/Testing --args="import(\"//electron/build/args/testing.gn\")"
# PowerShell
gn gen out/Testing --args="import(\`"//electron/build/args/testing.gn\`")"
Electron の Release ビルド設定は以下のようにして生成します。
Linux と macOS の場合
$ gn gen out/Release --args="import(\"//electron/build/args/release.gn\")"
Windowsの場合:
# cmd
$ gn gen out/Release --args="import(\"//electron/build/args/release.gn\")"
# PowerShell
$ gn gen out/Release --args="import(\`"//electron/build/args/release.gn\`")"
[!NOTE] これにより
src/の配下に、上記で渡したテストまたはリリースビルドの構成に応じてout/Testingまたはout/Releaseビルドのディレクトリが生成されます。Testing|Releaseは他の名前に置換できますが、outのサブディレクトリである必要があります。
更に gn gen を再び実行してはいけません。ビルド引数を変更したい場合、gn args out/Testing を実行してエディタを呼び出します。 利用可能なビルド設定を一覧するには、gn args out/Testing --list を実行してください。
ビルドするには、ninja を electron ターゲットで実行します。 注意: これはさらなる時間を要し、パソコンも熱くなります。
テスト構成は以下のとおりです。
$ ninja -C out/Testing electron
リリース構成は以下のとおりです。
$ ninja -C out/Release electron
これは、先に "libchromiumcontent" ( chromium の content/ ディレクトリと Blink や V8 を含む依存関係) のすべてをビルドします。そのため時間がかかります。
実行形式は ./out/Testing 下に置かれます。
$ ./out/Testing/Electron.app/Contents/MacOS/Electron
# Windowsの場合
$ ./out/Testing/electron.exe
# Linuxの場合
$ ./out/Testing/electron
パッケージ化
配布可能なzipファイルとしてこのエレクトロンビルドをパッケージするには、次のようにする。
$ ninja -C out/Release electron:electron_dist_zip
クロスコンパイル
構築しているプラットフォームと同じでないプラットフォーム用にコンパイルするには、target_cpu 及び target_os GN 引数を設定します。 例えば、x64 ホストから x86 ターゲットをコンパイルするには、gn args で target_cpu = "x86" と指定します。
$ gn gen out/Testing-x86 --args='... target_cpu = "x86"'
ソースコードとターゲット CPU/OS のすべての組み合わせが Chromium でサポートされているわけではありません。
| Host | ターゲット | 状況 |
|---|---|---|
| Windows x64 | Windows arm64 | 実験中 |
| Windows x64 | Windows x86 | 自動テスト済み |
| Linux x64 | Linux x86 | 自動テスト済み |
他の組み合わせをテストしてうまく動作することがわかれば、このドキュメントを更新してください :)
target_os と target_cpu の許容値については、GN のリファレンスを参照してください。
Arm 上で Windows (実験的)
Arm 上の Windows 用にクロスコンパイルするには、Chromium のガイドに従って必要な依存関係、SDK、ライブラリを取得し、ELECTRON_BUILDING_WOA=1 を使用してその環境でビルドしてから、gclient sync を実行します。
set ELECTRON_BUILDING_WOA=1
gclient sync -f --with_branch_heads --with_tags
もしくは (PowerShell を用いる場合) こうします。
$env:ELECTRON_BUILDING_WOA=1
gclient sync -f --with_branch_heads --with_tags
それから、上記のように target_cpu="arm64" で gn gen を実行します。
テスト
このテストを実行するために、あなたは最初に、このビルドプロセスの一部としてビルドする Node.js と同じバージョンに対してテストモジュールをビルドする必要があります。 再びコンパイルするモジュールのためのビルドヘッダを生成するために、src/ディレクトリの下で以下のように実行します。
$ ninja -C out/Testing electron:node_headers
これで テストを実行 できます。
もし何かをデバッグ中であれば、以下のフラグを Electron バイナリに渡すと役に立つかもしれません。
$ npm run test -- \
--enable-logging -g 'BrowserWindow module'
複数マシン間での gitのキャッシュの共有
gclient git キャッシュを Linux 上で SMB 共有としてエクスポートすることで、他のマシンと共有することは可能ですが、一度に一つのプロセス/マシンだけがキャッシュを使用できます。 git-cache スクリプトによって作成されたロックはこれを防止しようとしますが、ネットワーク内で完璧には動作しない可能性があります。
Windows では、SMBv2 にはディレクトリキャッシュがあり、git キャッシュスクリプトに問題が発生するため、レジストリキー
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Lanmanworkstation\Parameters\DirectoryCacheLifetime
を0に設定して無効にする必要があります。 詳細: https://stackoverflow.com/a/9935126
これは PowerShell 内ですぐに設定できます (管理者権限で実行します)。
New-ItemProperty -Path "HKLM:\System\CurrentControlSet\Services\Lanmanworkstation\Parameters" -Name DirectoryCacheLifetime -Value 0 -PropertyType DWORD -Force
トラブルシューティング
gclient sync が rebase に関する問題を報告する
gclient sync が中断されると、git ツリーが不正な状態のままになってしまい、将来 gclient sync を実行したときに不可解なメッセージが表示されます。
2> Conflict while rebasing this branch.
2> Fix the conflict and run gclient again.
2> See man git-rebase for details.
src/electron に git のコンフリクトやリベースがない場合は、src の git am を abort する必要があります。
$ cd ../
$ git am --abort
$ cd electron
$ gclient sync -f
これは、electron/src/ や他の依存関係のリポジトリにあるブランチをチェックアウトした場合に (detached HEAD でなくとも) 発生する可能性もあります。 その場合、適切なリポジトリ内で git checkout --detach HEAD とするコツが要ります。
chromium-internal.googlesource.com のユーザー名/パスワードを聞かれる
Windows 上で gclient sync を実行しているときに Username for 'https://chrome-internal.googlesource.com': のプロンプトが表示された場合、おそらく DEPOT_TOOLS_WIN_TOOLCHAIN 環境変数が 0 に設定されていないからです。 コントロール パネル → システムとセキュリティ → システム → システムの詳細設定 を開き、DEPOT_TOOLS_WIN_TOOLCHAIN 環境変数を追加して値を 0 にします。 これはローカルにインストールされているバージョンの Visual Studio を使用するように depot_tools に知らせます (デフォルトで depot_tools は Google 社員のみがアクセスできる Google 内部のバージョンをダウンロードしようとします) 。
e モジュールが見つからない
npm i -g @electron/build-tools を実行しているのに e が認識されないという、以下のような状況です。
Error: Cannot find module '/Users/<user>/.electron_build_tools/src/e'
nvm で Node をインストールすることを推奨しています。 これにより Node のバージョン管理が容易になり、大抵は見つからない e モジュールが直ります。
RBE 認証が "Token not valid" というエラーでランダムに失敗する
これは、マシン上のローカルのクロック時間がわずかにずれていることが原因である可能性があります。 time.is を使ってご確認ください。