#daiizメモ

Scrapboxに夢中

Electron入門メモ 2

前回に引き続き,Electronについての勉強メモです.

f:id:daiiz:20160304003321p:plain:w30 ipcMain, ipcRenderer

MainプロセスとRendererプロセスが通信する部分の書き方を学んだ.Chromeアプリで言うとchrome.runtime.sendMessageで送ったメッセージをchrome.runtime.onMessage.addListenerで受け取るような流れの部分だと思う.

ちょっと調べるとipcというもので実現できるということがわかり,サンプルに傚ってプログラムを書いてみる.実行してみると,実行はできるが「これからはipcではなくてipcMainipcRendererを使ってね」という旨のログが出る.実行時に教えてくれるのは親切でよい.requireの仕方がrequire("ipc")からrequire("electron").ipcMainと変更になったようなのでelectronに特化したipcみたいな感じなのだろうか.

いまのところchromeアプリよりもシンプルに書けている気がしている.BrowserWindowとして開いたアプリ画面は通常の更新ショートカットキー「Cmd + R」で更新できることを知って捗った.

f:id:daiiz:20160304003321p:plain:w30 nedb

アプリ内でデータを保存しておく必要がある場合,Chromeアプリではchrome.storage.*やIndexedDBを使っていた.Electronでは後者に加えて,localStorageを使うという選択肢もある.今回はせっかくなので他の案もさがしてみた.nedbというものを見つけた.

これはJSONストアで,データストアを操作するためのAPI(保存,取得,更新,消去など)がMongoDBと同じになっている.新たにAPIの呼び方を覚えなくて良いことや,導入が簡単であること(npm install するだけ!),将来的にMongoDBに乗り換えやすいことなどを考えると良い選択肢だと思った.

ローカル環境でMongoDBと同じ感覚で触れるストレージがあると安心できる.保存したデータは.dbファイルに書き出される.このファイルの出力場所は

var app = require('app');
var userDataDir = app.getPath('userData');

としておいた.app.getPath('userData')を使うと,OS毎に適切な場所を返してくれるらしい.僕のMacOSでは,userDataDirは

/Users/daiki/Library/Application Support/HelloElectron

だった.