このガイドでは、Windows API 開発用に Electron 開発環境を設定する手順について説明します。 必要なツールをインストールし、projectを初期化して、Windows SDK を構成します。
[前提条件]
始める前に、以下のことを確認してください:
- Windows 11
-
Node.js -
winget install OpenJS.NodeJS --source winget -
.NET SDK v10 -
winget install Microsoft.DotNet.SDK.10 --source winget -
Visual Studio のネイティブ デスクトップ ワークロード -
winget install --id Microsoft.VisualStudio.Community --source winget --override "--add Microsoft.VisualStudio.Workload.NativeDesktop --includeRecommended --passive --wait"
手順 1: 新しい Electron アプリを作成する
優れたツールとパッケージのサポートを提供する Electron Forge を使用した新しい Electron アプリから始めます。 既存のアプリから開始する場合は、この手順をスキップできます。
npm create electron-app@latest my-windows-app
cd my-windows-app
Electron Forge からプロンプトが表示された場合:
- Bundler: [なし] を選択します (推奨 — ネイティブ アドオンは追加の構成なしで動作します)
- 言語: JavaScript を選択します (このガイドでは JS を使用します。TypeScript も機能します)
- Electron バージョン: 最新の選択
- git を初期化する: ユーザー設定
アプリの実行を確認します。
npm start
既定の [Electron Forge] ウィンドウが表示されます。 それを閉じて、Windows機能を追加しましょう。
手順 2: winapp CLI をインストールする
Electron ワークフローには、winget からインストールされたスタンドアロン CLI ではなく 、npm パッケージ (@microsoft/winappcli) が必要です。 npm パッケージには、ネイティブ CLI で使用できない Node.js固有のヘルパー ( add-electron-debug-identity や create-addonなど) が含まれています。 winget から winapp が既にインストールされている場合は問題ありません。npm パッケージはプロジェクトの依存関係として Node.js固有のツールを追加し、システムのインストールと競合しません。
npm install --save-dev @microsoft/winappcli
手順 3: Windows 開発用にprojectを初期化する
winapp init コマンドは、アプリ マニフェスト、アセット、SDK など、必要なものをすべて一度に設定します。
次のコマンドを実行し、プロンプトに従います。
npx winapp init .
プロンプトが表示されたら、次を実行します。
- パッケージ名: Enter キーを押して既定値をそのまま使用します (my-windows-app)
- Publisher名: Enter キーを押して既定値をそのまま使用するか、名前を入力します
- バージョン: Enter キーを押して 1.0.0.0 を受け入れる
- エントリ ポイント: Enter キーを押して既定値 (my-windows-app.exe) をそのまま使用します。
- SDK のセットアップ: [安定した SDK] を選択する
- JS/TypeScript バインドの追加: Enter キーを押して既定値 (はい) をそのまま使用して、Windows アプリ SDK API の JS バインドを生成します
注
--use-defaults
--add-js-bindingsを渡さない限り、非対話型の init は JS バインディングをスキップします。 対話型 npx winapp init . を実行してプロンプトでオプトインするか、自動化に npx winapp init . --use-defaults --add-js-bindings を使用します。
winapp initは何をしますか?
このコマンドは、Windows 開発に必要なすべてのものを設定します。
以下の内容を含む
.winapp/フォルダーを作成します。- Windows SDK からのヘッダーとライブラリ
- Windows アプリ SDK のヘッダーとライブラリ
- 必要なバイナリを含む NuGet パッケージ
Package.appxmanifestを生成します- アプリ ID と MSIX パッケージ化に必要なアプリ マニフェストAssets/フォルダーを作成する - アプリのアイコンとビジュアルアセットが含まれますCreates
winapp.yaml- SDK のバージョンとproject構成を追跡しますWindows アプリ SDK ランタイムのインストール - 最新の API に必要なランタイム コンポーネント
Windows - アプリケーションのデバッグに必要JS バインディングを生成する - オプトインすると、次のようになります。
-
package.jsonにwinapp.jsBindingsブロックを書き込みます。 -
@microsoft/dynwinrt-codegenにdevDependenciesを追加します。バインドを生成するビルド時ツール (初回実行時にレジストリのlatestバージョンにピン留めされ、その後は単独で) -
@microsoft/dynwinrtにdependenciesを追加します。生成されたバインディングが実行時にインポートするランタイム (ABI の互換性を保証するために、インストールされている codegen によってバージョンが選択されます) - WINDOWS APP SDK API の JS バインドを生成します。
.winapp/bindings/
-
注
.winapp/ フォルダーは自動的に.gitignoreに追加されるため、ソースにチェックインしないでください。
Package.appxmanifestを開いて、表示名、発行元、機能などのプロパティをさらにカスタマイズできます。
Tip
Windows SDK について:
Windows SDK - Win32/デスクトップ アプリをビルドできる開発プラットフォーム。 設計の中心になっている Windows API は、特定のバージョンの OS と連動しています。 これを使用して、ファイル システム、ネットワーク、システム サービスなどの主要な Win32 API にアクセスします。
Windows アプリ SDK - Windows バージョン間でインストールできる最新のデスクトップ アプリを構築できる新しい開発プラットフォーム (最大Windows 10 1809)。 これは、Windows OS API の豊富なカタログに関して、OS から分離された便利な抽象化を提供します。 Windows アプリ SDKには WinUI 3 が含まれており、WINDOWS OS リリースとは無関係に定期的な更新プログラムを受け取る、AI 機能 (Phi Silica)、通知、ウィンドウ管理などの最新の機能にアクセスできます。
手順 4: ビルド パイプラインに復元を追加する
他の開発者がプロジェクトを複製するとき、または CI/CD パイプラインでWindows SDK を使用できるようにするには、postinstall スクリプトを package.json に追加します。
{
"scripts": {
"postinstall": "winapp restore && winapp node add-electron-debug-identity"
}
}
このスクリプトは、 npm install 後に自動的に実行され、次の 2 つの処理を実行します。
-
winapp restore- Windows SDK パッケージをすべて.winapp/フォルダーにダウンロードして復元します -
winapp node add-electron-debug-identity- Electron アプリをデバッグ ID に登録します (詳細については、次の手順で説明します)。
Important
Electron 42 以降: Electron 42 以降では、バイナリは npm install 中に自動的にダウンロードされなくなります (リリース ノート)。
add-electron-debug-identity実行する前に、明示的にダウンロードする必要があります。
{
"scripts": {
"postinstall": "npx --no-install install-electron && winapp restore && winapp node add-electron-debug-identity"
}
}
--no-install フラグを使用すると、npxは、インストールされている Electron パッケージによって出荷されたinstall-electron ビンのみを実行し、レジストリから何もサイレント ダウンロードしないようにします。 Electron < 42 にピン留めする場合は、この手順を省略します。バイナリは npm install後に既に配置されています。
次に、npm install を実行して、ポストインストール スクリプトをトリガーし、Windows環境を構成します。
npm install
注
postinstall スクリプトは、npm installごとに自動的に実行されます。 つまり、誰かがプロジェクトを複製して npm install を実行するたびに、Windows環境が自動的に構成されます。
💡 クロスプラットフォーム開発 (クリックして展開)
クロスプラットフォームの Electron アプリを構築していて、開発者が macOS または Linux で作業している場合は、Windows固有のセットアップを条件付きで実行する必要があります。 推奨される方法を次に示します。
scripts/postinstall.jsを作成します。
if (process.platform === 'win32') {
const { execSync } = require('child_process');
const fs = require('fs');
const path = require('path');
// Electron 42+ ships an `install-electron` bin and skips the postinstall download.
// Run it only when present, and use `--no-install` so npx never silently fetches
// anything from the registry.
const installElectronBin = path.join(
'node_modules', '.bin',
process.platform === 'win32' ? 'install-electron.cmd' : 'install-electron'
);
const steps = [];
if (fs.existsSync(installElectronBin)) {
steps.push('npx --no-install install-electron');
}
steps.push(
'npx winapp restore',
'npx winapp cert generate --if-exists skip',
'npx winapp node add-electron-debug-identity'
);
try {
execSync(steps.join(' && '), { stdio: 'inherit' });
} catch (error) {
console.warn('Warning: Windows-specific setup failed. If you are not developing Windows features, you can ignore this.');
}
} else {
console.log('Skipping Windows-specific setup on non-Windows platform.');
}
次に、 package.jsonを更新します。
{
"scripts": {
"postinstall": "node scripts/postinstall.js"
}
}
これにより、Windows固有のセットアップがWindowsコンピューターでのみ実行され、他のプラットフォームの開発者はエラーなしでプロジェクトで作業できるようになります。
手順 5: デバッグ ID について
手順 4 で実行した npm install によって、 postinstall スクリプトがトリガーされ、 winapp node add-electron-debug-identityが実行されました。 これにより、アプリに一時的なデバッグ ID が提供されるため、開発中にアプリ ID を必要とする API Windowsテストできます。
デバッグ ID は何をしますか?
このコマンド:
-
Package.appxmanifestを読み取り、アプリの詳細と機能を取得します -
electron.exe内でnode_modulesを一時的な ID で登録します - 完全な MSIX パッケージを作成せずに、ID が必要な API をテストできます
デバッグ ID は、手順 4 で npm install を実行したときに自動的に適用されました。 今後、誰かが npm install実行するたびに再適用されます。
デバッグ ID を手動で更新するタイミング
Package.appxmanifest (機能、ID、プロパティの変更) またはリンクされた資産 (アイコン、mcp.jsonなど) を変更するたびに、このコマンドを手動で実行する必要があります。
npx winapp node add-electron-debug-identity
セットアップのテスト
デバッグ ID を適用して Electron アプリをテストできるようになりました。
npm start
デスクトップ アプリケーション ウィンドウ (ブラウザー タブではなく) が開いていることがわかります。これは、Electron アプリの実行方法です。
⚠️ 既知の問題: アプリのクラッシュまたは空のウィンドウ (クリックして展開)
電子アプリケーションのパッケージ化が疎である既知のWindowsバグがあり、アプリが起動時にクラッシュしたり、Web コンテンツをレンダリングしたりすることはありません。 この問題はWindowsで修正されましたが、まだすべてのデバイスに反映されていません。
症状:
- 起動直後にアプリがクラッシュする
- ウィンドウが開きますが、空白または白の画面が表示されます
- Web コンテンツのレンダリングに失敗する
対処法:
--no-sandboxの開始スクリプトにpackage.json フラグを追加します。 これは、開発目的で安全な Chromium のサンドボックスを無効にすることで、この問題を回避します。
{
"scripts": {
"start": "electron-forge start -- --no-sandbox"
}
}
大事な: この問題は、完全な MSIX パッケージ化 には影響しません 。開発中は ID のみをデバッグします。
デバッグ ID を元に戻すには (トラブルシューティングに必要な場合):
npx winapp node clear-electron-debug-identity
これにより、デバッグ ID なしで元の Electron 実行可能ファイルが復元されます。
次のステップ
開発環境が設定されたので、ネイティブ コードが必要なときに、JavaScript から Windows API を呼び出すか、ネイティブ アドオンを作成する準備ができました。
-
JavaScript から Windows API を呼び出す - JS バインディングを使用して Windows アプリ SDK API を呼び出し、それを介して Windows SDK API で拡張する
winapp.jsBindings - JavaScript からの通知の表示 - JS バインドを使用してネイティブ アドオンなしでWindows アプリ SDK通知を表示する
- JavaScript から Phi Silica を呼び出す - JS バインドを使用してローカル言語モデルでテキストを集計する
-
JavaScript からの WinML の実行 - ONNX 推論の
onnxruntime-nodeで JS バインドを使用する - Phi Silica アドオンの作成 - Phi Silica AI API を呼び出す C# アドオンを作成する方法について説明します
- WinML アドオンの作成 - Windows Machine Learningを使用する C# アドオンを作成する方法について説明します
- 配布用パッケージ - 配布用 の MSIX パッケージを作成する
または、 概要に戻ります。
Windows developer