Electron全然わからんのでゼロから勉強すべ

取り敢えずリポジトリを作る

ドキュメント読む

By embedding Chromium and Node.js into its binary
バイナリにNode.jsも組み込まれてるのね
まあnodeのライブラリも使えるのでそれはそうか…

チュートリアルやるのがおすすめ

npm install electron --save-dev

これで取り敢えずこれでElectron実行できる
consoleにメッセージが表示されるだけでウィンドウとかは生成されない

ウィンドウ作成できた

ウィンドウの管理

preload scriptの話

セキュリティ的な理由で、デフォルトではmain processはNode.jsの機能にフルアクセスできるけどrenderer processはWebページとして動いていてNode.jsの機能にはアクセスできない

main processとrenderer processの橋渡しをするための特別なスクリプトをElectronではpreloadと呼んでいる

preload scriptはHTML DOM(renderer processで扱うもの)とNode.jsおよびElectron API(main processで扱うもの)のサブセットの両方にアクセスできる。

preload scriptはwebページをロードする前に実行される

preload scriptではcontextBridge APIを利用することでglobalなオブジェクトを定義できる

contextBridge APIでversionsを定義する

IPCでmain processで定義された処理をrenderer processから呼び出す


Electronのコアにはパッケージ化や配布のための機能は含まれていない
Electron Forgeを利用する

npm install --save-dev @electron-forge/cli
npx electron-forge import
なんかいっぱい依存が追加された

tsのコンパイルするように

配布にはコード署名が必要


チュートリアルはひとまず了

パッケージ化したElectronアプリでメディアデバイスにアクセスする方法
自己署名する

electron-vite
( @quick-start/electron
)で作成したプロジェクトの依存をゴニョゴニョしてパッケージのバージョンを最新にして npm install
したら postinstall
が永久に終わらない問題に直面して解決しようといろいろ調べてたら2時間くらい溶けた
結局 electron-builder
のバージョンを1つ落としたら無事一瞬で完了した
{
"name": "foo",
"version": "0.1.0",
"description": "foo",
"main": "./out/main/index.js",
"author": "carimatics",
"homepage": "https://example.com/foo",
"type": "module",
"scripts": {
"format": "biome format --write ./src",
"lint": "biome lint --write ./src",
"check": "biome check --write ./src",
"typecheck:node": "tsc --noEmit -p tsconfig.node.json --composite false",
"typecheck:web": "tsc --noEmit -p tsconfig.web.json --composite false",
"typecheck": "npm run typecheck:node && npm run typecheck:web",
"start": "electron-vite preview",
"dev": "electron-vite dev",
"build": "npm run typecheck && electron-vite build",
"postinstall": "electron-builder install-app-deps",
"build:unpack": "npm run build && electron-builder --dir",
"build:win": "npm run build && electron-builder --win",
"build:mac": "electron-vite build && electron-builder --mac",
"build:linux": "electron-vite build && electron-builder --linux"
},
"dependencies": {
"@electron-toolkit/preload": "3.0.1",
"@electron-toolkit/utils": "3.0.0",
"electron-updater": "6.3.9"
},
"devDependencies": {
"@biomejs/biome": "1.9.3",
"@electron-toolkit/tsconfig": "1.0.1",
"@types/node": "20.16.10",
"@types/react": "18.3.11",
"@types/react-dom": "18.3.0",
"@vitejs/plugin-react": "4.3.2",
"electron": "32.1.2",
- "electron-builder": "25.1.8",
+ "electron-builder": "25.1.7",
"electron-vite": "2.3.0",
"react": "18.3.1",
"react-dom": "18.3.1",
"typescript": "5.6.2",
"vite": "5.4.8",
"vitest": "2.1.2"
}
}