コラム:ElectronとNW.js

目次

説明

ここでは、『Electron』と『NW.js』について少し触れます。

『Node.js』は、ウィンドウやボタンなどの『GUI』(Graphical User Interface)を持たない実行環境です。

この『node.js』に、HTMLのレンダリングエンジン『WebKit』を合成した実行環境がいくつか存在します。そうした実行環境を使えば、HTMLでユーザーインターフェースを作りながら、『Node.js』のファイル操作などの機能を利用して、アプリケーションを作成できます。

そうした実行環境に『Electron』と『NW.js』があります。ここでは、この2つについて紹介します。実際のプログラミングについては、専用の入門サイトや解説サイトなどをご覧下さい。

『Electron』と『NW.js』の違い

『Electron』と『NW.js』では、『NW.js』の方が歴史が古いです。『Electron』は、『NW.js』の不満を解決するために作られました。しかし、どちらに優劣があるわけではありません。2つの実行環境には、利点と欠点があります。それでは、この2つの違いをまずは紹介します。

相違点 Electron NW.js
エントリーポイント index.js
(JavaScriptファイル)
index.html
(HTMLファイル)
index.htmlを
開く手順
起動後index.jsを実行(メインプロセス)。
メインプロセスからWebKitを利用して
index.htmlを開く(レンダリングプロセス)。
起動後すぐにWebKitでindex.htmlを開く。
特性 1から堅牢なアプリを
開発するのに向いている。
1枚ペラの、Webアプリを
EXE化するのに向いている。

『エントリーポイント』というのは、開始するファイルです。

『Electron』は、『Node.js』のプログラムのように『index.js』(JavaScriptファイル)から開始します。その中からWebブラウザ部分を起動して、HTMLファイルを読み込みます。

『NW.js』、Webページと同じように『index.html』(HTMLファイル)から開始します。

どちらの場合も、HTMLファイルから『Node.js』の機能を利用できます。

『Electron』は大規模で堅牢なアプリケーションを作るのに向いており、『NW.js』は使い捨てのアプリケーションをサクッと作るのに向いています。

『Electron』

『Electron』の公式サイトとドキュメントは以下になります。

インストールは、『nodist』でインストールした『npm』(node package manager)を利用して、コマンド プロンプトから以下のコマンドでできます。『-g』はグローバルを意味して、個別のアプリケーションではなく、『Node.js』全体の機能としてインストールするフラグです。

npm install electron -g --loglevel verbose

『--loglevel verbose』はログを詳細に表示するモードです。このフラグを付ける必要はないですが、ダウンロード時間が長く、処理が止まっているように見えるので、付けておいた方が進行が分かってよいです。

インストール後に、コマンド プロンプトで以下のコマンドを実行してください。『Electron』のウィンドウが起動します。これは確認のための実行です。これ自体では何もできません。別途プログラムを書く必要があります。

electron

それでは、プログラムを書いてみましょう。『Node.js』では、アプリケーションのあるディレクトリで、コマンド プロンプトから『node .』と入力してアプリケーションを実行しました。『Electron』では、『electron .』として実行します。

以下、簡単なサンプルです。配布可能なアプリケーションにするまでには、もっと様々な設定を追加しなければなりません。より詳しい情報は、ネットで『Electron 入門』などのキーワードで、検索エンジンで検索してください。

【ファイル構成】

●electron_test
┣●js-lib
┃┗○jquery-3.2.1.min.js
┣●js-my
┃┗○app.main.js
┣○index.html
┣○main.js
┣○package.json
┗○run.bat

【run.bat】

electron .

【package.json】

{
  "name": "electron_test",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [],
  "author": "",
  "license": "ISC"
}

【index.js】

'use strict';

// モジュールの読み込み
const electron       = require('electron');
const app            = electron.app;    // App
const BrowserWindow  = electron.BrowserWindow;  // ブラウザウィンドウ

// デバッグ表示
console.log('This is a Main Process');

// 変数の初期化
var mainWin  = null;
var urlIndex = `file://${__dirname}/index.html`;

// 全ウィンドウ終了時の処理
app.on('window-all-closed', () => {app.quit()});

// 準備が整った際の処理
app.on('ready', () => {
    // ブラウザの起動
    mainWin = new BrowserWindow({width: 1200, height: 800});
    mainWin.loadURL(urlIndex);  // index.htmlを開く
});

『Electron』では『electron』モジュールを利用して、様々なGUI機能を使えます。

『Electron』では、メインプロセスとレンダープロセスという2つのプロセスがあります。最初に起動するのはメインプロセスで、そこから『BrowserWindow』を利用してレンダープロセスを起動して、HTMLファイルを読み込みます。

【index.html】

<!DOCTYPE html>
<html lang="ja">
  <head>
    <meta charset="utf-8" />
    <title></title>

    <!-- /* jQuery, other... */ -->
    <script>
        window.jQuery = window.$ = require('./js-lib/jquery-3.2.1.min.js');
    </script>

    <!-- /* main */ -->
    <script src="js-my/app.main.js"></script>
  </head>
  <body>
    <div id="appTtl">Hello World</div>
    <div id="appBdy"></div>
  </body>
</html>

『Electron』では、『<script>』を利用して『jQuery』を読み込むことができません。『require』を利用して『jQuery』を読み込む必要があります。

【js-my/app.main.js】

'use strict';

// DOM準備完了後の処理
$(function() {
    var msg = 'This is a Renderer Process';
    console.log(msg);
    $('#appBdy').text(msg);
});

『NW.js』

『NW.js』の公式サイトやドキュメント、ダウンロードページは以下になります。

それでは、『NW.js』の開発環境を作ります。公式サイトからWindows用(使用しているOS用)の環境を入手します。ZIPファイルをダウンロードして解凍してください。

ダウンロード可能なファイルには『NORMAL』と『SDK』の2種類があります。『NORMAL』は、配布ファイルを作る際のものです。こちらでは開発者ツールが表示されません。『SDK』は、開発用のファイルです。こちらでは、F12(Windowsの場合)で、開発者ツールを開けます。

そのため、開発時あるいは自分だけ使うツールの場合は『SDK』を使い、配布時は『NORMAL』を使うのがよいでしょう。Windows 32-bit向けにも配布したい場合は、Windows 32-bit版を選んでおくと、32bitでも64bitでも動きます。

環境変数

『NW.js』を実行する際は、環境変数に『nw.exe』のパスを登録しておいた方がよいです。

『NW.js』を解凍したフォルダ内の『nw.exe』のパスを、Windowsの環境変数に登録しておくとよいです。『SDK』を解凍したフォルダの『nw.exe』を環境変数『nNW_PATH』、『nNORMAL』を解凍したフォルダの『nw.exe』を環境変数『NW_PATH_RELEASE』と登録しておくとよいでしょう。

環境変数のパスの登録については、以下の手順で行えます。

  1. Windowsボタンを右クリック。[システム]を選択。
  2. 左枠の[システム詳細設定]をクリック。
  3. [環境変数]ボタンをクリック。
  4. [ユーザー環境変数]あるいは[システム環境変数]から、以下の操作をする(実行できるユーザーの範囲を区切るなら[ユーザー環境変数]を選ぶ)。
  5. [新規]ボタンをクリックして、[変数名]「NW_PATH」、[変数値]「nw.exeのパス」として登録する。

※「nw.exeのパス」は実際は「C:\node-webkit\nwjs-sdk-v0.24.4-win-ia32\nw.exe」のようなパス。

『NW.js』の実行

『NW.js』では、解凍したファイル内の『nw.exe』の引数に、実行したいディレクトリを指定して、末尾に『.』と付けて実行します。アプリケーションの引数は、その後に続けます。以下、例です。

C:\node-webkit\nwjs-sdk-v0.24.4-win-ia32\nw.exe "D:\nwjs_test\." "argument"

また、作成したアプリケーションのディレクトリにバッチファイルを作成しておくのも、1つの手です。バッチファイルの例は、下記サンプルで示します。

以下、簡単なサンプルです。配布可能なアプリケーションにするまでには、もっと様々な設定を追加しなければなりません。より詳しい情報は、ネットで『NW.js 入門』などのキーワードで、検索エンジンで検索してください。

【ファイル構成】

●nwjs_test
┣●js-lib
┃┗○jquery-3.2.1.min.js
┣●js-my
┃┗○app.main.js
┣○index.html
┣○package.json
┗○run.bat

【run.bat】

:: バッチファイルのディレクトリを取得
set THIS_DIR=%~dp0

:: アプリのパスを作成
set APP_PTH="%THIS_DIR%."

:: 開始
start "" "%NW_PATH%" %APP_PTH% %*

【package.json】

{
  "name": "nwjs_test",
  "version": "1.0.0",
  "description": "",
  "main": "index.html",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [],
  "author": "",
  "license": "ISC"
}

【index.html】

<!DOCTYPE html>
<html lang="ja">
  <head>
    <meta charset="utf-8" />
    <title></title>
    <script src="./js-lib/jquery-3.2.1.min.js"></script>
    <script src="js-my/app.main.js"></script>
  </head>
  <body>
    <div id="appTtl">Hello World</div>
    <div id="appBdy"></div>
  </body>
</html>

『NW.js』は『Electron』と違い、『<script>』を利用して『jQuery』を読み込むことができます。

【js-my/app.main.js】

'use strict';

// DOM準備完了後の処理
$(function() {
    var msg = 'Insert Message.';
    console.log(msg);
    $('#appBdy').text(msg);
});

サンプルの入手

以下は、今回出てきたサンプルです。

ZIPでまとめてダウンロード (右クリックから保存してください)