Closed psmuler closed 1 year ago
ElectronアプリケーションをmacOS用の配布可能なバイナリにビルドするには、electron-builder
というツールを使用します。まずは、プロジェクトに必要なパッケージをインストールしましょう。
electron-builder
を開発用依存関係としてインストールします:npm install --save-dev electron-builder
package.json
ファイルに、build
セクションを追加して、アプリケーションのビルド設定を定義します。また、scripts
セクションにbuild
コマンドを追加します。package.json
ファイルは以下のようになります:{
"name": "your-app-name",
"version": "1.0.0",
"description": "Your app description",
"main": "main.js",
"scripts": {
"start": "electron .",
"build": "electron-builder --mac"
},
"build": {
"appId": "com.yourcompany.yourapp",
"productName": "YourAppName",
"mac": {
"category": "public.app-category.developer-tools",
"target": "dmg"
},
"files": [
"**/*"
]
},
"dependencies": {
"electron": "^13.1.7"
},
"devDependencies": {
"electron-builder": "^22.11.7"
}
}
ここで、appId
、productName
などのプロパティを、アプリケーションに合わせて適切に置き換えてください。
npm run build
ビルドが成功すると、dist
ディレクトリが作成され、その中に.dmg
ファイルが生成されます。この.dmg
ファイルをmacOS上で配布・インストールすることができます。
• Detected arm64 process, HFS+ is unavailable. Creating dmg with APFS - supports Mac OSX 10.12+ ⨯ Exit code: ENOENT. spawn /usr/bin/python ENOENT failedTask=build stackTrace=Error: Exit code: ENOENT. spawn /usr/bin/python ENOENT at /Users/ti/Documents/code/SkimmedMilk/node_modules/builder-util/src/util.ts:133:18 at exithandler (node:child_process:427:5) at ChildProcess.errorhandler (node:child_process:439:5) at ChildProcess.emit (node:events:513:28) at Process.ChildProcess._handle.onexit (node:internal/child_process:289:12) at onErrorNT (node:internal/child_process:476:16) at processTicksAndRejections (node:internal/process/task_queues:82:21)
このエラーは、Pythonが見つからないことを示しています。macOS用のバイナリをビルドする際に、electron-builder
がPythonを必要とすることがあります。Pythonがインストールされているか確認し、インストールされていない場合はインストールしてください。
macOSでは、Homebrewを使ってPythonを簡単にインストールすることができます。Homebrewがインストールされていない場合は、以下のコマンドを実行してインストールしてください:
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
次に、Homebrewを使ってPythonをインストールします:
brew install python
Pythonがインストールされたら、再度npm run build
コマンドを実行してみてください。問題が解決されるはずです。それでも問題が続く場合は、Pythonのパスが正しく設定されているか確認してください。通常、macOSではPythonのパスは/usr/local/bin/python
になります。
python3がインストールされています。pythonもインストールしたほうがいいですか
すみません、それではPython 3がインストールされていることを前提に話を進めます。
electron-builder
は、Python 2とPython 3の両方をサポートしていますが、デフォルトではPython 2を探してしまうことがあります。これが問題の原因となっている可能性があります。
以下の手順でPython 3をデフォルトのPythonとして設定し、再度ビルドを試みてみてください。
ln -s /usr/local/bin/python3 /usr/local/bin/python
このコマンドで、python
と入力した際にPython 3が実行されるようになります。
npm run build
コマンドを実行してみてください。これで問題が解決されることを願っています。それでも問題が続く場合は、お知らせください。
先ほど作成したシンボリックリンクを削除してください
シンボリックリンクを削除するには、unlink
コマンドを使用します。以下のコマンドをターミナルで実行して、先ほど作成したシンボリックリンクを削除してください:
unlink /usr/local/bin/python
これでシンボリックリンクが削除され、python
と入力した際にPython 3が実行されなくなります。
⨯ Exit code: ENOENT. spawn /usr/bin/python ENOENT failedTask=build stackTrace=Error: Exit code: ENOENT. spawn /usr/bin/python ENOENT npm run build をした際に参照する先をこちらで指定できませんか
環境変数を設定することで、electron-builder
がPython 3を使うように指定できます。
macOSの場合、以下のコマンドをターミナルで実行して、Python 3を使うように指定してからビルドを実行してみてください:
export ELECTRON_BUILDER_PYTHON_INTERPRETER=/usr/local/bin/python3
npm run build
これにより、electron-builder
がPython 3を使用するようになり、ビルドプロセスが成功することを期待します。
ELECTRON_BUILDER_PYTHON_INTERPRETERを指定しましたが変わりませんでした ⨯ Exit code: ENOENT. spawn /usr/bin/python ENOENT failedTask=build stackTrace=Error: Exit code: ENOENT. spawn /usr/bin/python ENOENT
失礼しました。Pythonのパスが正しく設定されていない場合があります。
まず、which python3
コマンドを使用して、正しいPython 3のパスを確認しましょう。
which python3
このコマンドは、Python 3の実行可能ファイルのパスを表示します。パスが表示されたら、それを使って環境変数を再設定します。
export ELECTRON_BUILDER_PYTHON_INTERPRETER=PYTHON3_PATH_HERE
上記のPYTHON3_PATH_HERE
は、which python3
コマンドで表示されたパスに置き換えてください。その後、再度ビルドを実行してみてください。
npm run build
これでビルドプロセスが成功することを期待します。
ELECTRON_BUILDER_PYTHON_INTERPRETERを指定しましたがelectron-builderのpythonエントリポイントが指定したパスになっていません。 ⨯ Exit code: ENOENT. spawn /usr/bin/python ENOENT failedTask=build stackTrace=Error: Exit code: ENOENT. spawn /usr/bin/python ENOENT
申し訳ありません。electron-builder
は ELECTRON_BUILDER_PYTHON_INTERPRETER
環境変数ではなく、デフォルトの Python パスを参照し続けているようです。
代わりに、プロジェクトの package.json
ファイルに環境変数を追加する方法を試してみてください。package.json
の scripts
セクションを次のように編集します。
"scripts": {
"build": "ELECTRON_BUILDER_PYTHON_INTERPRETER=/usr/local/bin/python3 electron-builder",
"start": "electron ."
}
これで、npm run build
を実行すると、electron-builder
が /usr/local/bin/python3
を使用するようになります。もしまだ問題がある場合、node_modules
ディレクトリを削除してから再インストールし、再度ビルドしてみてください。
rm -rf node_modules
npm install
npm run build
調べてみたところ、今はelectron forgeを使ってビルドをするようです。ご存じでしたか?
はい、electron-forge
はElectronアプリケーションを構築、パッケージ化、公開するためのツールです。electron-builder
と同様に、electron-forge
はアプリケーションの構築プロセスを簡素化し、プラットフォームごとのパッケージングやインストーラー作成をサポートしています。
electron-forge
を使ってプロジェクトを初期化し、アプリケーションをビルドするには、次の手順に従ってください。
グローバルに electron-forge
をインストールします。
npm install -g electron-forge
新しいElectronプロジェクトを作成します(既存のプロジェクトには適用されません)。
electron-forge init my-new-project
cd my-new-project
アプリケーションを起動します。
npm start
アプリケーションをビルドします。
npm run make
これにより、各プラットフォーム用の実行可能ファイルやインストーラーが作成されます。ただし、既存のプロジェクトであれば、electron-forge
のドキュメントに従って、手動で設定を追加する必要があります。詳細については、Electron Forge 公式ドキュメントを参照してください。
じゃあなぜelectron builderでのうまくいかないプロセスを教えたんですか?
すみません、その点については失礼しました。electron-builder
とelectron-forge
の両方が広く使われており、どちらもElectronアプリケーションのビルドとパッケージ化に適しています。しかし、今回のように問題が発生した場合は、代替手段を検討することが望ましいです。
electron-forge
が適切な選択肢であることが分かっていた場合、最初からその方法を提案すべきでした。ご不便をおかけし、申し訳ありません。今後は、最適な解決策を提案できるよう努めます。
ありがとうございます。これでアプリを一通り完成させることができました。macOSで再販可能なバイナリにビルドする方法を教えてください。