Electron 完全ガイド — 2026年版 アーキテクチャ・最新情報・エコシステム
はじめに
Electron は、JavaScript / HTML / CSS でクロスプラットフォームデスクトップアプリケーションを構築するためのフレームワークです。Chromium レンダリングエンジンと Node.js ランタイムを1つの実行ファイルにバンドルします。
| 項目 | 内容 |
|---|---|
| 開発元 | OpenJS Foundation |
| 初版 | 2013年 (Atom Shell → Electron) |
| 最新安定版 | v42.1.0 (2026年5月15日) |
| GitHub Stars | ⭐121K |
| npm 月間DL | 410K / day (2026年3月) |
| macOS シェア | 19.3% (470/2440 apps) |
| ライセンス | MIT |
| 公式サイト | electronjs.org |
アーキテクチャ
Electron のアーキテクチャは Chromium のマルチプロセスモデルを継承しています。
┌──────────────────────────────────────────────────┐
│ Main Process (Node.js + Electron API) │
│ ─────────────────────── │
│ ・アプリケーションライフサイクル管理 │
│ ・ウィンドウ生成 (BrowserWindow) │
│ ・ネイティブAPI (Menu, Dialog, Tray, etc.) │
│ ・ファイルシステム / OS 操作 │
└────────────┬──────────────────────┬──────────────┘
│ IPC (ipcMain.handle) │
▼ ▼
┌──────────────────────┐ ┌──────────────────────┐
│ Renderer Process 1 │ │ Renderer Process 2 │
│ (Chromium + Preload) │ │ (Chromium + Preload) │
│ HTML / CSS / JS │ │ HTML / CSS / JS │
│ sandboxed │ │ sandboxed │
└──────────────────────┘ └──────────────────────┘
Main Process
- アプリケーションに 1つだけ存在するエントリポイント
- Node.js フルアクセス:
require, ファイルシステム, ネットワーク, 子プロセス - Electron API の GUI/低レベル系操作はここでのみ利用可能
- ウィンドウを閉じてもプロセスは生き続け、明示的に終了させる必要がある
CPU 負荷の注意: Main Process で重い処理をブロッキングすると、すべての Renderer Process の UI がフリーズします。CPU 負荷の高い処理は UtilityProcess API または Worker Threads に委譲すべきです。
Renderer Process
- 各
BrowserWindowに対して1つ起動 - Chromium 環境で HTML/CSS/JS をレンダリング
- v20 以降 sandbox デフォルト有効 → Node.js API への直接アクセス不可
nodeIntegration: trueで Node.js 有効化可能だがセキュリティリスク大
Preload Script
Renderer の Web コンテンツ読み込み前に実行されるスクリプト。sandbox 下でも限定的な Node.js API にアクセス可能。
// preload.js
const { contextBridge, ipcRenderer } = require('electron')
contextBridge.exposeInMainWorld('electronAPI', {
openFile: () => ipcRenderer.invoke('dialog:openFile'),
onFileOpened: (callback) => ipcRenderer.on('file:opened', (_, data) => callback(data)),
})
// renderer.js
window.electronAPI.openFile().then((file) => console.log(file))
重要: ipcRenderer 全体を contextBridge で公開してはいけません。必要な API のみをラップして公開することで、任意の IPC 呼び出しを防ぎます。
IPC (Inter-Process Communication)
Main ↔ Renderer 間の通信は IPC を通じて行われます。
| パターン | API | 説明 |
|---|---|---|
| リクエスト/レスポンス | ipcMain.handle / ipcRenderer.invoke | 非同期、Promise 返却 |
| 一方向 | ipcMain.on / ipcRenderer.send | 送信のみ、応答なし |
| Server Push | webContents.send | Main → Renderer への能動的送信 |
// Renderer → Main (invoke/handle)
// renderer.js
const result = await ipcRenderer.invoke('compute:hash', filePath)
// main.js
ipcMain.handle('compute:hash', async (event, filePath) => {
return await computeHash(filePath)
})
// Main → Renderer (webContents.send)
// main.js
mainWindow.webContents.send('update:progress', { percent: 50 })
// renderer.js
ipcRenderer.on('update:progress', (_, data) => {
updateProgressBar(data.percent)
})
UtilityProcess API
Node.js child_process.fork の Electron ネイティブ代替。Renderer Process との MessagePort 通信が可能。
const { utilityProcess } = require('electron')
const child = utilityProcess.fork('/path/to/worker.js')
child.postMessage('hello')
child.on('message', (msg) => console.log(msg))
セキュリティモデル
Electron のセキュリティは 防御層 の積み重ねで構築されています。
推奨設定
const win = new BrowserWindow({
webPreferences: {
contextIsolation: true, // v12 以降デフォルト
nodeIntegration: false, // v5 以降推奨 false
sandbox: true, // v20 以降デフォルト
},
})
| 設定 | 役割 |
|---|---|
contextIsolation: true | Preload と Renderer の JS コンテキストを分離。XSS があっても contextBridge 公開 API 以外にアクセス不可 |
nodeIntegration: false | Renderer で require() を無効化。ファイルシステム等への直接アクセス防止 |
sandbox: true | Chromium サンドボックスで Renderer を隔離。OS レベルの脆弱性から保護 |
ASAR Integrity
v39 で stable 化、v41 で macOS 改ざん検知が強化されました。
アプリビルド時: app.asar のハッシュを計算し ASAR ヘッダーに埋め込む
アプリ起動時: ランタイムでハッシュを再計算し改ざんを検出 → 不一致で強制終了
v42 シリーズ (2026年5月)
2026年5月6日リリースの Electron v42。Chromium 148 / V8 14.8 / Node v24.15.0 にアップグレード。
| スタック | v41 | v42 |
|---|---|---|
| Chromium | 146.0.7680.65 | 148.0.7778.96 |
| Node.js | v24.14.0 | v24.15.0 |
| V8 | 14.6 | 14.8 |
主要新機能
| 機能 | 説明 |
|---|---|
| WebAuthn Touch ID | app.configureWebAuthn({ touchID: { keychainAccessGroup } }) (macOS)。Touch ID ベースの WebAuthn プラットフォーム認証器を有効化 |
| Notification.getHistory() | macOS の通知センターから全通知履歴を取得 |
| Notification.handleActivation() | Windows: 通知クリック・返信・アクションボタンからのコールドスタート起動を処理 |
| JS スタックトレース on OOM | Renderer が Out-Of-Memory でクラッシュした際に JS コールスタックをキャプチャ |
| heap profiling | contentTracing.enableHeapProfiling() でヒーププロファイリング対応 |
| globalShortcut suspend/resume | globalShortcut.setSuspended() / isSuspended() で一時無効化・再開 |
| バイナリ動的 DL | Electron バイナリを postinstall ではなく初回起動時に node_modules へ動的ダウンロード。install-electron スクリプトで手動トリガーも可能 |
| Wayland ドロップシャドウ | Frameless ウィンドウに GTK drop shadows + 拡張リサイズ境界 (Linux Wayland)。hasShadow: false で完全装飾なし |
| WasmTrapHandlers fuse | WebAssembly trap handlers を fuse で制御可能に |
| PGO for V8 builtins | V8 組み込み関数にプロファイルガイド最適化。Array / String / RegExp が高速化 |
| MSIX auto-updating | MSIX パッケージの自動更新サポート |
v42.1.0 (2026年5月15日)
touchID.promptReasonをapp.configureWebAuthn()に追加 — Touch ID プロンプトのカスタムテキストwebRequestヘッダー変換のパフォーマンス改善- IPC dispatch / オプション辞書解析の高速化
バージョン履歴 (v40→v42)
| バージョン | リリース日 | Chromium | Node.js | V8 | 主なトピック |
|---|---|---|---|---|---|
| v42.1.0 | 2026-05-15 | 148 | v24.15.0 | 14.8 | Touch ID promptReason, IPC 高速化 |
| v42.0.1 | 2026-05-08 | 148 | v24.15.0 | 14.8 | DesktopCapturer クラッシュ修正 |
| v42.0.0 | 2026-05-06 | 148 | v24.15.0 | 14.8 | WebAuthn Touch ID, Notification 拡張, 動的 DL, PGO |
| v41.4.0 | 2026-04-30 | 146 | v24.14.0 | 14.6 | heap profiling, security fixes |
| v41.0.0 | 2026-03-11 | 146 | v24.14.0 | 14.6 | ASAR Integrity 強化, Wayland shadows, MSIX auto-update, WasmTrapHandlers |
| v40.0.0 | 2026-01-15 | 144 | v24.11.1 | 14.4 | roundedCorners (Windows), Vibrancy animation, ServiceWorker preload |
サポートポリシー
最新 3 メジャーバージョン がサポート対象。2026年5月現在:
| バージョン | ステータス |
|---|---|
| v42 (最新) | フルサポート |
| v41 | ほとんどの修正をバックポート |
| v40 | セキュリティ修正のみ |
| v39 以前 | EOL (End of Life) |
Electron を採用している主要アプリ
macOS デスクトップアプリの 19.3% (470/2440) が Electron 製です。
| アプリ | カテゴリ | ユーザー規模 |
|---|---|---|
| Visual Studio Code | コードエディタ | 14M+ 開発者 |
| Slack | チームコミュニケーション | 38.8M DAU |
| Discord | ボイス/チャット | 614M 登録ユーザー |
| Spotify | 音楽ストリーミング | グローバル |
| WhatsApp Desktop | メッセージング | 2.95B MAU |
| Figma Desktop | UI/UX デザイン | デザイナー向け |
| Notion | ワークスペース | ナレッジワーカー向け |
| Obsidian | PKM | 研究者・ライター向け |
| Signal Desktop | 暗号化メッセージング | プライバシー重視 |
| Postman | API 開発 | 開発者向け |
| GitHub Desktop | Git クライアント | 開発者向け |
| WordPress.com Desktop | CMS | ブロガー・パブリッシャー |
macOS デスクトップアプリのランタイムシェア (2026)
| ランタイム | アプリ数 | シェア |
|---|---|---|
| Native (Swift/Obj-C) | 1,728 | 70.8% |
| Electron | 470 | 19.3% |
| Qt | 189 | 7.7% |
| Tauri | 63 | 2.6% |
| Flutter | 24 | 1.0% |
| CEF | 17 | 0.7% |
リリースサイクル
Electron は 8週間ごと にメジャーバージョンをリリースします。
Alpha (4週間) → Beta (4週間) → Stable
今後のスケジュール
| バージョン | Alpha | Beta | Stable |
|---|---|---|---|
| v42 (current) | — | — | 2026-05-06 ✅ |
| v43 | 2026-05-07 | 2026-06-02 | 2026-06-30 |
| v44 | 2026-07-02 | 2026-07-28 | 2026-08-25 |
次の安定版は Electron 43 (Chromium 150, 2026年6月30日予定) です。
インストール
# 最新安定版
npm install electron@latest
# ベータ版
npm install electron@beta
# 特定バージョン
npm install electron@42.1.0
ビルド・パッケージングツール
| ツール | 説明 |
|---|---|
| electron-forge | 公式オールインワンツール。Vite / Webpack テンプレート |
| electron-builder | コミュニティ製。MSI / DMG / AppImage / Snap / Flatpak 対応 |
| electron-vite | Vite ベースの高速ビルド。HMR 対応 |
| electron-packager | シンプルなパッケージング |
セキュリティベストプラクティス
| 対策 | 理由 |
|---|---|
| contextIsolation: true | XSS からの隔離 |
| sandbox: true | Chromium サンドボックス |
| nodeIntegration: false | Renderer の Node.js アクセス制限 |
| IPC チャンネルの限定公開 | 攻撃面の最小化 |
| 全 IPC 引数のバリデーション | メインプロセスでの入力検証 |
| safeStorage での鍵管理 | API キー・トークンの暗号化保存 |
| ASAR Integrity 有効化 | アプリ改ざん検知 |
代替フレームワーク比較
| フレームワーク | 言語 | バイナリサイズ (median) | メモリ使用量 | エコシステム |
|---|---|---|---|---|
| Electron | JS/TS | 416 MB | 高い | 最大 (⭐121K) |
| Native (Swift/C++) | Swift/Obj-C | 43 MB | 低い | 限定的 |
| Tauri | Rust + JS | 49 MB | 中程度 | 成長中 (⭐90K+) |
| Qt | C++ | 様々 | 低い | 安定 |
| Flutter Desktop | Dart | 様々 | 中程度 | 成長中 |
| .NET MAUI | C# | 様々 | 中程度 | Windows 偏重 |
Electron の強み:
- 最大のエコシステムとコミュニティ
- ブラウザの全機能がそのまま利用可能
- Web 開発者がそのままデスクトップ開発に移行可能
- Chromium の DevTools / パフォーマンスツールをフル活用
Electron の課題:
- バイナリサイズ (Chromium + Node.js 丸ごとバンドル)
- メモリ使用量がネイティブ比で大きい
- Renderer ごとにプロセスが増加
まとめ
Electron v42 は、WebAuthn Touch ID や Notification 拡張による OS 統合の深化、動的バイナリダウンロードによる DX 改善、PGO for V8 によるパフォーマンス向上と、着実な進化を遂げています。
GitHub ⭐121K、macOS 19.3% のシェア、npm 40万+/day のダウンロード数が示す通り、クロスプラットフォームデスクトップ開発のデファクトスタンダード としての地位は依然として盤石です。
Tauri などの軽量代替が台頭する中でも、最大のエコシステムと Chromium 互換性という強みを背景に、Electron は引き続き多くのプロダクトに採用され続けるでしょう。
参考リンク
| リソース | URL |
|---|---|
| 公式サイト | electronjs.org |
| GitHub | github.com/electron/electron |
| Release Schedule | releases.electronjs.org/schedule |
| Blog | electronjs.org/blog |
| Documentation | electronjs.org/docs |