Node.jsでコマンドラインバイナリを実行する:3つの主要な方法
Node.js でコマンドラインバイナリを実行する
この解説では、Node.js を使ってコマンドラインバイナリを実行する方法について、いくつかの方法を紹介します。
child_process モジュール
Node.js の child_process
モジュールは、子プロセスを生成してコマンドを実行するための機能を提供します。
const { exec } = require('child_process');
// ls コマンドを実行
exec('ls', (err, stdout, stderr) => {
if (err) {
console.error(err);
return;
}
console.log(stdout);
});
この例では、exec
関数を使って ls
コマンドを実行しています。exec
関数は、コマンド名とオプション、そしてコールバック関数を引数として受け取ります。
コールバック関数は、エラー情報、標準出力、標準エラーの3つの引数を受け取ります。エラーが発生した場合は、エラー情報が出力されます。エラーが発生しなかった場合は、標準出力と標準エラーが出力されます。
spawn モジュール
child_process
モジュールの spawn
関数は、より細かい制御が必要な場合にコマンドを実行するための機能を提供します。
const { spawn } = require('child_process');
// ls コマンドを実行
const ls = spawn('ls', ['-lh']);
ls.stdout.on('data', (data) => {
console.log(data.toString());
});
ls.stderr.on('data', (data) => {
console.error(data.toString());
});
ls.on('close', (code) => {
console.log(`終了コード: ${code}`);
});
オプションオブジェクトでは、標準入力、標準出力、標準エラーの処理方法などを指定できます。
この例では、標準出力と標準エラーをそれぞれ data
イベントで処理し、終了コードを close
イベントで処理しています。
const pty = require('node-pty');
// ls コマンドを実行
const term = pty.spawn('ls', ['-lh']);
term.on('data', (data) => {
console.log(data.toString());
});
term.on('exit', (code) => {
console.log(`終了コード: ${code}`);
});
この例では、node-pty
モジュールの spawn
関数を使って ls
コマンドを実行しています。
オプションオブジェクトでは、擬似端末のサイズやエンコーディングなどを指定できます。
Node.js では、child_process
モジュール、spawn
モジュール、node-pty
モジュールなどのライブラリを使ってコマンドラインバイナリを実行できます。
それぞれのモジュールには異なる特徴があるので、実行したいコマンドや必要な機能に合わせて適切なモジュールを選択する必要があります。
child_process モジュール
const { exec } = require('child_process');
// ls コマンドを実行
exec('ls', (err, stdout, stderr) => {
if (err) {
console.error(err);
return;
}
console.log(stdout);
});
spawn モジュール
const { spawn } = require('child_process');
// ls コマンドを実行
const ls = spawn('ls', ['-lh']);
ls.stdout.on('data', (data) => {
console.log(data.toString());
});
ls.stderr.on('data', (data) => {
console.error(data.toString());
});
ls.on('close', (code) => {
console.log(`終了コード: ${code}`);
});
node-pty モジュール
const pty = require('node-pty');
// ls コマンドを実行
const term = pty.spawn('ls', ['-lh']);
term.on('data', (data) => {
console.log(data.toString());
});
term.on('exit', (code) => {
console.log(`終了コード: ${code}`);
});
コマンドラインバイナリを実行するその他の方法
サードパーティライブラリ
以下のサードパーティライブラリを使用して、コマンドラインバイナリを実行することができます。
これらのライブラリは、それぞれ異なる機能や特徴を持っているので、利用する目的や環境に合わせて選ぶと良いでしょう。
直接実行
Node.js の require
関数を使って、コマンドラインバイナリを直接実行することもできます。
const ls = require('ls');
ls('-lh');
この例では、ls
コマンドを直接実行しています。ただし、この方法はすべてのバイナリで使えるわけではありません。また、バイナリのパスやオプションの指定方法も複雑になる場合があります。
スクリプトファイル
コマンドラインバイナリを呼び出すスクリプトファイルを作成して、Node.js から実行することもできます。
const child_process = require('child_process');
const script = './my-script.sh';
child_process.execFile(script, (err, stdout, stderr) => {
if (err) {
console.error(err);
return;
}
console.log(stdout);
});
この例では、my-script.sh
というスクリプトファイルを実行しています。スクリプトファイルには、コマンドラインバイナリの呼び出しコマンドなどを記述します。
この方法は、複雑なコマンドを実行する場合や、複数のコマンドをまとめて実行する場合に便利です。
Node.js でコマンドラインバイナリを実行するには、いくつかの方法があります。それぞれの方法には異なる特徴があるので、実行したいコマンドや必要な機能に合わせて適切な方法を選択する必要があります。
javascript ruby node.js