Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
8
Help us understand the problem. What is going on with this article?
@maron8676

WindowsでElectronからNative Moduleを使えるようにする

Using Native Node Modulesによると、
ElectronでNative Moduleを使用する場合には再ビルドが必要なようなのですが、
windowsではいろいろ準備しないと動かなかったのでやったことをメモしておきます。

追記 2019/10/28
最近のNode.jsのインストーラでは以下のような設定項目があり、チェックをつければ自動で設定してくれるようです。動作確認まではできていないですが、これでできるなら一番楽そうですね。
WS001204.JPG

試したところ、上記のチェックでは「3. python2.7をインストールしてパスを通す(古い手順)」までをほぼ自動でやってくれるようです。
ただ、Visual Studio InstallerからBuild Toolの言語パック(英語)を手動インストールしないと、vcpkgを使うときにエラーになりました。(そのくらい自動でやってほしい…)

1. Visual C++をインストール

Native ModuleはC++で書かれたモジュールのことなので、C++をコンパイルできる環境を準備しなければいけません。
2018/03/18現在では、Visual Studio Communityをインストールすることになります。
vs_Community.exeをダウンロードしてC++関連の機能をインストールします。
私はどの機能がどこに関係しているかを完全に理解していないので、C++っぽい機能をすべてインストールしておきました。

2. windows-build-toolsをインストール

nodejsからVisual C++を使えるようにするために必要なようです。
コマンドプロンプトで以下のコマンドを実行するとインストールできます。

npm -g i windows-build-tools

3. python2.7をインストールしてパスを通す(古い手順)

追記(2020/07/06)
Python2.7は2020/01/01にEOLとなっています。
Pythonのパスが通らない場合はPython3のパスを指定しましょう。
※windows-build-toolsのリポジトリを見る限り内部で使われるPythonは3系に更新されているようです。

windows-build-toolsのインストール時にpython2をインストールしているようなのですが、
パスを自力で通す必要があるようで、通し方が分からなかったので別でインストールしてしまいました。
2018/03/18現在では、minicondaが便利です
インストールしたらAnaconda2ディレクトリを環境変数"Path"に追加しておきます。

追記
npm config set python=
だとうまく行きませんでしたが
%USERPROFILE%.windows-build-tools\python27
を追加してしまえばminicondaは不要です。
python3ユーザとしてはめんどいですが。

4. vcpkgをインストールして必要なモジュールを追加する

3.を完了した時点でビルドできる場合もあるのですが、
Native ModuleがVisual C++に初期で入っていないモジュールを内部で使用しているとビルドエラーが出ます。私はcouchbaseモジュールをビルドしたところopensslが見つからないと言われました。
そこでVisual C++にモジュールを追加するためにvcpkgを利用します。
git cloneしてきて、readmeの通りにbatを実行するとvcpkgがインストールできます。
インストールが終わったら

vcpkg.exe integrate install

でVisual C++と統合します。今回はopensslがないと言われていたので以下のコマンドでインストールします。

vcpkg.exe install openssl:x64-windows

ファイルシステムがNTFSでないと失敗するバグがあるようなので気を付けましょう。私はそれで1時間無駄にしました。

5. electron-rebuildを実行する

ここまできたらelectron-rebuildで再ビルドができるようになっているはずです。以下のように再ビルドをしましょう。

node_modules\.bin\electron-rebuild.cmd

追記 2018/03/24
electron-builderからinstall-app-depsで再ビルドすると、上記を行っていたとしてもうまく動きませんでした
しかし、npmRebuild:falseにしてelectron-rebuildで再ビルドしたファイルを置いておけばパッケージングはできるので
一応なんとかなりそうですね。

追記 2018/11/11
vcpkgのバグなのかどうかは分からないのですが、2018/11/11現在、多くのモジュールでインストール時にエラーが出ます。
vcpkg\ports\モジュール名\portfile.cmake
PREFER_NINJA#でコメントアウトすると正常にインストールできるようになります。
どうやら現状windowsではninjaというビルドツールがうまく動いておらず、ninjaを使わない設定とする必要があるようです。

また、bzip2のインストール時にダウンロードしたファイルが不正だといわれてエラーになりますが、手動で正しいファイルをダウンロード(こことか)してvcpkg\downloadsに入れておけばインストールできます。

追記 2019/09/28
モジュールによっては、Node.jsのバージョン問題でビルドに失敗することがあるようです
例えば、libxmljs-mtはNode.js v8ではビルド成功しましたが、v10では失敗してしまいました

8
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
8
Help us understand the problem. What is going on with this article?