electron-development
JavaScript/TypeScriptを使用したクロスプラットフォームデスクトップアプリケーション構築のためのElectron開発ガイドラインです。セキュアなプロセス間通信やネイティブOS機能の活用など、実践的な開発指針を提供します。
description の原文を見る
Electron development guidelines for building cross-platform desktop applications with JavaScript/TypeScript
SKILL.md 本文
Electron開発ガイドライン
JavaScript/TypeScriptを使用したクロスプラットフォーム対応デスクトップアプリケーション構築のためのElectron開発のエキスパートです。
コア原則
- Electronアプリケーションのセキュリティベストプラクティスに従う
- メインプロセスとレンダラープロセスの関心を分離する
- IPCをプロセス間通信に使用する
- 適切なウィンドウ管理を実装する
プロジェクト構造
src/
├── main/ # Main process code
│ ├── index.ts # Entry point
│ ├── ipc/ # IPC handlers
│ └── utils/ # Utilities
├── renderer/ # Renderer process code
│ ├── components/ # UI components
│ ├── pages/ # Application pages
│ └── styles/ # Stylesheets
├── preload/ # Preload scripts
│ └── index.ts # Expose APIs to renderer
└── shared/ # Shared types and utilities
セキュリティベストプラクティス
コンテキスト分離
// main.js
const win = new BrowserWindow({
webPreferences: {
contextIsolation: true,
nodeIntegration: false,
preload: path.join(__dirname, 'preload.js')
}
});
プリロードスクリプト
// preload.js
const { contextBridge, ipcRenderer } = require('electron');
contextBridge.exposeInMainWorld('electronAPI', {
sendMessage: (channel, data) => {
const validChannels = ['toMain'];
if (validChannels.includes(channel)) {
ipcRenderer.send(channel, data);
}
},
onMessage: (channel, callback) => {
const validChannels = ['fromMain'];
if (validChannels.includes(channel)) {
ipcRenderer.on(channel, (event, ...args) => callback(...args));
}
}
});
コンテンツセキュリティポリシー
<meta http-equiv="Content-Security-Policy" content="default-src 'self'; script-src 'self'">
IPC通信
メインプロセス
const { ipcMain } = require('electron');
ipcMain.handle('read-file', async (event, filePath) => {
const content = await fs.promises.readFile(filePath, 'utf-8');
return content;
});
ipcMain.on('save-file', (event, { path, content }) => {
fs.writeFileSync(path, content);
event.reply('file-saved', { success: true });
});
レンダラープロセス
// Using exposed API from preload
const content = await window.electronAPI.readFile('/path/to/file');
ウィンドウ管理
const { BrowserWindow } = require('electron');
function createWindow() {
const win = new BrowserWindow({
width: 1200,
height: 800,
minWidth: 800,
minHeight: 600,
webPreferences: {
contextIsolation: true,
preload: path.join(__dirname, 'preload.js')
}
});
// Handle window events
win.on('closed', () => {
// Cleanup
});
// Load content
if (process.env.NODE_ENV === 'development') {
win.loadURL('http://localhost:3000');
win.webContents.openDevTools();
} else {
win.loadFile('dist/index.html');
}
}
自動更新
const { autoUpdater } = require('electron-updater');
autoUpdater.on('update-available', () => {
// Notify user
});
autoUpdater.on('update-downloaded', () => {
autoUpdater.quitAndInstall();
});
app.whenReady().then(() => {
autoUpdater.checkForUpdatesAndNotify();
});
ネイティブモジュール
- ネイティブ依存関係には electron-rebuild を使用する
- カスタムモジュールの場合は node-addon-api を検討する
- すべてのプラットフォームでネイティブモジュールをテストする
- アーキテクチャの違い(x64, arm64)に対応する
パフォーマンス
- メインプロセスのブロッキングを最小化する
- 計算量の多い処理にはweb workersを使用する
- レイジーローディングを実装する
- DevToolsでプロファイリングを実施する
テスト
- E2EテストにはSpectronまたはPlaywrightを使用する
- メインプロセスのロジックをユニットテストする
- IPCハンドラーをテストする
- すべてのターゲットプラットフォームでテストする
ビルドと配布
- パッケージ化にはelectron-builderを使用する
- 適切なアプリ署名を設定する
- 自動更新インフラストラクチャをセットアップする
- すべてのプラットフォームでインストーラーをテストする
ライセンス: Apache-2.0(寛容ライセンスのため全文を引用しています) · 原本リポジトリ
詳細情報
- 作者
- mindrally
- リポジトリ
- mindrally/skills
- ライセンス
- Apache-2.0
- 最終更新
- 不明
Source: https://github.com/mindrally/skills / ライセンス: Apache-2.0
関連スキル
doubt-driven-development
重要な判断はすべて、本番環境への展開前に新しい視点から対抗的レビューを実施します。速度より正確性が重要な場合、不慣れなコードを扱う場合、本番環境・セキュリティに関わるロジック・取り消し不可の操作など影響度が高い場合、または後でバグを修正するよりも今検証する方が効率的な場合に活用してください。
apprun-skills
TypeScriptを使用したAppRunアプリケーションのMVU設計に関する総合的なガイダンスが得られます。コンポーネントパターン、イベントハンドリング、状態管理(非同期ジェネレータを含む)、パラメータと保護機能を備えたルーティング・ナビゲーション、vistestを使用したテストに対応しています。AppRunコンポーネントの設計・レビュー、ルートの配線、状態フローの管理、AppRunテストの作成時に活用してください。
desloppify
コードベースのヘルスチェックと技術負債の追跡ツールです。コード品質、技術負債、デッドコード、大規模ファイル、ゴッドクラス、重複関数、コードスメル、命名規則の問題、インポートサイクル、結合度の問題についてユーザーが質問した場合に使用してください。また、ヘルススコアの確認、次の改善項目の提案、クリーンアップ計画の作成をリクエストされた際にも対応します。29言語に対応しています。
debugging-and-error-recovery
テストが失敗したり、ビルドが壊れたり、動作が期待と異なったり、予期しないエラーが発生したりした場合に、体系的な根本原因デバッグをガイドします。推測ではなく、根本原因を見つけて修正するための体系的なアプローチが必要な場合に使用してください。
test-driven-development
テスト駆動開発により実装を進めます。ロジックの実装、バグの修正、動作の変更など、あらゆる場面で活用できます。コードが正常に動作することを証明する必要がある場合、バグ報告を受けた場合、既存機能を修正する予定がある場合に使用してください。
incremental-implementation
変更を段階的に実施します。複数のファイルに影響する機能や変更を実装する場合に使用してください。大量のコードを一度に書こうとしている場合や、タスクが一度では完結できないほど大きい場合に活用します。