NodeJSでLinuxコマンドを実行する

Table of Contents

Table of Contents

たまにNodeJSから非JSのプロセスを実行したい時はありますので、試してみた方法をメモしました。



やりたいこと

 すごく単純なことです。

ローカルのNodeJS環境でLinuxのコマンドを実行する。例えば、lsやpwdなどのコマンド。



環境

  • MacOS 10.15
  • Node v12.16.3
  • npm v6.14


必要なライブラリ

実行中のJavascriptから別のプロセスを作成して、コマンドを実行するやり方ですので、 child_processというライブラリを使います。


導入方法

const {exec} = require('child_process')

上記のように、JSのファイルの先頭に追加すれば、ライブラリの機能を使えるようになります。

今回はexecのみを使用します。

他の機能はこちらのドキュメントを参照してみてください。



コマンド実行

const {exe} = require('child_process')

exec('ls -lh', (error, stdout, stderr) => {
    if (error) {
        console.error(`exec error: ${error}`);
        return;
    }
    console.log(`stdout: ${stdout}`);
    console.error(`stderr: ${stderr}`);
})

上記のcmd.jsファイルを作成して、ターミナルを起動し同じパスに指定して、node ./cmd.jsコマンドで実行した結果はこうなります。

hechengyude-MacBook-Pro:script chengyu$ node ./cmd.js
stdout: total 16
-rw-r--r--  1 chengyu  staff   614B  5 20 15:44 cmd.js
-rw-r--r--  1 chengyu  staff   984B  5 11 19:05 md.js

stderr:


感想

Linuxのコマンドを実行できるようになったら、実際に運用できるシーンを考えてみました。

  • 外部のPython、PHPなどの処理を実行するは可能
  • ウェブサイトをデプロイする時に、ワークフローを設定して、コマンドで特定な処理を実行できます。

(実際に自分のサイトでは、.md→.jsonの変換処理もこの方法で対応しています。)

  • Shellと組んでカスタマイズな処理を実行するのは可能