NodeJSロゴ

NodeJSでローカルの実行ファイルを実行するexec

NodeJSでexecコマンドを使ってローカルにある実行ファイルを実行しようとしたのですが、うまくいかなくてドツボにはまったので備忘録として書きます。

NodeJS側のプログラムではこういうように書いていました。

main.js

const exec = require('child_process');

let commandToRun = 'some.exe';
exec(commandToRune);Code language: JavaScript (javascript)

NodeJSの公式ドキュメントには、const { exec } = require('child_process');と書いてありますが、exec一つだけなので、中括弧{}は不要だろうと思っていました。

しかし、実行ファイルのログを見ても、そもそもログが作られておらず、実行すらされていない状況。問題をシンプルにするため、commandToRunをnotepad.exeに変えて試してみましたが、メモ帳が立ち上がりません。main.jsにコンソールログでデバッグを掛けていたがのですが、エラーも何も出ないので迷宮入りしかけました。

中括弧は大事

結論として、requireの定義を

const {exec} = require('child_process');Code language: JavaScript (javascript)

と中括弧を付けて定義するか、

const exec = require('child_process').exec;Code language: JavaScript (javascript)

として、.execまで含めることでローカルの実行ファイルが無事に実行できるようになりました。

NodeJSのドキュメントを見直してみると、execはchild_process.execに含まれています。なので、中括弧を付けて分割(destructuring)代入するか、.execまで含めて代入する必要があったわけですね。

JavaScriptの中括弧については、私もよく参照しているStack Overflowでも分かりやすい回答がありました。

奥深い。。

Categories:

Tags:

No responses yet

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です