LoginSignup
1
4

More than 1 year has passed since last update.

Electron+ReactでHello world

Last updated at Posted at 2021-10-07

ElectronのUIをReactで作ってみます。
次のステップで作っていきます。

  1. Reactアプリをcreate-react-appで作る。
  2. 作ったReactアプリをElectronで読み込み表示する。

ググるとlocalhost:3000で起動したReactアプリを読み込む例が多いですが、ここではビルドしたものを読み込むことにします。

※環境: Windows 10 Home, Node.js v14.17.4, Electron v15.1.1

Reactアプリを作る

まずはcreate-react-appでReactアプリを作ります。
アプリ名は適当にerhelloとしますが何でもOKです。

> npx create-react-app erhello

一応Hello worldですのでApp.jsでHello, world!と表示するように変更しますが、そのままでもかまいません。

App.js
import logo from './logo.svg';
import './App.css';

function App() {
  return (
    <div className="App">
      <header className="App-header">
        <img src={logo} className="App-logo" alt="logo" />
        <p>
          Hello, world! 
        </p>
      </header>
    </div>
  );
}

export default App;

ReactアプリをElectron上で表示する

Electronを追加インストールします。

> cd erhello
> npm i -D electron

続いて、package.jsonを編集します。
いつも通りエントリーポイントのファイル名を変更します。
加えて、Reactのアウトプットが相対パスで動作するようにhomepageも指定します。

package.json
  ...
  "main" : "main.js",
  "homepage" : "./",
  ...

main.jsは前回のElectron単独のHello,worldで作ったものを使い回します。
今回の変更点は、読み込むindex.htmlのパスをReactのビルド先に合わせることだけです。

main.js
const { app, BrowserWindow } = require('electron');

function createWindow () {
  // ウインドウ作成
  const mainWindow = new BrowserWindow({
    width: 800,
    height: 600,
  });

  // index.htmlの内容でウィンドウ表示
  mainWindow.loadFile('./build/index.html'); // パス変更
}

// Electronの初期化完了時に呼ばれる
app.whenReady().then(() => {
  createWindow();

  // Mac用処理
  app.on('activate', function () {
    if (BrowserWindow.getAllWindows().length === 0) createWindow();
  })
});

// (Mac以外は)ウインドウが全部閉じられたら終了
app.on('window-all-closed', function () {
  if (process.platform !== 'darwin') app.quit();
});

ビルドを実行し、Electronアプリを起動してみます。

> npm run build
> npx electron .

次のようにHello world画面が表示されれば成功です。

electronreact.png

次回は、Electronのメインプロセスとの通信を試してみたいと思います。

1
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
4