Agent Skills by ALSEL
Anthropic ClaudeLLM・AI開発⭐ リポ 0品質スコア 50/100

electron-best-practices

ElectronアプリをReactと組み合わせて開発する際のベストプラクティスをAIエージェントに提供します。セキュリティパターン、型安全なIPC通信、React連携、コード署名を含むパッケージング、テストまでを網羅しており、electron-vite・electron-forge・contextBridge・Playwrightなどを活用したデスクトップアプリ開発全般で活躍します。

description の原文を見る

Guide AI agents through Electron app development with React including security patterns, type-safe IPC, React integration, packaging with code signing, and testing. Keywords: electron, electron-vite, electron-forge, contextBridge, IPC, security, react, packaging, code signing, notarization, playwright, desktop app.

SKILL.md 本文

Electron + React ベストプラクティス

セキュアで本番環境対応のElectronアプリケーションをReactで構築するようAIエージェントをガイドします。このスキルはセキュリティパターン、タイプセーフなIPC通信、プロジェクトセットアップガイダンス、パッケージング・コード署名ワークフロー、および分析・スキャフォーリング・型生成用のツールを提供します。

このスキルを使用する場合

以下の場合にこのスキルを使用してください:

  • Electron main、preload、または renderer プロセスコード生成時
  • electron-vite または Electron Forge 設定時
  • プロセス間のIPC通信セットアップ時
  • セキュリティパターンの実装時(contextBridge、sandbox、CSP)
  • デスクトップアプリケーションのパッケージング・署名・公証時
  • Playwright を使用した Electron アプリテスト時
  • マルチウィンドウアーキテクチャ設計時

以下の場合はこのスキルを使用しないでください:

  • Tauri アプリ構築時(異なるパラダイム、Tauri固有のガイダンス使用)
  • デスクトップ要件のない純粋なウェブアプリ構築時
  • Electron 20以下をターゲットとする場合(セキュリティデフォルトが異なる)
  • React以外のrendererフレームワーク使用時(フレームワーク固有のスキル使用)

コア原則

1. セキュリティファースト アーキテクチャ

モダンなElectronセキュリティはElectron 20以降で標準化された3つのデフォルトに依存しています:コンテキスト分離、サンドボックスモード、nodeIntegration無効化。これらのいずれかを無効化するとXSS攻撃が完全なリモートコード実行にエスカレートする可能性があります。すべてのmain-renderer通信はcontextBridgeを通じてフローします:

// preload.ts - SECURE パターン
contextBridge.exposeInMainWorld('electronAPI', {
  loadPreferences: () => ipcRenderer.invoke('load-prefs'),
  saveFile: (content: string) => ipcRenderer.invoke('save-file', content),
  onUpdateCounter: (callback: (value: number) => void) => {
    const handler = (_event: IpcRendererEvent, value: number) => callback(value);
    ipcRenderer.on('update-counter', handler);
    return () => ipcRenderer.removeListener('update-counter', handler);
  }
});

ローカルファイル読み込みアプリケーション用のContent Security PolicyをHTTPヘッダー経由で設定し、スクリプトソースを'self'に制限します。

2. タイプセーフなIPC通信

invoke/handleパターンは、リクエスト-レスポンス通信において send/on より推奨されます。適切な非同期/待機セマンティクスとエラー伝播を提供します。型付きチャネルの場合、マップ型パターンを使用します:

type IpcChannelMap = {
  'load-prefs': { args: []; return: UserPreferences };
  'save-file': { args: [content: string]; return: { success: boolean } };
};

複雑なアプリケーション向けに、electron-trpc は tRPC のルーターパターンを使用したZod検証による完全な型安全性を提供します:

export const appRouter = t.router({
  greeting: t.procedure
    .input(z.object({ name: z.string() }))
    .query(({ input }) => `Hello, ${input.name}!`),
});

IPC境界を越えたエラーハンドリングには注意が必要です。Electronはエラーオブジェクトのmessageプロパティのみをシリアライズするためです。完全なエラーコンテキストを保持するために、レスポンスを{ success, data, error }結果型でラップします。

3. モダンプロジェクトセットアップ

推奨スタックは、開発用にelectron-viteを、パッケージング用にElectron Forgeを使用します。electron-viteは、main、preload、renderプロセスを管理する統一設定を提供し、開発サーバーの起動が1秒以下、HMRがインスタント化されます。Electron Forgeは署名と公証にファーストパーティのElectronパッケージを使用します。

src/
├── main/           # Main プロセス (Node.js 環境)
│   ├── index.ts
│   └── ipc/        # IPC ハンドラー
├── preload/        # contextBridge を通じたセキュアブリッジ
│   ├── index.ts
│   └── index.d.ts  # 公開API用のTypeScript宣言
└── renderer/       # React アプリケーション (純粋なウェブ、Node アクセスなし)
    ├── src/
    └── index.html

4. React 統合パターン

React 18の並行機能はElectronのChromiumベースrendererで通常通り動作します。Strict Modeのエフェクトの二重呼び出しはメモリ問題につながるIPC リスナーリークをキャッチします。IPC リスナーを登録するエフェクトから常にクリーンアップ関数を返します:

useEffect(() => {
  const cleanup = window.electronAPI.onUpdateCounter((value) => {
    setCount(value);
  });
  return cleanup;
}, []);

マルチウィンドウアプリケーションの場合、mainプロセスが共有状態の単一の真実のソースとして機能すべきです。electron-storeとの永続化の組み合わせでIPC ブロードキャストを使用して、任意のウィンドウのミューテーションがすべてのウィンドウを更新するようにします。

クイックリファレンス

カテゴリー推奨回避
セキュリティcontextBridge.exposeInMainWorld()nodeIntegration: true
IPCinvoke/handle パターンリクエスト-レスポンスの send/on
Preload型付き関数ラッパー生の ipcRenderer 公開
ビルドツールelectron-vitewebpackベースのツールチェーン
パッケージングElectron Forge手動パッケージング
状態管理Zustand + electron-storeシンプルアプリケーション用Redux
テストPlaywright E2ESpectron (非推奨)
アップデートelectron-updater手動アップデートチェック
署名CI統合コード署名未署名リリース
CSPHTTPヘッダー、'self'のみCSPなし
エラーハンドリング結果型 {success, data, error}IPC越しの生のError
マルチウィンドウ状態ハブとしてのmainプロセスウィンドウ間直接通信

コード生成ガイドライン

Electronコードを生成する場合、これらのパターンに従います:

BrowserWindow 作成

const win = new BrowserWindow({
  webPreferences: {
    preload: path.join(__dirname, '../preload/index.js'),
    contextIsolation: true,
    sandbox: true,
    nodeIntegration: false,
  },
});

常にcontextIsolationとsandboxを有効化します。nodeIntegrationを有効化しないでください。preloadパスは構築出力ロケーションに解決される必要があります。

IPC ハンドラーモジュール

export function registerFileHandlers(): void {
  ipcMain.handle('save-file', async (_event, content: string) => {
    try {
      await fs.writeFile(filePath, content);
      return { success: true, data: filePath };
    } catch (err) {
      return { success: false, error: (err as Error).message };
    }
  });
}

関連するハンドラーをモジュールにグループ化します。すべての戻り値に結果型パターンを使用します。rendererプロセスから受け取るすべての引数を検証します。

一般的なアンチパターン

Electronコードを生成する場合、これらのパターンを回避します:

アンチパターン問題点解決策
nodeIntegration: trueXSSが完全なRCEにエスカレート無効化を維持(デフォルト)
ipcRendererの直接公開rendererからの完全なIPCアクセスcontextBridgeの関数でラップ
contextIsolationなしrendererがpreloadスコープにアクセス有効化を維持(Electron 12以降デフォルト)
コード署名なしOSセキュリティ警告、Gatekeeperブロックすべてのプラットフォーム向けに署名・公証
sandboxなしのBrowserWindowpreloadが完全なNode.jsアクセスsandboxを有効化(Electron 20以降デフォルト)
未検証のIPC引数rendererからのインジェクション攻撃Zodまたはマニュアルチェックで検証
0.0.0.0サーバーバインドネットワーク公開ローカルサーバー常に127.0.0.1にバインド
CSPヘッダーなしスクリプトインジェクションベクトルHTTPヘッダー経由で厳密なCSPを設定
IPC エラーシリアライズなし境界を越えたエラーコンテキスト喪失Result型パターン使用
Spectronテスト非推奨、Electron 13最大対応Playwright使用

セキュリティ監査チェックリストは references/security/security-checklist.md を参照してください。

スクリプトリファレンス

analyze-security.ts

Electronプロジェクトのセキュリティ設定ミスを分析します:

deno run --allow-read scripts/analyze-security.ts <path> [options]

Options:
  --strict    すべてのチェックを有効化
  --json      CIの為JSONで出力
  -h, --help  ヘルプを表示

Examples:
  # プロジェクトの分析
  deno run --allow-read scripts/analyze-security.ts ./src

  # CI パイプライン用 Strict モード
  deno run --allow-read scripts/analyze-security.ts ./src --strict --json

scaffold-electron-app.ts

セキュアなデフォルト設定で新しいElectron + Reactプロジェクトをスキャフォールドします:

deno run --allow-read --allow-write scripts/scaffold-electron-app.ts [options]

Options:
  --name <name>     アプリケーション名(必須)
  --path <path>     ターゲットディレクトリ(デフォルト:./)
  --with-react      React セットアップを含める
  --with-trpc       electron-trpc を含める
  --with-tests      Playwright テストを含める

Examples:
  # React を使用した基本的なアプリケーション
  deno run --allow-read --allow-write scripts/scaffold-electron-app.ts \
    --name "my-app" --with-react

  # trpc とテストを使用した完全なセットアップ
  deno run --allow-read --allow-write scripts/scaffold-electron-app.ts \
    --name "my-app" --with-react --with-trpc --with-tests

generate-ipc-types.ts

IPC ハンドラーファイルから TypeScript 型定義を生成します:

deno run --allow-read --allow-write scripts/generate-ipc-types.ts [options]

Options:
  --handlers <path>  IPC ハンドラーファイルへのパス
  --output <path>    型定義の出力パス
  --validate         既存の型がハンドラーと一致することを検証

Examples:
  # ハンドラーから型を生成
  deno run --allow-read --allow-write scripts/generate-ipc-types.ts \
    --handlers ./src/main/ipc --output ./src/preload/ipc-types.d.ts

  # CI で型を検証
  deno run --allow-read scripts/generate-ipc-types.ts \
    --handlers ./src/main/ipc --validate

追加リソース

セキュリティ

  • references/security/context-isolation.md - contextBridge と分離パターン
  • references/security/csp-and-permissions.md - Content Security Policy 設定
  • references/security/security-checklist.md - セキュリティ監査チェックリスト完全版

IPC 通信

  • references/ipc/typed-ipc.md - 型付きチャネルマップパターン
  • references/ipc/electron-trpc.md - 完全な型安全性のための tRPC 統合
  • references/ipc/error-serialization.md - IPC 境界を越えた Result 型

アーキテクチャ

  • references/architecture/project-structure.md - ディレクトリ組織
  • references/architecture/process-separation.md - Main、preload、renderer のロール
  • references/architecture/multi-window-state.md - ウィンドウ間での共有状態

React 統合

  • references/integration/react-patterns.md - useEffect クリーンアップ、Strict Mode
  • references/integration/state-management.md - Zustand と electron-store パターン

パッケージング・配布

  • references/packaging/code-signing.md - プラットフォーム固有の署名ワークフロー
  • references/packaging/auto-updates.md - electron-updater 設定
  • references/packaging/bundle-optimization.md - サイズ削減技術
  • references/packaging/ci-cd-patterns.md - GitHub Actions マトリックスビルド

テスト

  • references/testing/playwright-e2e.md - Playwright Electron サポート
  • references/testing/unit-testing.md - Jest/Vitest マルチプロジェクト設定
  • references/testing/test-structure.md - テスト組織パターン

ツーリング

  • references/tooling/electron-vite.md - ビルドツール設定
  • references/tooling/electron-forge.md - パッケージングと配布
  • references/tooling/tauri-comparison.md - Tauri を選択する場合

テンプレート

  • assets/templates/main-process.ts.md - Main プロセススターターテンプレート
  • assets/templates/preload-script.ts.md - contextBridge を使用した Preload スクリプト
  • assets/templates/ipc-handler.ts.md - IPC ハンドラーモジュールテンプレート
  • assets/templates/react-root.tsx.md - React ルートコンポーネントテンプレート

設定例

  • assets/configs/electron-vite.config.ts.md - electron-vite 設定
  • assets/configs/forge.config.js.md - Electron Forge 設定
  • assets/configs/tsconfig.json.md - TypeScript 設定プリセット
  • assets/configs/playwright.config.ts.md - Playwright Electron テスト設定

完全な例

  • assets/examples/typed-ipc-example.md - エンドツーエンド型付き IPC ウォークスルー
  • assets/examples/multi-window-example.md - マルチウィンドウ状態管理

ライセンス: MIT(寛容ライセンスのため全文を引用しています) · 原本リポジトリ

詳細情報

作者
jwynia
リポジトリ
jwynia/agent-skills
ライセンス
MIT
最終更新
不明

Source: https://github.com/jwynia/agent-skills / ライセンス: MIT

関連スキル

OpenAILLM・AI開発⭐ リポ 6,054

agent-browser

AI エージェント向けのブラウザ自動化 CLI です。ウェブサイトとの対話が必要な場合に使用します。ページ遷移、フォーム入力、ボタンクリック、スクリーンショット取得、データ抽出、ウェブアプリのテスト、ブラウザ操作の自動化など、あらゆるブラウザタスクに対応できます。「ウェブサイトを開く」「フォームに記入する」「ボタンをクリックする」「スクリーンショットを取得する」「ページからデータを抽出する」「このウェブアプリをテストする」「サイトにログインする」「ブラウザ操作を自動化する」といった要求や、プログラマティックなウェブ操作が必要なタスクで起動します。

by JimmyLv
汎用LLM・AI開発⭐ リポ 1,982

anyskill

AnySkill — あなたのプライベート・スキルクラウド。GitHubを基盤としたリポジトリからエージェントスキルを管理、同期、動的にロードできます。自然言語でクラウドスキルを検索し、オンデマンドでプロンプトを自動ロード、カスタムスキルのアップロードと共有、スキルバンドルの一括インストールが可能です。OpenClaw、Antigravity、Claude Code、Cursorに対応しています。

by LeoYeAI
汎用LLM・AI開発⭐ リポ 1,982

engram

AIエージェント向けの永続的なメモリシステムです。バグ修正、意思決定、発見、設定変更の後はmem_saveを使用してください。ユーザーが「覚えている」「記憶している」と言及した場合、または以前のセッションと重複する作業を開始する際はmem_searchを使用します。セッション終了前にmem_session_summaryを使用して、コンテキストを保持してください。

by LeoYeAI
汎用LLM・AI開発⭐ リポ 21,584

skyvern

AI駆動のブラウザ自動化により、任意のウェブサイトを自動化できます。フォーム入力、データ抽出、ファイルダウンロード、ログイン、複数ステップのワークフロー実行など、ユーザーがウェブサイトと連携する必要があるときに使用します。Skyvernは、LLMとコンピュータビジョンを活用して、未知のサイトも自動操作可能です。Python SDK、TypeScript SDK、REST API、MCPサーバー、またはCLIを通じて統合できます。

by Skyvern-AI
汎用LLM・AI開発⭐ リポ 1,149

pinchbench

PinchBenchベンチマークを実行して、OpenClawエージェントの実世界タスクにおけるパフォーマンスを評価できます。モデルの機能テスト、モデル間の比較、ベンチマーク結果のリーダーボード提出、またはOpenClawのセットアップがカレンダー、メール、リサーチ、コーディング、複数ステップのワークフローにどの程度対応しているかを確認する際に使用します。

by pinchbench
汎用LLM・AI開発⭐ リポ 4,693

openui

OpenUIとOpenUI Langを使用してジェネレーティブUIアプリを構築できます。これらはLLM生成インターフェースのためのトークン効率的なオープン標準です。OpenUI、@openuidev、ジェネレーティブUI、LLMからのストリーミングUI、AI向けコンポーネントライブラリ、またはjson-render/A2UIの置き換えについて述べる際に使用します。スキャフォルディング、defineComponent、システムプロンプト、Renderer、およびOpenUI Lang出力のデバッグに対応しています。

by thesysdev
本サイトは GitHub 上で公開されているオープンソースの SKILL.md ファイルをクロール・インデックス化したものです。 各スキルの著作権は原作者に帰属します。掲載に問題がある場合は info@alsel.co.jp または /takedown フォームよりご連絡ください。
原作者: jwynia · jwynia/agent-skills · ライセンス: MIT