今回は「Electron で作るデスクトップアプリケーション」についてまとめます。 作るものも単純なHTMLを表示するだけの何もできないスケルトンプログラムです。
概要
Electronとは
GitHubが開発したオープンソースのデスクトップアプリケーション開発フレームワークです。 このフレームワークを利用すると、JavaScript(Node.js)を使ってクロスプラットフォームなデスクトップアプリケーション開発ができます。
作成される実行ファイルは「Chromium」と「Node.js」で動いており、「画面描画エンジン(レンダー)」と「処理エンジンメインプロセス」の2つが通信しながら動くようなものになっています。
内部的には「画面描画エンジン(レンダー)」は ipcRender
、「処理エンジンメインプロセス」は ipcMain
というオブジェクトで表現されます。
作成するファイル一覧
Electronを使ったデスクトップアプリケーションを作成する際、雛型となるような最低限作成するフォルダ/ファイルは以下の通りです。 骨組みとして作成するファイルは5つだけになります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | <ROOT> │ package.json プロジェクト定義ファイル │ ├─.vscode │ launch.json Visual Studio Code のデバッグ設定ファイル │ ├─dist │ (ビルド成果物が生成されるフォルダ) │ ├─node_modules │ (Node.jsのモジュールフォルダ) │ └─src index.html 画面表示するHTMLファイル main.js Electronのメイン実装ファイル package.json Electronのパッケージファイル |
プロジェクト準備
初期設定
プロジェクト開始時、まずは以下のコマンドを実行して package.json
の雛型を作ります。
1 | npm init |
続けて必要なパッケージelectron
と electron-builder
を開発用モジュールとして追加します。
1 | npm install electron electron-builder --save-dev |
ここまでで package.json
の骨組みはほぼできているので、残る「ビルド用の設定(ハイライト箇所)」を追記していきます。
/package.json
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | { "name" : "sample_electron_progress" , "version" : "1.0.0" , "description" : "Sample electron program." , "main" : "index.js" , "keywords" : [], "author" : "" , "license" : "MIT" , "scripts" : { "build" : "electron-builder" }, "build" : { "appId" : "udemy.instructor.tool" , "directories" : { "app" : "./src" }, "win" : { "target" : { "target" : "dir" , "arch" : [ "x64" ] } }, "mac" : { "target" : "dmg" } }, "devDependencies" : { "electron" : "^9.1.1" , "electron-builder" : "^22.7.0" } } |
追記したのは scripts.build
と build
の2か所です。
どちらも後で出てくるビルド用の設定になります。
build プロパティに指定できる設定は electron-builder のオプション設定になります。 基本的なものだけ設定していますが、詳細を知りたいようであれば公式のリファレンスを参照してみてください。
実装
公式ドキュメントだとルートディレクトリにファイル作成していますが…
実際はそんなところにファイル配置するとファイル増えた際にゴチャついて収集つかなくなるので、 src
ディレクトリ配下へまとめてしまいます。
ただ、そうするとそれで package.json
を作る必要が出てくるので、以下で順に確認していきましょう。
/src/package.json
1 2 3 4 5 6 7 8 9 10 | { "name" : "sample_electron_progress" , "version" : "1.0.0" , "description" : "Sample electron program." , "main" : "main.js" , "keywords" : [], "author" : "" , "license" : "MIT" , "dependencies" : {} } |
この package.json
中の dependencies
に指定されるモジュールはビルドしたとき一緒にコンパイルされるものになります。
ここに指定が漏れているとビルドした成果物がうまく動作しないので、モジュール追加し忘れしないように注意します。
/src/main.js
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | const { app, BrowserWindow } = require( "electron" ); var initialize = function () { var win = new BrowserWindow({ width: 1024, height: 768, webPreferences: { nodeIntegration: true } }); win.loadFile( "./index.html" ); }; app.whenReady().then(initialize); |
基本は上述の通り実装…なんですが、 BrowserWindow
生成時に指定しているオプションで webPreferences.nodeIntegration
だけ注意です。
このプロパティは HTML側(レンダー側)から呼び出す JavaScript 中で Node.js のモジュールを利用したいかどうかの設定になります。
利用したいのであれば true
を設定しておきましょう。
/src/index.html
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | <!DOCTYPE html> < html > < head > < meta charset = "utf-8" > < title >Electron</ title > < link rel = "stylesheet" href = "https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css" > </ head > < body > < div class = "container" > < h1 >Sample Page</ h1 > </ div > < script type = "text/javascript" src = "https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js" ></ script > </ body > </ html > |
今回は単純なHTMLだけにしていますが、必要に応じてJavaScriptやCSSを追加していきます。
JavaScriptだと React や jQuery なども追加できます。
加えて nodeIntegration
を有効にしていると Node.js のモジュールも利用できるようになります。
デバッグ
Visual Studio Code でデバッグしようとすると /.vscode/launch.json の設定が必要になります。 しかも単純なものではデバッグ実行ができないので、デフォルト作成されたものに加工が必要です。
/.vscode/launch.json
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | { "version" : "0.2.0" , "configurations" : [ { "name" : "Electron Main" , "type" : "node" , "request" : "launch" , "cwd" : "${workspaceFolder}" , "program" : "${workspaceFolder}/src/main.js" , "env" : { "NODE_ENV" : "development" }, "runtimeExecutable" : "${workspaceFolder}/node_modules/.bin/electron" , "windows" : { "runtimeExecutable" : "${workspaceFolder}/node_modules/.bin/electron.cmd" , }, "args" : [ "." ], "outputCapture" : "std" } ] } |
type
は通常の Node.js アプリケーションの扱いにするので node
のままでOKです。
program
はエントリーポイントとなるJavaScriptが一階層ズレているので忘れずに修正します。
runtimeExecuttable
は 通常のファイルと windows 向けのコマンドと2つ設定しておきます。
また、引数となる args には "."
を競ってします。
outputCapture
は標準出力をキャプチャするので std
を指定しておきます。
これだけ設定できていればあとはF5を押下してデバッグ実行するだけです。 ただ…メインプロセス側はVisualStudioCodeでデバッグできますが、レンダー側は開発者ツールでデバッグになるみたいです。
ビルド
すでに最初の package.json 作成時に追記済みなので、以下のコマンドでビルドを行うことができます。
1 | npm run build |
うまく作成できれば以下のフォルダ配下にファイル群ができているはずです。
/dist/win-unpacked
起動したときのアプリケーションは以下のようなものになります。
今回は「Electron で作るデスクトップアプリケーション」についてまとめました。 参考になったでしょうか? 本記事がお役に立っていると嬉しいです!!
最後に… このブログに興味を持っていただけた方は、 ぜひ 「Facebookページ に いいね!」または 「Twitter の フォロー」 お願いします!!