Electronでsqlite3を使おうとしたら色々大変だった

今年も夏めく季節がやって参りました。
年をとると時が過ぎるのも早いもので、もう蝉の声すら聞こえてきそうです。

さて、Electron(0.33.6)でsqlite3を使用しようと思ったところ、盛大にはまったので備忘録を残しておきます。
調べてみると幾つか記事が見つかります。

http://verysimple.com/2015/05/30/using-node_sqlite3-with-electron/
http://qiita.com/shghdyji/items/20d2a913e3e492726c55

原因としては

electron で探しに行っているsqlite3のpathと実際にinstallしているsqliteのパスが異なっているために起こる。

らしい。解決作としては

1
2
3
4
cd node_modules/sqlite3
npm run prepublish
node-gyp configure --module_name=node_sqlite3 --module_path=../lib/binding/node-v47-darwin-x64
node-gyp rebuild --target=0.36.1 --arch=x64 --target_platform=darwin --dist-url=https://atom.io/download/atom-shell --module_name=node_sqlite3 --module_path=../lib/binding/node-v47-darwin-x64

を実行するといいらしいが…。
prepublishはpackage.jsonのnpm-scriptsを実行するみたいだ。

….が、まさかの1行目からエラーを吐かれた。
すでに精神がボロボロだったが、色々いじってみた結果以下のコードでうまくった

まずグローバル環境にnode-gypをインストールする。
npm install -g node-gyp

このモジュールはNode.jsのモジュールをコンパイルしてくれるモジュールで、今回はこいつのrebuildを使ってやる。なお、Python2.7系に依存しているかもしれない。
それで、node_modules/sqlite3に移動し、以下を実行

1
node-gyp rebuild --target=<your electron version> --arch=x64 --target_platform=darwin --dist-url=https://atom.io/download/atom-shell --module_name=node_sqlite3 --module_path=../lib/binding/electron-v<your electron version>-darwin-x64

実行後いろいろwarningがでるがなんとか使えるようになった。
個人で使うものだしまぁいいかなということでwarningは放置してます。

2016-6-15追記
warning出たまま使ってみたらsql文は実行できるんだけどデータベースの挙動が不自然。ここにきて再度エラーを解決しようと頑張ったのでメモ。
まずNodeとnpmとelectronのバージョンを最新にアップデートした。

1
2
3
4
5
cd node_modules/sqlite3
npm install nan@2.3.3
npm run prepublish
node-gyp configure --module_name=node_sqlite3 --module_path=../lib/binding/node-(your version)-darwin-x64
node-gyp rebuild --target=<update Electron version> --arch=x64 --target_platform=darwin --dist-url=https://atom.io/download/atom-shell --module_name=node_sqlite3 --module_path=../lib/binding/node-(your version)-darwin-x64

warningが出るがスルーしてsqlite3/lib/に移動し、

1
mv node-v48-darwin-x64 electron-v1.2-darwin-x64

sqlite3のモジュールにnan@2.3.3を突っ込んだ。
これで一応現在はうまく動いている。