Make Local Happiness

自分の幸せは自分で作る!!!

RaspberryPiでElectronアプリを自動起動する

Raspberry Pi Advent Calendar 2017の2日目の記事です。

はじめに

デスクトップアプリを作る方法として、以下のようにいくつか選択肢はあるのですが、 一番使い慣れたReactで書ければ早いなと思い、Electornを採用しました。

幾つかの記事でElectronをRaspberryPiで自動起動させるための設定は散らばっているのですが、 まとめていきたいと思います。

環境

  • OS: Raspbian
  • node: v7.10.1
  • Electron: v1.6.2

ElectronでReactを使用する場合は、こちらのプロジェクトが便利でした。

https://github.com/chentsulin/electron-react-boilerplate

自動起動する手順

自動起動する手順としては3つあります。

  1. Electronをproduction用にビルドする
  2. RasbianのOS画面を立ち上げない設定
  3. PM2でElectronのアプリを自動起動

1. Electronをproduction用にビルドする

$ git clone https://github.com/chentsulin/electron-react-boilerplate.git
$ cd electron-react-boilerplate
$ npm install
$ npm run build // raspberrypiだと5分ほどかかる場合があります。なるべくクラス10のSDカードを使用しましょう。
$ npm start // 起動を確認します。sshでraspberrypiにログインしている場合は先頭にDISPLAY=:0を付けます。

2. RasbianのOS画面を立ち上げない設定

autostartの設定を変更することで、起動後にDesktopを表示させないようにできます。

$ vim ~/.config/lxsession/LXDE-pi/autostart
# @lxpanel --profile LXDE-pi
# @pcmanfm --desktop --profile LXDE-pi
# @xscreensaver -no-splash
@xset s noblank
@xset s off
@xset -dpms

3. PM2でElectronアプリを自動起動する

(PM2)https://github.com/Unitech/pm2とはnodeアプリケーションのプロセス管理です。 使い勝手がよいのでこちらを使います。

pm2をインストール

$ npm install pm2 -g

プロジェクト直下にPM2設定ファイルとアプリ起動ファイルを作成

$ vim pm2.yml
apps:
  - script: /home/pi/electron-react-boilerplate/start.sh
    name: 'sample-app'
    env:
      NODE_ENV: development
    env_production:
      NODE_ENV: production

$ vim start.sh
cd ~/electron-react-boilerplate
DISPLAY=:0 npm start

pm2を自動起動

$ sudo su -c "env PATH=$PATH:/usr/bin pm2 startup -u pi --hp /home/pi"

pm2でElectronアプリを起動し、設定を保存

$ pm2 start ~/electron-react-boilerplate/pm2.yml
$ pm2 save

まとめ

拍子抜けするぐらいに簡単だったのではないでしょうか? これで、速度さえ気にしなければタッチパネルの付きの筐体は簡単に作れます。 これは動くと結構感動します。Arudinoとの連携なんかも調べれば簡単にできるので、 WEBエンジニアでもハードプロダクトが作れる自体なんだと実感できます。

実は最近ASUSからTinkerBoardがリリースされており、こちらはスペック的にはRaspberryPiの2倍あります。TinkerBoardにはGPUも搭載されているため、Material-UIなどcssアニメーションを使う場合はRaspberryPiではカクカクしてしまうので、TinkerBoardを使わなければならくなるかと思います。 ただ、設定面のしやすさ、ドキュメント量はやはりRaspberryPiの方が断然上なので、画面を見せるものでなければRaspberryPiが使いやすいです。

それではよいデスクトップアプリ開発を!