Electron (エレクトロン)とは、Webの技術でデスクトップアプリケーションを作成できるテクノロジーです。HTML5とCSS3、JavaScriptを使って開発し、WindowsとmacOSの両OSのアプリケーションを一つのコードから作ることができます。近年、注目度が高まっておりマイクロソフトやGitHubなど、有名企業も採用しています。
Electron製のアプリケーションはChromium(Chromeブラウザの元)とNode.jsがランタイムとなっています。Webコンテンツをそのままアプリケーションとして動かしたり、デスクトップアプリとしてブラウザだけで実現できない機能を組み込めるのが特徴です。
利用用途として、テキストエディターやユーティリティーソフト、デザインツールなどの小規模な使い方から、イントラネット内のクライアントツール、インスタレーションやサイネージの分野でも活用が考えられます。
本記事では、Electron (エレクトロン)の紹介と、Electronを使用してHTML+Node.jsでデスクトップアプリケーションを作るまでの手順を説明します。
※ 本記事は2018年3月現在最新のElectron v1.8を対象に解説しています
Electronの紹介と採用事例
Electronは、Windows、macOS、Linuxのデスクトップアプリケーションを作成するためのフレームワークです。Electronを使うことで、Webの技術であるHTML5やCSS3、JavaScriptで作ったコンテンツをデスクトップアプリケーションにすることができます。
採用事例には「Visual Studio Code (Microsoft)」などがあり、開発元のGitHub社では「Atom」の開発に使用しています。Web開発者にとって便利なアプリケーションの開発に採用が見られます。
▼ Visual Studio Code – Microsoft社が提供しているコードエディター
▼ Atom – GitHub社が提供しているコードエディター
弊社の事例としてLINEアニメスタンプが制作できる「アニメ画像に変換する君」を開発しました。Mac App StoreでElectronを公開した数少ない国内事例です。
▼アニメ画像に変換する君 – APNGやWebP画像形式に変換するツール
他にもどんなアプリが作成されているのか気になったときは「Electron Awesome」に情報がまとまっているので、確認されるとよいでしょう。
類似技術との比較から見えてくるElectronの利点
Electron以外にもさまざまなデスクトップアプリケーション用のフレームワークがあります。簡単な比較用の表を作成したのでご確認ください。
名前 | 対応プラットフォーム | 言語等 | ランタイム | 費用 |
---|---|---|---|---|
Electron | Windows / macOS / Linux | Node.js + HTML (※1) | 内蔵 (Chromium) | 無償 |
NW.js | Windows / macOS / Linux | Node.js + HTML (※1) | 内蔵 (Chromium) | 無償 |
PhoneGap (Cordova) | Windows 8 / iOS / Android | JavaScript + HTML | 不要 (OS提供のブラウザー) | 有償プラン有り |
Adobe AIR | Windows / macOS / iOS / Android | JavaScript + HTML (※2) / ActionScript | 内蔵可 (Adobe AIR) | 無償 |
Qt | Windows / macOS / Linux / iOS / Android | C++ / QML | 不要 | 有償プラン有り |
※1 ChromiumのBlinkエンジン ※2 Webkitエンジン
表にある通り、HTMLやJavaScriptでデスクトップアプリを開発できるフレームワークはいくつかあります。ElectronやNW.jsはChromiumをベースとしているため、ブラウザー依存を気にせずに最新のWeb技術を使用できます。Web技術者にとっては今まで作成してきた資産を再利用できるでしょう。
この表だとElectronとNW.jsは全く同じに見えますが、ElectronはJavaScriptファイルがエントリーポイントのためHTMLファイルを用意しなくても実行できる点でNW.jsとの違いがあります。詳しい違いについては「Technical differences to NW.js」にまとまっています。
それではデスクトップアプリケーションを実際に作りながら、開発手順を学んでいきましょう。
Electronでデスクトップアプリを作成しよう
Electronでデスクトップアプリケーションを作成していきましょう。予め準備しておく必要があるのは、macOSかWindowsのパソコンのみ。操作にはOSにもともとに入っているコマンドラインツールを使います。
手順は動画に撮影していますので、わからない箇所があれば動画を確認ください。わずか2分40秒の動画を見るだけで、今回の手順が理解できます。
また、今回のサンプルはGitHubにて公開しています。手順がわからなければダウンロードして参考にしてください。
1. Node.jsのインストール
Electronを開発するためには「Node Package Manager(npm)」が必要となるため、まずは「Node.js」をインストールしましょう。Node.jsをインストールすれば、npm
コマンドが使用可能となります。
▲Node.jsは公式サイトから無料でダウンロードできる。今回は「v9.7」を使って解説する。
2. Electronのインストール
コマンドライン(Windowsではコマンドプロンプト、macOSではターミナル.app)を立ち上げ、以下のコマンドを実行します。成功するとElectronをコンパイルできる環境が整います。
npm i -D electron
※Electronを-g
オプションを使ってグローバルにインストールするよう説明している解説記事もありますが、オススメできません。グローバルにインストールするとプロジェクト(案件)ごとに異なるElectronのバージョンが使えなかったり、開発者間でElectronのバージョンが異なるといったリスクが考えられます。環境構築はプロジェクトフォルダー単位で構築するのがいいでしょう。
3. アプリケーション実行用のファイルの用意
今回アプリケーションを作成するために、srcフォルダー内に3つファイルを用意しました。以下にて、それぞれどのようなファイルなのかを説明していきます。
▼ package.json
package.json
は必ず必要なファイルです。ここにはエントリーポイントとなるJavaScriptのファイル名を指定します。アプリケーション名とバージョンを指定すると、のちほど管理しやすくなります。
{ "main": "main.js" }
▼ main.js
main.js
はエントリーポイント(アプリケーションの実行開始場所)となるJavaScriptファイルです。ここからアプリケーションのウィンドウを開く実装を行っていきます。ElectronはECMAScript 2015の対応が進んでいるので、新しい記法を使ったJavaScriptで記載しています。積極的に新しい記法を使っていくといいでしょう。
// アプリケーション作成用のモジュールを読み込み const electron = require('electron'); const app = electron.app; const BrowserWindow = electron.BrowserWindow; const path = require('path'); const url = require('url'); // メインウィンドウ let mainWindow; function createWindow() { // メインウィンドウを作成します mainWindow = new BrowserWindow({width: 800, height: 600}); // メインウィンドウに表示するURLを指定します // (今回はmain.jsと同じディレクトリのindex.html) mainWindow.loadURL(url.format({ pathname: path.join(__dirname, 'index.html'), protocol: 'file:', slashes: true })); // デベロッパーツールの起動 mainWindow.webContents.openDevTools(); // メインウィンドウが閉じられたときの処理 mainWindow.on('closed', () => { mainWindow = null; }); } // 初期化が完了した時の処理 app.on('ready', createWindow); // 全てのウィンドウが閉じたときの処理 app.on('window-all-closed', () => { // macOSのとき以外はアプリケーションを終了させます if (process.platform !== 'darwin') { app.quit(); } }); // アプリケーションがアクティブになった時の処理(Macだと、Dockがクリックされた時) app.on('activate', () => { // メインウィンドウが消えている場合は再度メインウィンドウを作成する if (mainWindow === null) { createWindow(); } });
▼ index.html
今回メインウィンドウとして開くHTMLファイルです。main.js
の19行目でメインウィンドウとして指定しています。
<html> <head> <meta charset="UTF-8"> <title>Hello World!</title> </head> <body> <h1>初めてのElectron</h1> We are using node <script>document.write(process.versions.node)</script>, Chrome <script>document.write(process.versions.chrome)</script>, and Electron <script>document.write(process.versions.electron)</script>. </body> </html>
たくさんファイルを作ったのでややこしいのでフォルダーを再確認しておきましょう。package.jsonが2つ存在しますが、それぞれ役割が異なります。
4. アプリケーションの実行
上記のファイルが配置してあるフォルダー「FirstApp」にコマンドラインで移動しましょう(src
フォルダの上位のフォルダーです)。次にコマンドラインからelectron
コマンドを実行します。成功するとアプリケーションとしてHTMLが表示されます。
①フォルダを移動するコマンドを入力
cd プロジェクトフォルダへのパス(FirstApp)
②実行するコマンドを入力
npx electron ./src
次のページでは、ここまで作成したElectronを配布できるようにパッケージにします。また、Electronのデバッグ方法についても解説します。