前回に引き続き,Electronについての勉強メモです.
ipcMain, ipcRenderer
MainプロセスとRendererプロセスが通信する部分の書き方を学んだ.Chromeアプリで言うとchrome.runtime.sendMessage
で送ったメッセージをchrome.runtime.onMessage.addListener
で受け取るような流れの部分だと思う.
ちょっと調べるとipc
というもので実現できるということがわかり,サンプルに傚ってプログラムを書いてみる.実行してみると,実行はできるが「これからはipc
ではなくてipcMain
とipcRenderer
を使ってね」という旨のログが出る.実行時に教えてくれるのは親切でよい.requireの仕方がrequire("ipc")
からrequire("electron").ipcMain
と変更になったようなのでelectronに特化したipcみたいな感じなのだろうか.
いまのところchromeアプリよりもシンプルに書けている気がしている.BrowserWindowとして開いたアプリ画面は通常の更新ショートカットキー「Cmd + R」で更新できることを知って捗った.
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
だった.