【nodejs活用】nexeでポータブルなExpress.jsサーバーを手軽に持ち歩く〜Windows編


2022/09/16
2022/09/17
【nodejs活用】nexeでポータブルなExpress.jsサーバーを手軽に持ち歩く〜Linux編
蛸壺の技術ブログ|nexeでポータブルなExpress.jsサーバーを手軽に持ち歩く〜Windows編

前の回では、Nexeを利用して
「Linux」で動く、nodejs & Express.jsをスタンドアローンの実行形式プログラムにするテクニックを取り上げていました。

合同会社タコスキングダム|蛸壺の技術ブログ
【nodejs活用】nexeでポータブルなExpress.jsサーバーを手軽に持ち歩く〜Linux編

Nexeを利用して、nodejsの開発環境なしでもLinuxOS上でコマンドライン一つで立ち上がるモックなExpress.jsサーバーとして使えるツールを作成します。

Nexeはクロスプラットホームのnodejsアプリの実行形式バイナリを作成できるのが売りですが、Windowsがターゲットの場合、動作させるまでには少しコツが入ります。

今回はNexeアプリをWindowsで動かす方法を取り上げていきます。


合同会社タコスキングダム|蛸壺の技術ブログ【効果的学習法レポート】nodejsをこれから学びたい人のためのオススメ書籍&教材特集

Windows向けにnexeアプリビルドする

Nexe化するソースコードは、前回説明したものと同じものにします。

またここでは、Nexeアプリをnodejs開発環境を整えたLinuxパソコンでビルドさせることにします。

Typescriptビルド後に作成できたソースコード・
dist/index.jsをターゲットに、nexeアプリビルドを施します。

最新のビルドターゲットは
こちらのリストにあるもので、開発環境でインストールされているnodejsのバージョンを考慮したものから選択します。

ちなみにビルドターゲットを省略すると現在のシステム環境から自動で読み取ってきてくれる仕組みですが、完全に合致したバージョンのファイルが無いとエラーが発生します。

そう都合良くインストールしているnodejsのバージョンと、リストアップされているNexeのプリビルドファイルのバージョンが一致していることが無いので、極力ビルドターゲットは手動で指定することをおすすめします。

今回は、64bitのWindowsOSで動作させることを念頭においているので、手元のnode v14相当でビルドしたNexeアプリを動かしたい場合には、以下のように--targetオプションで一番近しいバージョンのファイルで指定してみます。

            
            $ node --version
v14.19.0
$ nexe dist/index.js --target=windows-x64-14.15.3
        
ビルドが正常に通ると、index.exeというWindows実行形式のバイナリファイルが出力されます。

あとはこの実行形式ファイルを、ストレージなどに保存させてから、動作させたいWindowsマシーンへ持ち運んで使うことができます。

なお、nodejsでNexeアプリの開発を進めていくうちに、linuxやmacos向けにクロスプラットホームビルドした実行形式ファイルには問題がなくとも、Windows向けにバンドルしたプログラムだけが、
fs系のnode_modules内部ローカルファイルの読み込みに失敗するときがあります。

            
            node:internal/fs/utils.js:306
    throw err;
    ^

Error: ENOENT: no such file or directory, readfile 'C:\Users\...\node_modules\path\to\some\file'
at Object.readSync (node:fs:1405:3)
#...中略
syscall: 'readfle',
code: 'ENOENT',
path: 'C:\\Users\\...\\node_modules\\somepath...'
...
        
Nexe自体のバグなのか、インストールしているnodejsに起因するものなのか、Windowsだけこうなると原因はさだかではありませんが、windowsのビルドだけ応急処置に「--resources/-r」オプションを使います。

例えば、Express.jsで使う
node_modules/errorhandler/publicフォルダ以下のリソースが何故か無い場合には手動でこのフォルダまでのパスを追加したビルドを行うことになります。

            
            $ nexe dist/index.js \
    --resource='node_modules/errorhandler/public/**/*' \
    --target=windows-x64-14.15.3
        

Windowsでnodejsを利用できるようにする

先程は、NexeアプリをビルドするにもLinuxOS(著者の環境ではDebianOS)を利用することを想定していましたが、場合によってはWindowsのPCからNexeアプリをビルドしたいこともあるでしょう。

こちらの
公式の留意点の項目にも言及されていますが、そもそもNexeアプリに限らず、nodejsのプログラムをWindows上でビルドさせるためには、適切なバージョンのPython3と、「Boxstarter WebLauncher」というWindows向けのアプリケーションが必要になります。

「Boxstarter WebLauncher」に関しては、直接インストーラーからWindowsにインストールするか、もしくはPowerShellから以下のコマンドでインストールします。

            
            % Set-ExecutionPolicy Unrestricted -Force
% iex ((New-Object System.Net.WebClient).DownloadString('https://boxstarter.org/bootstrapper.ps1'))
% get-boxstarter -Force
% Install-BoxstarterPackage https://raw.githubusercontent.com/nodejs/node/HEAD/tools/bootstrap/windows_boxstarter -DisableReboots
        
なお「Boxstarter WebLauncher」のインストールには、少なくともディスクに10GBの空き容量が必要になりますので、パソコンのストレージに十分な空きがあるか気をつけましょう。


合同会社タコスキングダム|蛸壺の技術ブログ【効果的学習法レポート】nodejsをこれから学びたい人のためのオススメ書籍&教材特集

動作テスト〜CurlでNexe-Expressサーバーにアクセス

ビルド済みのNexe実行バイナリをWindows上にコピーし、起動するかどうかを確認します。

NexeアプリをWindowsが正しく認識すると、以下のようなアイコンで表示されているはずです。

合同会社タコスキングダム|蛸壺の技術ブログ

アイコンをダブルクリックすると、ネットワークポートを開けることになるので、Windowsのファイヤーウォールからポート開放の許可を確認するメッセージがポップアップしてきますので、これを許可します。

合同会社タコスキングダム|蛸壺の技術ブログ

以下のようにターミナル上で、プログラムが動作していたらOKです。

合同会社タコスキングダム|蛸壺の技術ブログ

もしくはバイナリのあるフォルダ内から実行しても同じです。

            
            % index.exe
Nexe-Express server is now running at http://localhost:3000!
        
これでExpress.jsサーバーが起動状態になりました。

この状態で、同じLANグループにある
Curlコマンドが利用できるパソコンから別ターミナルを起動し、このExpress.jsサーバーにアクセスできるかGETをリクエストしてみます。

例えば、サーバー起動中のWindowsパソコンのホストIPが
192.168.0.123とすると、エンドポイントhttp://192.168.0.123:3000になります。

            
            $ curl http://192.168.0.123:3000
Hello, local client!
        
きちんとレスポンスが得られれば、Windowsからでもポータブルなアプリ兼HTTPサーバーとして機能していると思います。めでたしめでたし。

記事を書いた人

記事の担当:taconocat

ナンデモ系エンジニア

主にAngularでフロントエンド開発することが多いです。 開発環境はLinuxメインで進めているので、シェルコマンドも多用しております。 コツコツとプログラミングするのが好きな人間です。

合同会社タコスキングダム|蛸壺の技術ブログ【効果的学習法レポート】nodejsをこれから学びたい人のためのオススメ書籍&教材特集