Sqlite3を使う。最期に書いたようにwindows-build-toolsがインストールできない。(2018年6月現在)インストール方法がわかったんで書いておく。ここにあるようにBuildTolls_Full.exeがインストール完了しているのに終わらないのとログファイルに終了したことが出力されないで、ずーっと待ち状態になっているようだ。BuildTolls_Full.exeを終了して、ごにょごにょするといいみたいだ。again.画面にこれが出たら、BuildTolls_Full.exeをタスクマネージャで終了する。すると、npmが終了する。そのうちバージョンアップで直るでしょうね。Sqlite3を使う。パッケージングで作ったプロジェクトをベースにSqlite3を使うプロジェクトを作ってみる。Sqlite3をインストールする。-Delectron-rebuildをインストールする。-Delectron-rebuildはネイティブコードを含むモジュールをElectronで使えるようにリビルドするツールだ。インストール後、electron-rebuildを実行してリビルドする。-fsqlite3を含めないようにwebpackの設定を変更する。次のようにexternalsを追加する。}これでとりあえず準備完了。レンダラープロセスでsqlite3を使う。ここはアップロードしたソースを参照してくれ。startで実行できる。元のプロジェクトでは、ビルド後、実行するのに必要なファイルをdistフォルダに作られるようにしたが、sqlite3のモジュールがdistフォルダには用意されていないので、パッケージングするには、distフォルダにsqlite3のモジュールをインストールする必要がある。src/package.jsonのdependenciesのsqlite3を追加する。dist/を実行してモジュールをリビルする。これでelectron-packagerでパッケージングする準備ができたので、electron-packagerでパッケージングする。変更したソースをダウンロードできるようにしといた。windows-build-toolsを実行し、windows-build-toolsをインストールすればいいらしいんだけど、うちのWindowsでは途中で止まっていつまでたっても(一晩待った)終わらなかった。そのうち調べて解決しないと・・・あと、Windowsの場合って書いたけど、macOS、Linuxの場合もCコンパイラやPythonなんかが必要なんでインストールする必要がある。Pythonは標準で入ってそうだけど。メニューメニューを変更してみる。アップしたソースからメインプロセスのソースを一部あげる。createWindow();});メニューのテンプレートを用意する。配列でトップメニュー(と言うのかな?)のオブジェクトを用意する。これが、Windowsだとウインドウ上部に表示されるメニューになる。それぞれのオブジェクト内にsubmenuでさらにメニューのオブジェクトを用意するとメニューをクリックした時に出てくるメニューになる。メニューオブジェクトのプロパティやメソッドは、ここに詳しく書かれている。ここでは最低限必要そうなのを書いておく。label:メニューの表示名click:クリックした時に呼ばれるメソッドaccelerator:ショートカットキーの定義submenu:サブメニューtype:メニューのタイプ。"separator"、"checkbox"とか。role:メニューの動作を定義。標準的なメニュー項目と動作が用意されているのでそれを指定する。どんなのがあるかは、ここに書いてある。clickメソッドが定義されている場合は無視される。appのreadyイベントでMenu.buildFromTemplateを使ってテンプレートからメニューを作って、Menu.setApplicationMenuでメニューを設定する。ポップアップメニューレンダラープロセスでメニューを用意しておいて、contextmenuイベントで表示する。レンダラープロセスのソースを次に示しておく。2.0.0でインターフェースが変わった。}}ソースの(1)の部分でポップアップメニューを用意して、(2)の部分でポップアップメニューを表示している。ファイルオープンダイアログとファイル読み込みに保存ボタンを追加して、ファイル保存ダイアログの表示とファイル保存処理を追加した。まるっと、新しいソースもアップしておく。保存ボタンを押した時の処理をあげておく。});dialog.showSaveDialogでファイル保存ダイアログを表示する。第1引数は、親ウインドウでremote.getCurrentWindow()でレンダラープロセスで表示しているページのウインドウが取得できる。第2引数は、ダイアログのオプションを指定する。使いそうなのをピックアップして書いとく。詳細はドキュメントを見よ!filters:表示するや選択できるファイルの種類を配列で指定する。["*"]}],第3引数は、コールバック関数。入力したファイル名(フルパス)が渡される関数を指定する。上に載せたソースでは、Node.jsのfs.writeFileを使ってTextAreaの内容を保存している。ファイルオープンダイアログとファイル読み込みまるっと、ソースをアップしておく。ここにアップしたソースから、レンダラープロセスの頭の方に追加するのと、開くボタンをクリックした時の処理をあげとく。}});まず、import部分の説明。dialogはメインプロセスでしか使えないのでremoteをインポートしてる。Electronでは、Node.jsのAPIが使用できるので、ファイルを読み込むためにfsをインポートしている。クリックした時の処理。dialog.showOpenDialogでファイルオープンダイアログを表示する。第1引数は、親ウインドウを指定する。remote.getCurrentWindow()でレンダラープロセスで表示しているページのウインドウが取得できる。第2引数は、ダイアログのオプションを指定する。使いそうなのをピックアップして書いとく。詳細はドキュメントを見ればいいじゃんwdefaultPath:デフォルトのディレクトリfilters:表示するや選択できるファイルの種類を配列で指定する。["*"]}],proprties:配列で使用する機能を指定する。openFile:ファイル選択を可能にする。openDirectory:ディレクトリ選択を可能にする。macOSの場合、openFile、openDirectoryの両方を指定すると、ファイルまたはディレクトリを選択できる。Windows、Linuxの場合はディレクトリのみ選択できる。multiSelections:複数選択を可能にする。第3引数は、コールバック関数。選択したファイル名(フルパス)の配列が渡される関数を指定する。上に載せたソースでは、Node.jsのfs.readFileを使って読み込んで最終的にTextAreaに設定している。ROMイメージを作ってみる。ファイルオープンダイアログを出す。