質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Electron

Electronは、HTML5とNode.jsというWebの技術を用いてデスクトップアプリケーションを作成できるクロスプラットフォームな実行環境です。

Vue.js

Vue.jsは、Webアプリケーションのインターフェースを構築するためのオープンソースJavaScriptフレームワークです。

Vuetify.js

Vuetify.jsは、マテリアルデザインを基本とするVue.jsのCSSフレームワークです。多くのマテリアルデザインのコンポーネントを提供しており、あらゆるアプリケーションに対応可能。vue-cli用テンプレートがあり、簡単にページを作成できます。

NeDB

NeDBは、JavaScriptで作られたデータベース。Node.js/NW.js/Electron/ブラウザなどで動作します。アプリケーションに組み込むことができるため、別途でデータベースプロセスを起動することは不要です。MongoDBと互換性があり高速です。

Vuex

Vuexは、Vue.js アプリケーションのための状態管理ライブラリです。アプリケーション内で使用するコンポーネントのための集中データストアを提供。コンポーネント同士でデータをやり取りし、処理のフローを一貫させたり、データの見通しを良くすることができます。

Q&A

0回答

3385閲覧

Electron + Vue.js + NeDB において、NeDBで作成したストアをmain 〜 renderer間で共有したい

tkgoya

総合スコア7

Electron

Electronは、HTML5とNode.jsというWebの技術を用いてデスクトップアプリケーションを作成できるクロスプラットフォームな実行環境です。

Vue.js

Vue.jsは、Webアプリケーションのインターフェースを構築するためのオープンソースJavaScriptフレームワークです。

Vuetify.js

Vuetify.jsは、マテリアルデザインを基本とするVue.jsのCSSフレームワークです。多くのマテリアルデザインのコンポーネントを提供しており、あらゆるアプリケーションに対応可能。vue-cli用テンプレートがあり、簡単にページを作成できます。

NeDB

NeDBは、JavaScriptで作られたデータベース。Node.js/NW.js/Electron/ブラウザなどで動作します。アプリケーションに組み込むことができるため、別途でデータベースプロセスを起動することは不要です。MongoDBと互換性があり高速です。

Vuex

Vuexは、Vue.js アプリケーションのための状態管理ライブラリです。アプリケーション内で使用するコンポーネントのための集中データストアを提供。コンポーネント同士でデータをやり取りし、処理のフローを一貫させたり、データの見通しを良くすることができます。

0グッド

0クリップ

投稿2018/10/11 09:39

編集2018/10/14 02:01

はじめに

  • Electron + Vue.js + NeDB でデスクトップアプリを開発しています(Vuexは現時点では未導入)
  • フォームから入力したデータをNeDBにてローカルファイルに永続化します

やりたいこと

  • いわゆる常駐型アプリ化で、ウィンドウを閉じてもトレイアイコン が残り、バックグラウンドで動作し続ける機能を追加したいです(また、トレイアイコン のコンテキストメニューから、任意にウィンドウを復元できるようにします)
  • ウィンドウ(renderer)でデータを入力し、それを元にバックグラウンド(main)で処理を行いたいです(main 〜 renderer間でのストアの共有)

問題点

  • 開発当初は、何も考えずに renderer 側で NeDB をストアとして利用していましたが、

ウィンドウからNeDBに登録したデータをバックグラウンド側で取得できないことに気付きました。(アプリを再起動すれば、バックグラウンドからも取得出来ましたが、再度ウィンドウからデータを登録したデータは、やはり次回再起動時まで、バックグラウンドからは取得出来ませんでした)

  • 恐らくこれはNeDBの仕様で、起動時に1つのインスタンスにファイルから読みだしたデータをオンメモリで展開し、起動中は全てオンメモリで操作。終了時にファイルに初めてファイルに書き出す。といった処理をしているからだと思います。

やってみたこと

  • 実際には細かくコンポーネント化してたりするので実際のコードとは異なりますが、大体下記の様なイメージです。現時点ではVuexは未導入です。
  • また、VuexipcMainipcRendererを使ってごにょごにょ出来ないかと模索中なのですが、行き詰まったので今回質問させて頂きました。

renderer.js

js

1import Datastore from 'nedb' 2import path from 'path' 3import { remote } from 'electron' 4const db = new Datastore({ 5 autoload: true, 6 filename: path.join(remote.app.getPath('userData'), '/data.db') 7}) 8const data = { 9 name: 'hogehoge' 10} 11// データを保存 12db.insert(data, function(err, newData) { 13 if (err) { 14 console.error(err) 15 } 16})

main.js

js

1 2import Datastore from 'nedb' 3import path from 'path' 4import { app } from 'electron' 5const db = new Datastore({ 6 autoload: true, 7 filename: path.join(app.getPath('userData'), '/data.db') 8}) 9// トレイアイコン のコンテキストメニューより、任意のタイミングで実行 10db.find({}, function(err, data) { 11 console.log(data) // 空っぽ(renderer.jsから登録した“hogehoge”が見つからない) 12})

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Orlofsky

2018/10/11 21:02

タグの追加は右下の「返信の必要なお問合せはこちら」からどうぞ。
tkgoya

2018/10/11 23:12

コメントありがとうございます。一応タグの追加は申請済みですので、追加されたことが確認出来次第、質問のタグを変更しようと思っています。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問