electron-pro について
Web技術でクロスプラットフォームのデスクトップアプリを開発するエンジニア向けのElectronスキルです。安全なIPC、OS連携、パフォーマンス、パッケージング、リリースを扱います。
主な機能
- 01クロスプラットフォームのElectron設計
- 02安全なメイン・レンダラー間IPC
- 03OS連携の指針
- 04起動時間とメモリの最適化
- 05パッケージング、署名、公証
活用シーン
- 01Webアプリのデスクトップアプリ化
- 02安全なレンダラー・メイン間通信の設計
- 03起動時間やメモリ使用量の削減
- 04署名付き配布に向けた準備
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ 404kidwiz/ claude-supercode-skills --skill electron-proインストール後、Claude Code で/electron-proを入力して読み込まれたか確認します。
詳細
Electron デスクトップ開発者
目的
Electron、IPC アーキテクチャ、OS レベルの統合を専門とする、クロスプラットフォームのデスクトップアプリケーション開発の専門知識を提供します。Windows、macOS、Linux 向けに、ネイティブ機能を備えたウェブ技術を使用して、安全で高パフォーマンスなデスクトップアプリケーションを構築します。
使用するタイミング
- クロスプラットフォームのデスクトップアプリを構築する場合(VS Code、Discord のようなアプリ)
- ウェブアプリをネイティブ機能(ファイルシステム、通知)を備えたデスクトップアプリに移行する場合
- 安全な IPC(Main ↔ Renderer 通信)を実装する場合
- Electron のメモリ使用量や起動時間を最適化する場合
- 自動アップデーター(electron-updater)を設定する場合
- アプリストア向けにアプリへ署名し、公証する場合
2. 判断フレームワーク
アーキテクチャの選択
How to structure the app?
│
├─ **Security First (Recommended)**
│ ├─ Context Isolation? → **Yes** (Standard since v12)
│ ├─ Node Integration? → **No** (Never in Renderer)
│ └─ Preload Scripts? → **Yes** (Bridge API)
│
├─ **Data Persistence**
│ ├─ Simple Settings? → **electron-store** (JSON)
│ ├─ Large Datasets? → **SQLite** (`better-sqlite3` in Main process)
│ └─ User Files? → **Native File System API**
│
└─ **UI Framework**
├─ React/Vue/Svelte? → **Yes** (Standard SPA approach)
├─ Multiple Windows? → **Window Manager Pattern**
└─ System Tray App? → **Hidden Window Pattern**
IPC 通信パターン
| パターン | メソッド | 使用例 |
|---|---|---|
| 一方向(Renderer → Main) | ipcRenderer.send | ログ記録、分析、ウィンドウの最小化 |
| 双方向(リクエスト/レスポンス) | ipcRenderer.invoke | DB クエリ、ファイルの読み取り、負荷の高い計算 |
| Main → Renderer | webContents.send | メニュー操作、システムイベント、プッシュ通知 |
危険な兆候 → security-auditor にエスカレーションしてください:
- 本番環境で
nodeIntegration: trueを有効にする contextIsolationを無効にする- 厳格な CSP なしでリモートコンテンツ(
https://)を読み込む remoteモジュールを使用する(非推奨で安全ではありません)
ワークフロー 2:パフォーマンスの最適化(起動)
目標: 起動時間を 2 秒未満に短縮します。
手順:
-
V8 スナップショット
electron-linkまたはv8-compile-cacheを使用して、JS を事前コンパイルします。
-
モジュールの遅延読み込み
main.tsの先頭ですべてをrequire()しないでください。
// 悪い例 import { heavyLib } from 'heavy-lib'; // 良い例 ipcMain.handle('do-work', () => { const heavyLib = require('heavy-lib'); heavyLib.process(); }); -
Main プロセスをバンドルする
- Main プロセスにも(Renderer だけでなく)
esbuildまたはwebpackを使用し、未使用のコードをツリーシェイクして圧縮します。
- Main プロセスにも(Renderer だけでなく)
4. パターンとテンプレート
パターン 1:ワーカースレッド(CPU 負荷の高いタスク)
使用例: UI をフリーズさせずに、画像処理や大きなファイルの解析を行います。
// main.ts
import { Worker } from 'worker_threads';
ipcMain.handle('process-image', (event, data) => {
return new Promise((resolve, reject) => {
const worker = new Worker('./worker.js', { workerData: data });
worker.on('message', resolve);
worker.on('error', reject);
});
});
パターン 2:ディープリンク(プロトコルハンドラー)
使用例: ブラウザーからアプリを開きます(myapp://open?id=123)。
// main.ts
if (process.defaultApp) {
if (process.argv.length >= 2) {
app.setAsDefaultProtocolClient('myapp', process.execPath, [path.resolve(process.argv[1])]);
}
} else {
app.setAsDefaultProtocolClient('myapp');
}
app.on('open-url', (event, url) => {
event.preventDefault();
// Parse url 'myapp://...' and navigate renderer
mainWindow.webContents.send('navigate', url);
});
6. 統合パターン
frontend-ui-ux-engineer:
- 引き継ぎ: UI 開発者が React/Vue アプリを構築し、Electron 開発者がそれをラップします。
- 連携: ウィンドウコントロール(カスタムタイトルバー)や、すりガラス/アクリル効果に対応します。
- ツール: CSS
app-region: drag。
devops-engineer:
- 引き継ぎ: Electron 開発者がビルド設定を提供し、DevOps が CI パイプラインを構築します。
- 連携: コード署名証明書(Apple Developer ID、Windows EV)。
- ツール: Electron Builder、公証スクリプト。
security-engineer:
- 引き継ぎ: Electron 開発者が機能を実装し、セキュリティ開発者が IPC の公開範囲を監査します。
- 連携: コンテンツセキュリティポリシー(CSP)ヘッダーを定義します。
- ツール: Electronegativity(スキャナー)。
コメント
Markdown 対応