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

ビルド手順

カスタム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の前提条件

Chromiumとその依存関係を取得するために使用されるツールセットであるdepot_toolsをインストールする必要があります。

また、Windowsでは、環境変数`DEPOT_TOOLS_WIN_TOOLCHAIN=0`を設定する必要があります。 これを行うには、`コントロールパネル`→`システムとセキュリティ`→`システム`→`システムの詳細設定`を開き、値`0`のシステム変数`DEPOT_TOOLS_WIN_TOOLCHAIN`を追加します。 これにより、`depot_tools`はローカルにインストールされているVisual Studioのバージョンを使用するように指示されます(デフォルトでは、`depot_tools`はGoogle社員のみがアクセスできるGoogle社内バージョンをダウンロードしようとします)。

gitキャッシュのセットアップ

Electronを複数回チェックアウトする予定がある場合(たとえば、複数の並列ディレクトリを異なるブランチにチェックアウトする場合)、gitキャッシュを使用すると、後続の`gclient`呼び出しが高速化されます。 これを行うには、`GIT_CACHE_PATH`環境変数を設定します

$ export GIT_CACHE_PATH="${HOME}/.git_cache"
$ mkdir -p "${GIT_CACHE_PATH}"
# This will use about 16G.

コードの取得

$ mkdir electron && cd electron
$ gclient config --name "src/electron" --unmanaged https://github.com/electron/electron
$ gclient sync --with_branch_heads --with_tags
# This will take a while, go get a coffee.

`https://github.com/electron/electron`の代わりに、独自のフォークをここで使用できます(`https://github.com/<username>/electron`など)。

プル/プッシュに関する注意

今後、公式の`electron`リポジトリから`git pull`または`git push`を実行する場合は、それぞれのフォルダのオリジン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`は、`src/electron`フォルダ内の`DEPS`というファイルを調べて、依存関係(ChromiumやNode.jsなど)を確認することで機能します。 `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のテストビルド設定を生成するには

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のリリースビルド設定を生成するには

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\`")"

**注:** これにより、上記の構成に応じて、テストビルドまたはリリースビルドを含む`src/`の下に`out/Testing`または`out/Release`ビルドディレクトリが生成されます。 `Testing|Release`を別の名前に置き換えることができますが、`out`のサブディレクトリである必要があります。

また、`gn gen`を再度実行する必要はありません。ビルド引数を変更する場合は、`gn args out/Testing`を実行してエディタを起動できます。 使用可能なビルド構成オプションのリストを表示するには、`gn args out/Testing --list`を実行します。

**ビルドするには、`electron`ターゲットを指定して`ninja`を実行します:** 注: これには時間がかかり、おそらくラップトップが熱くなります。

テスト構成の場合

$ ninja -C out/Testing electron

リリース構成の場合

$ ninja -C out/Release electron

これにより、以前の「libchromiumcontent」(つまり、`chromium`の`content/`ディレクトリとその依存関係、BlinkとV8を含む)がすべてビルドされるため、時間がかかります。

ビルドされた実行可能ファイルは`./out/Testing`にあります

$ ./out/Testing/Electron.app/Contents/MacOS/Electron
# or, on Windows
$ ./out/Testing/electron.exe
# or, on Linux
$ ./out/Testing/electron

パッケージ化

Linuxでは、最初にデバッグとシンボル情報を削除します

$ electron/script/strip-binaries.py -d out/Release

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でサポートされているわけではありません。

ホストターゲットステータス
Windows x64Windows arm64実験的
Windows x64Windows x86自動的にテスト済み
Linux x64Linux x86自動的にテスト済み

他の組み合わせをテストして動作することを確認した場合は、このドキュメントを更新してください :)

`target_os``target_cpu`の許容値については、GNリファレンスを参照してください。

Windows on Arm(実験的)

Windows on Arm用にクロスコンパイルするには、Chromiumのガイドに従って必要な依存関係、SDK、およびライブラリを取得し、`gclient sync`を実行する前に環境で`ELECTRON_BUILDING_WOA=1`を使用してビルドします。

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キャッシュを共有する

LinuxでSMB共有としてエクスポートすることにより、gclient gitキャッシュを他のマシンと共有できますが、一度に1つのプロセス/マシンのみがキャッシュを使用できます。 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の競合やrebaseがない場合は、`src`で`git am`を中止する必要がある場合があります

$ cd ../
$ git am --abort
$ cd electron
$ gclient sync -f

これは、`electron/src/`または他の依存関係のリポジトリでブランチをチェックアウトした場合(分離ヘッドを持つのではなく)にも発生する可能性があります。 その場合は、適切なリポジトリで`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 で追加してください。 これにより、depot_tools はローカルにインストールされている Visual Studio を使用します(デフォルトでは、depot_tools は Google 社員のみがアクセスできる Google 内部バージョンをダウンロードしようとします)。

e モジュールが見つかりません

npm i -g @electron/build-tools を実行しても e が認識されない場合、例えば

Error: Cannot find module '/Users/<user>/.electron_build_tools/src/e'

Node はnvmを使用してインストールすることをお勧めします。 これにより、Node のバージョン管理が容易になり、多くの場合、不足している e モジュールの問題を解決できます。

RBE 認証が「トークンが無効です」というエラーでランダムに失敗する

これは、マシンのローカルクロックの時刻がわずかにずれていることが原因である可能性があります。time.is を使用して確認してください。