Matter を Windows でビルドした

思うところあって、4年間触ってない matterWindows で動くようにした。そもそも Linux でしか動かなかったが、Unix 仮想端末 API のラッパーライブラリである pty.js を Microsoftがフォークして Windows のコンソールにも対応した(node-pty と改名もされた)ので「Windows 対応」することが可能になった。

最近の Electron ではレンダラープロセスでの Node 統合が無効になっているので require が使えなくて困った。BrowserWindow のオプションで webPreferences → nodeIntegration を true にすればいいらしいのだが、electron v12 ではそれでも require は使えなかった。electron v10 や v11 では使えるようになった。

また、electron モジュール内の remote にアクセスできるようにするために、enableRemoteModule も true にする必要があった。

node-pty のコンパイルについて。Node をインストールする時にネイティブモジュールのコンパイル用に VisualC++ 関連のツールや Python がインストールされる。また、node-pty の README に書いてあるように Windows SDK をインストールする必要がある。(これをしないと std::unique_ptr が無いとか言われる。)

さらにコンパイルされたモジュールをロードするには、app.allowRendererProcessReuse というのを false に設定しておく。環境に入っている node と electron に組み込まれている node のバージョンが合わない場合は、NODE_MODULE_VERSION (Node用ネイティブモジュールのABIだろう)の値が合わないのでロードできない。これを解決するためには、electron-rebuild というパッケージ/コマンドを使って node-pty を(再)ビルドする。

Electron アプリは API が安定しなくてつらい。

f:id:plonk123:20210305023504p:plain