Electronでelectron-storeを使ってデータの永続化を行う

投稿者: | 2019-07-28

electronで設定などデータを永続化するために、electron-storeを使う。

electron-storeはデータの読み書きなどをしてくれるモジュール。sindresorhus/electron-store: Simple data persistence for your Electron app or module - Save and load user preferences, app state, cache, etc

実装をメモしておく。

単純な値の場合

画面のサイズを保存する例を挙げる。

まずは取得するとき。単純に必要なところでstore.get(key, defaultValue)すればよい。今の場合は、ウィンドウの作成タイミングで呼び出せばいい。

mainWindow = new BrowserWindow({
  width: store.get('window.width', 800),
  height: store.get('window.height', 600),
  //...,
});

次は保存・永続化するとき。保存したいタイミングでstore.set(key, value)すればいい。今の場合は、ウィンドウのクローズイベントの時に呼び出せばいい。closedcloseがあるが、BrowserWindow | Electronに、

closed
ウインドウがクローズされると発生します。このイベントを受け取った後は、ウインドウへの参照を削除し、これ以上、ウインドウを使用しないようにしてください。

close
ウインドウがクローズされようとするときに発生します。 これは、DOMの beforeunload と unload イベントの前に発生します。 event.preventDefault() を呼び出すことで、クローズがキャンセルされます。

とあるので、ウィンドウがまだ破棄されていないときに発生するcloseを使う。なお、closedではウィンドウを閉じたときに、Error: Object has been destroyedというエラーがポップアップのダイアログで表示される。

また、BrowserWindow | Electronによれば、window.getSize()は幅、高さの順のリストを返すので注意しておく。

// これをwindowの生成時に登録しておけばいい。
mainWindow.on('close', () => {
  // Save window size settings
  store.set('window.height', mainWindow.getSize()[1]);
  store.set('window.width', mainWindow.getSize()[0]);
});

これでOK。

リストを保存する場合

リストの保存もそのまま出来る。

// 記録
store.set('strories', story_list);
// 取り出し
const story_list = store.get('stories', []);

その他

保存場所は、store.pathを参照することで分かる。macosでは

~/Library/Application Support/<name>/config.json

になっている。これは、electronでのapp.getPath('userData')で取得できるパスと同じ。

データの削除は、store.delete(key)store.clear()で行うことができる。clearは全削除なので気をつけよう。

コメントを残す