概要:

この記事では、Windows10 Home のWSL2(Windows Subsystem for Linux 2)を使用して、Ubuntu環境上でElectronアプリケーションを構築する方法について説明します。Electronは、Web技術(HTML、CSS、JavaScript)を使用してクロスプラットフォームなデスクトップアプリケーションを構築するためのフレームワークであり、WSL2を使用することでWindows環境でも開発を行うことができます。

環境:

WSL2はWindows 10 バージョン 1903 以降、ビルド 18362 以上が必要なので初めに確認してください。
また、ARM64 システムの場合は、バージョン 2004 以降、ビルド 19041 以上とのことです。
スタートボタン右クリックで「システム(Y)」を選択し「Windows の仕様」で確認できます。

手順:

1. WSL2のセットアップ

Windows10 Home の場合Hyper-Vを有効にする

まずは以下のサイトを参考にしてHyper-Vを有効にしてください。
Windows 10や11のHomeエディションでHyper-Vを利用する方法

Windows 10の設定からWSL2を有効にする

Windowsのスタートボタンを右クリック → アプリと機能(F) → プログラムと機能 → Windows の機能の有効化または無効化

上記の様にチェックを入れる。

何かしらが構築された後、再起動を促されるので従いましょう!

WSL2用のLinuxカーネルをインストール

以下にある「x64 マシン用 WSL2 Linux カーネル更新プログラム パッケージ」をダウンロードして、インストールします。
Linux カーネル更新プログラム パッケージをダウンロードする

WSLのバージョンを2に変更する

初期状態ではWSL1になっているので、WSL2に切り替えます。

wsl --set-default-version 2

コマンドプロンプトで上記を入力すると以下の様にwslのバージョンを2に変更できます。

C:\Users\test>wsl --set-default-version 2
WSL 2 との主な違いについては、https://aka.ms/wsl2 を参照してください
この操作を正しく終了しました。

2. Microsoft StoreからUbuntuをインストール

Microsoft Store アプリを開き「ubuntu」を検索します。
「入手」して「インストール」を完了してください。

Ubuntuを起動して初期設定を完了する。

「開く」で出てきたターミナルにusernameとpasswordを入力すると完了です。

Windows Terminal をインストールして作業しやすくする

Microsoft Store アプリを開き「Windows Terminal」を検索します。

以下の様に「Ubuntu」を選択することで、PowerShellをタブで切り替えて作業できて非常に便利です。

3. 各種インストール

Ubuntuのパッケージを更新する

sudo apt update
sudo apt upgrade

nvmのインストール

Electronアプリケーションの開発にはNode.jsとnpmが必要です。
Ubuntu上でこれらをインストールしますが、先にノードバージョンマネージャー(nvm)をインストールします。

コチラでバージョンを確認して以下の様にUbuntu上でインストールしてください。

curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash

nvmのインストール検証

以下のコマンドを打って「何も表示されない」か、「command not found」と表示された場合は、一度ターミナルのタブを閉じて、開きなおしてから再度以下のコマンドを打ってください。
「nvm」と表示されたら正解です。

command -v nvm

Node.jsとnpmのインストール

以下のコマンドで、現状インストールされているnodeのバージョンを一覧表示します。
「N/A」とでたら該当なしです。

nvm ls

次のコマンドでnodeをインストールします。「–lts」は安定バージョン。

nvm install --lts

npmも同時にインストールされます。

# Node.js のバージョン確認
$ node -v
v20.11.1

# npm のバージョン確認
$ npm -v
10.2.4

4. Electronアプリケーションのセットアップ:

プロジェクトディレクトリを作成

構築する場所を確保します。

# home以下に移動
$ cd ~

# 現在の場所を表示
$ pwd
/home/test

プロジェクトのディレクトリを作成し、npmを使用してElectronをインストールします。

# ディレクトリを作成して中に移動
$ mkdir my-project
$ cd my-project

「npm init -y」を打つ。「-y」は「package.json」の内容を、一つずつ聞かれないようにするやつ。
実行すると以下の様に「package.json」が作成された。

$ npm init -y
Wrote to /home/test/my-project/package.json:
{
  "name": "my-project",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [],
  "author": "",
  "license": "ISC"
}

以下のコマンドで「electron」をインストールします。

$ npm install --save-dev electron --platform=win32

electronを実行するとgpu関連のエラーが多発するので、おまじない入れます。
package.jsonのscriptsにコードを追加して以下の様に変更します。

{
  "name": "my-project",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "start": "DISPLAY=\"${DISPLAY:=:0}\" ./node_modules/.bin/electron --disable-gpu ./index.js --platform=win32",
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [],
  "author": "",
  "license": "ISC"
}

5. サンプルの実行

簡単なサンプルを作ります。

index.html
<!DOCTYPE html>
<html lang="ja">
  <head>
    <meta charset="UTF-8">
    <title>Hello Sample!!</title>
  </head>
  <body>
    <h1>Hello Sample!!</h1>
  </body>
</html>
index.js
const { app, BrowserWindow } = require('electron');

app.disableHardwareAcceleration();
app.commandLine.appendSwitch('disable-gpu-sandbox');
app.commandLine.appendSwitch('ignore-gpu-blacklist');
app.commandLine.appendSwitch('no-sandbox');

app.on('ready', () => {
  const browserWindow = new BrowserWindow({
    width: 1000,
    height: 800
  });
  browserWindow.loadFile('index.html');
});

色の違う箇所はgpu関連のエラーを回避するコードです。
エラーの内容によっては、4行全ては必要ない可能性もあるので、1行ずつ試してみてください。
また、これはWindows環境でのみ出るエラーぽいので、Linux等で作業する場合は逆にエラーになってしまうようなので工夫してください。

ちなみに4行とも入れないと、自分の環境では以下が表示されてWindowが落ちました..

[3936:0309/011214.212:ERROR:gpu_process_host.cc(983)] GPU process launch failed: error_code=18
[3936:0309/011214.355:ERROR:gpu_process_host.cc(983)] GPU process launch failed: error_code=18
[3936:0309/011214.420:ERROR:gpu_process_host.cc(983)] GPU process launch failed: error_code=18
[3936:0309/011214.428:ERROR:gpu_process_host.cc(983)] GPU process launch failed: error_code=18
[3936:0309/011214.443:ERROR:gpu_process_host.cc(983)] GPU process launch failed: error_code=18
[3936:0309/011214.451:ERROR:gpu_process_host.cc(983)] GPU process launch failed: error_code=18
[3936:0309/011214.451:FATAL:gpu_data_manager_impl_private.cc(448)] GPU process isn't usable. Goodbye.

Electronを実行する

以下のコードで実行します。

npm run start

以下のように表示されれば完了です。

エラーが出てしまう場合は、内容を検索して必用なモジュールをインストールしたり、ソースコードの修正を加えたりして回避してください。(私はgpu関連のエラーで数日無駄にしました..)

6. VS Codeに読み込む

Visual Studio CodeなどのIDEを使用して、Ubuntu上でElectronアプリケーションを開発することができます。(ちなみにVS CodeもElectronで作られたソフトです。)
ソースの場所は以下になります。

\\wsl.localhost\Ubuntu\home\test\my-project

エクスプローラでも開くことができますが、リアルタイムで同期されていないようなので注意が必要です。

結論:

Windows 10のWSL2を使用することで、Ubuntu環境上でElectronアプリケーションを構築することが可能です。この方法を使えば、WindowsとLinuxの両方のメリットを活用しながら、効率的にデスクトップアプリケーションを開発することができます。