【簡単Node.jsアプリ開発】NexeでCLI版スネークゲームを作ってみる・前編


2021/12/01
蛸壺の技術ブログ|NexeでCLI版スネークゲームを作ってみる・前編

当初Bash版のシェル芸スネークゲームを作成して、一人悦に浸り遊んでみようと思っていましたが、殊の外面倒になってきた折、Node.jsアプリケーションをCLIツールとしてパッケージングしてくれるユーティリティ・
「Nexe」がふと先日目に留まり、とりあえずフルシェルスクリプトで作るより先にNode.jsで作ってみたくなりました。

nexe | create a single executable out of your node.js apps

最近はGoogle検索で「スネークゲーム」と検索するとGoogle検索ゲームでそのまま遊べるようになっているので、わざわざCLIでスネークゲームを一から作る必要は無いかも知れません。

個人的な目論見として、今後Tensorflowとの併用などで機械学習の勉強にも使えるように拡張目的で作ってみます。


nexeプロジェクトの作成

とりあえずいつものインストール中のnode.jsの環境です。

            
            $ node --version
v14.18.0
$ npm --version
7.24.1
$ yarn --version
1.22.13
        
そこからsnake_nexeという名前でプロジェクトフォルダを作り、適当なpackage.jsonでプロジェクトを初期化します。

            
            $ mkdir snake_nexe
$ cd snake_nexe/
$ yarn init
yarn init v1.22.13
#...中略
question private:
success Saved package.json
        
プロジェクトが出来たら、nexeをインストールしましょう。

            
            $ yarn add nexe -D
yarn add v1.22.13
info No lockfile found.
[1/4] Resolving packages...
#...省略
└─ yauzl@2.10.0
Done in 7.14s.
        
これでnexeアプリのビルド環境が整いました。

出来立てほやほやのpackage.jsonは以下の内容になっています。

            
            {
  "name": "snake_nexe",
  "version": "0.0.1",
  "description": "To execise nexe with Snake Game.",
  "main": "index.js",
  "author": "taconocat",
  "license": "MIT",
  "devDependencies": {
    "nexe": "^4.0.0-beta.19"
  }
}
        

2021年12月現在で、nexeをパッケージインストールするとベータのv4が入るようになっています。

安定版はまだv3ですので、そちらを使いたい場合には
"nexe": "^3.0.0"とパッケージオーダーを指定しましょう。

ちなみにビルド後のnexeアプリの名前はデフォルトでpackage.jsonのnameフィールドから拾われて
snake_nexeとなります。

またmainフィールドのjsソースコードがエンドポイントファイルになります。

ここでは
index.jsをエンドポイントとして作成しておきます。

            
            $ touch index.js
        
まずはnexeでビルド出来るか確かめてみましょう。

index.jsに以下の内容で編集します。

            
            console.log('Hello, my first Nexe app!');
        
それではビルドしてみます。

            
            $ npx nexe index.js
ℹ nexe 4.0.0-beta.19
✔ Downloading pre-built Node.js
✔ Finished in 0.431s

Error: https://github.com/nexe/nexe/releases/download/v3.3.3/linux-x64-14.18.0 is not available, create it using the --build flag

See nexe -h for usage..
        
...なんだかエラーが出ました。

ビルドターゲットを省略すると現在のシステム環境から読み取ってきてくれる仕組みのようですが、
こちらのビルドターゲットのリストに無いとエラーが発生しているようです。

例えば、64bitのDebianOSで、node v14相当のアプリを動かしたい場合には、以下のように
--targetオプションを指定します。

            
            $ npx nexe index.js --target=linux-x64-14.15.3
ℹ nexe 4.0.0-beta.19
✔ Downloading...100%
✔ Compiling result
✔ Entry: 'index.js' written to: snake_nexe
✔ Finished in 90.545s
        

今度はビルドが成功したようです。

実行ファイルが出来たら、ターゲットにしたOS環境にこのバイナリを持ち込んで、

            
            $./snake_nexe
Hello, my first Nexe app!
        
とやると簡単にクロスプラットホーム対応のCLIアプリが作れます。

ということで、nexeを使ってみた所管ではCLIアプリ専用の
NW.jsという感じです。

スタンドアロンなNode.jsアプリケーションとして使えるという意味では重宝できそうですが、結果はNode.jsのランタイムやライブラリ等を詰め合わせているだけなので、ビルド後の実行ファイルはかなりデカイです。

            
            $ du -h snake_nexe
70.7M   snake_nexe
        

特にnode v14やv15では総容量70MBを超えてきます。

nexeの特性上容量のデカさは仕方ないと割り切って、配布する時にファイル圧縮するなどで工夫してみてください。

またお目当てのビルドターゲットが無かった場合には、
こちらのビルド要件を満たすことでnode.jsのリソースビルドも可能です。

            
            $ npx nexe index.js --build
        
ソースからビルドすると環境によってはビルドまでの時間がかかります。

本番アプリ以外で毎回ソースコードビルドするのは現実的ではないので、プレビルドされているターゲットを指定して使ったほうが良いでしょう。


まとめ

今回はnexeの導入と簡単なビルドテストを行ってみました。

とても簡単にクロスビルドに対応したCLI専用のNode.jsアプリや自作シェルコマンドが作れるので、個人的にはスネークゲーム以外にも今後色々と楽しく使える気がします。

ということで、
スネークゲーム自体は後半のブログ記事で解説して行く予定です。
記事を書いた人

記事の担当:taconocat

ナンデモ系エンジニア

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