【node.js】NW.jsでネイティブモジュールを使う方法 | Sqlite3を使用

サムネイル画像 NW.js

今回は、NW.jsでネイティブモジュールをビルドするのにかなり苦戦したので、備忘録を残したいと思います。

Electronであれば、便利な「electron-rebuild」モジュールでワンタッチでいけましたが、NW.jsの場合はちょっと曲があった。

ネイティブアプリフレームワークでは、Electronが一番有名ですが、最近使うのをやめました。理由は、ソースコードのプロテクション機能がないからですね。やはりコード見られるのはセキュリティー的にまずいですし、コードがパクられる可能性があります。

ではとりあえず、サクッとNW.jsでの、ネイティブモジュールのリビルドをやっていきます。

私の環境

  • Windows 11 Pro
  • node.JS v18.13.0
  • node-gyp v9.1.0
  • node-pre-gyp v0.17.0
  • nw v0.72.0
  • nw-gyp v3.6.6
  • sqlite3 v5.1.3

ネイティブモジュールのリビルド

最近、ネイティブアプリの個人開発で、Sqliteを使う機会があり、「sqlite3」モジュールを採用することになりました。こちらはネイティブモジュールなので、NW.jsで使用する際は、リビルドが必要です。

-- プロジェクトのルート
|--- node_module
|~~~ src // ソース・ファイル
|=== build // 配布用ビルド済みパッケージ
|=== package.json

上記のような構造にして開発を行っています。まず、Sqlite3モジュールをnpmでインストールします。

npm i sqlite3 --save

次にリビルドに必要なnpmパッケージをインストールします。

npm i node-gyp node-pre-gyp nw-gyp -g

すべてオプション「-g」を付けて、グローバルインストールするのがおすすめです。

Windowsの場合、環境変数を設定しないとコマンドが使えないので、「C:\Users\[ユーザー名]\AppData\Roaming\npm\node_modules」を「PATH」に追加しておいてください。

インストールが完了したら、先程インストールしたパッケージ「Sqlite3」のリビルド作業をしていきます。ここがElectronのときと違って、リビルドしたいモジュールのプロジェクト内に移動して作業を行う必要があります。

つまり、インストールした「Sqlite3」のプロジェクトディレクトリ「プロジェクトのルート\node_module\sqlite3」に「cd」コマンドで移動し、「sqlite3」をNW.js用に「node-pre-gyp」でリビルドします。

cd .\mode_module\sqlite3
node-pre-gyp rebuild --runtime=node-webkit --target=0.72.0
 --target_arch=x64

node-pre-gypで使うオプションですが、「–runtime=node-webkit」はそのまま、「–target=x.x.x」は、現在使用中のNW.jsのバージョン番号を記載してください。「–target_arch=x64」は、PCのアーキテクチャの種類を記載してください。Windows OS 64bitの場合はそのままで大丈夫です。

これでリビルドができるはずです。

本当はNW.jsが公式に提供している「nw-gyp」を直接使いたかったのですが、「module_name」が見つからないといった内容のエラーが出て、最初リビルドがうまくいきませんでした。
しかし、「–module_name」と「–module_path」オプションを付けて実行することでリビルドが通りました。
「–module_name」と「–module_path」は、sqlite3のプロジェクトルート直下の、「package.json」内に記載があります。

cd .\mode_module\sqlite3
nw-gyp rebuild --module_path="./lib/binding/napi-v{napi_build_version}-{platform}-{libc}-{arch}" --module_name="node_sqlite3" --target=0.72.0 --target_arch=x64

参考サイト

コメント

タイトルとURLをコピーしました