Electron × Angular ハンズオン! Web の技術でデスクトップアプリをつくろう!

だいぶ古いネタで恐縮ですが、今日は Electron のお話をします。 かれこれ 3 年ぶりくらいの Electron。

Electron とは

Electron は、Web の技術と単一のコードベースで Windows, macOS, Linux 向けのデスクトップアプリケーションを開発できるフレームワークです。

Electron の良いところとしては、HTML5JavaScript を知っている人ならば割と気軽に手を出せること*1、そこそこ見栄えのよいアプリが比較的容易に作れることなどが挙げられます。

何と言っても、豊富な視覚化ライブラリの恩恵を享けられる点は嬉しいです。

f:id:tercel_s:20191201113934p:plainf:id:tercel_s:20191201114001j:plainf:id:tercel_s:20191201114037p:plain
さまざまな情報視覚化ライブラリ

しかし残念なことに日本語圏ではあまり人気がないのか、Wikipedia にはロクなことが書かれておらず*2、日本語で読める技術書も数えるほどしか出回っていません(Qiita とかではたくさん言及されているのですが……)。

さらに、モバイル向けのアプリ開発ができないこと、セキュリティ面で課題があること、Electron 製のアプリは実行時に RAM を多く消費すること、一般的なデスクトップアプリケーション用のフレームワークと比較するとアーキテクチャの機能配置が冗長であること*3など、ちょっとネガティブなポイントもあったりします。

ひところは Electron でアプリを作ろうとすると、まず環境構築とプロジェクトの作成が初学者最大の障壁でした。 また、Electron 単体ではフロントエンド周りが貧弱になるので、何らかのライブラリと組み合わせる必要があり、その選択も開発者にとって悩みのタネでした。

ですが、いま現在は Electron と Angular がセットになった angular-electron というボイラープレートが公開されており、随分ととっつきやすくなった感があります。

そんなわけで、今日は良くも悪くもクセのある Electron を、Angular と一緒に使ってみましょう。

ハンズオン

angular-electron の導入から初歩的な使い方までを、4本の短い動画にまとめました。

だいたい 1 本あたり 3~4 分程度で、解説というよりは Electron の雰囲気をお伝えすることを目的としておりますので、途中で実況が雑になることがございます。気にせず適当に受け流してください。

第1話 Hello, World篇

何はともあれ環境構築です。 Node.js さえ導入すれば、GitHub からリポジトリをクローンして、npm コマンドを一発叩けばあっという間にアプリの雛形ができます。


第2話 UI (Photon) 篇

Electron では、画面を HTML5 で作ります。 Photon という CSS ライブラリを導入して、UI の外観をネイティブアプリっぽくしてみましょう。


第3話 メニュー構築篇

ここで初めて HTML5 の知識だけでなく、Electron の API を利用することになります。 動画の最後では、カスタマイズしたアプリケーションメニューが表示されるようになります。


第4話 ファイル読み込み篇

Electron では、ファイルの読み書きなど OS に作用する低レベル API を利用できます。

動画中では(尺の関係で)詳しくは触れませんでしたが、ファイルの読み込みはメインプロセス、表示はレンダラープロセスという2つの異なるプロセスで処理を行い、お互いの情報はプロセス間通信でやり取りするように実装しています。

まとめ

こんな感じで、駆け足で Electron に触ってみました。 Firebase との連携や、CDK を用いた動きのある画面構成の話などもしたかったのですが、そろそろ実況形式では伝えきれなくなってきたので、それはまたの機会に。

ではでは。

おまけ

*1:かつては環境の構築やプロジェクトの作成に多大な労力を要したが、現在は優秀なボイラープレートのおかげですぐにコードを書き始められる。

*2:2019年12月1日現在、ただ一言「Web 技術で Windows, macOS, Linux に対応したアプリが作れる」とだけ書かれていた。

*3:低レベル API を取り回すレイヤーとビューでメモリを共有できず、両者の情報のやり取りにプロセス間通信が必須であること。

Copyright (c) 2012 @tercel_s, @iTercel, @pi_cro_s.