Electron の舞台裏: Node をライブラリとして使用する
Electron の舞台裏について説明するシリーズ、第二弾です。 イベントループの統合についてまだ読んでいない方は 最初の記事 をご覧ください。
ほとんどの人は Node をサーバサイドアプリケーションに使っていますが、Node の豊富な API セットと活発なコミュニティのおかげで組み込みライブラリにも最適です。 この記事では、Electron のライブラリとして Node がどのように使われているかを解説します。
ビルドシステム
Node も Electron も GYP
をビルドシステムとして使用しています。 アプリ内に Node を埋め込みたい場合は、あなたもビルドシステムとして GYP を使用する必要があります。
GYP
は初めてですか? そうであれば、この記事を読み進める前に このガイド を読んでからにしてください。
Node のフラグ
Node のソースコードディレクトリにある node.gyp
ファイルには、Node をどのように構築するかが記述されており、多くの GYP
変数とともに Node のどの部分を有効にするのか、特定の設定ファイルを開くかどうかを制御しています。
ビルドフラグを変更するには、プロジェクトの .gypi
フ ァイルに変数を設定する必要があります。 Node の configure
スクリプトは、いくつかの一般的な設定ファイルを生成できます。例えば、./configure --shared
を実行すると、Node を共有ライブラリとしてビルドするように指示する変数を含んだ config.gypi
が生成されます。
Electron は独自のビルドスクリプトを持っているので、この configure
スクリプトは使いません。 Node の設定は、Electron のルートソースコードディレクトリにある common.gypi
ファイルで定義されています。
Electron と Node のリンク
Electron では、GYP
変数 node_shared
を true
に設定することで Node を共有ライブラリとしてリンクしています。このため、Node のビルドタイプは executable
から shared_library
に変更され、Node の main
エントリポイントを含むソースコードはコンパイルされません。
Electron は Chromium に同梱されている V8 ライブラリを使用しているため、Node のソースコードに含まれている V8 ライブラリは使用しません。 これは node_use_v8_platform
と node_use_bundled_v8
の両方を false
に設定することで実現しています。