【図解】Node.jsで外部プログラムを実行:迷ったらこのフローチャート
Node.jsで外部プログラムを実行するには、主に2つの方法があります。
child_process.exec()
は、最も簡単でよく使われる方法です。この関数は、コマンドを単一の引数として受け取り、そのコマンドを実行します。コマンドが終了すると、その結果が出力されます。
const child_process = require('child_process');
child_process.exec('ls', (err, stdout, stderr) => {
if (err) {
console.error(err);
return;
}
console.log(stdout);
});
このコードは、現在のディレクトリのファイルリストをコンソールに出力します。
child_process.spawn()
は、より高度な方法で外部プログラムを実行する方法です。この関数は、実行するプログラムの名前とオプションを引数として受け取り、新しい子プロセスを作成します。子プロセスは、Node.jsプロセスとは独立して実行されます。
const child_process = require('child_process');
const ls = child_process.spawn('ls', ['-l']);
ls.stdout.on('data', (data) => {
console.log(data.toString());
});
ls.stderr.on('data', (data) => {
console.error(data.toString());
});
ls.on('close', (code) => {
console.log(`child process exited with code ${code}`);
});
一般的に、child_process.exec()
の方が簡単で使いやすいです。しかし、より多くの制御が必要な場合は、child_process.spawn()
を使う方が良いでしょう。
その他の注意点
- 外部プログラムを実行する前に、そのプログラムがインストールされていることを確認する必要があります。
- セキュリティ上の理由から、信頼できないソースからのプログラムを実行することは避けてください。
Node.jsで外部プログラムを実行するサンプルコード
child_process.exec()を使う
const child_process = require('child_process');
child_process.exec('ls', (err, stdout, stderr) => {
if (err) {
console.error(err);
return;
}
console.log(stdout);
});
child_process.spawn()を使う
const child_process = require('child_process');
const ls = child_process.spawn('ls', ['-l']);
ls.stdout.on('data', (data) => {
console.log(data.toString());
});
ls.stderr.on('data', (data) => {
console.error(data.toString());
});
ls.on('close', (code) => {
console.log(`child process exited with code ${code}`);
});
補足
- 上記のコードは、基本的な例です。実際の使用例では、状況に応じてオプションやエラー処理を追加する必要があります。
Node.jsで外部プログラムを実行するその他の方法
require() を使う
一部のプログラムは、Node.js モジュールとして公開されています。このようなプログラムは、require()
を使って Node.js スクリプトから直接インポートすることができます。
const myProgram = require('my-program');
myProgram.execute('my-command', ['-option1', '-option2']);
クロスプラットフォームツールを使う
Node.js には、さまざまなプラットフォームで動作する外部プログラムを実行するためのクロスプラットフォームツールがいくつか用意されています。
Webブラウザを操作するライブラリを使って、Webブラウザ上で外部プログラムを実行することができます。
システムコールを使う
Node.js は、オペレーティングシステムのシステムコールを使って、外部プログラムを実行することができます。これは、高度な制御が必要な場合に役立ちます。
その他
上記以外にも、Node.js で外部プログラムを実行する方法はいくつかあります。具体的な方法は、実行するプログラムや目的によって異なります。
それぞれの方法の比較
方法 | 利点 | 欠点 |
---|---|---|
child_process.exec() | 簡単、使いやすい | 制御が限られている |
child_process.spawn() | より多くの制御が可能 | やや複雑 |
require() | 一部のプログラムで利用可能 | すべてのプログラムで利用可能とは限らない |
クロスプラットフォームツール | クロスプラットフォームで動作する | セットアップが必要 |
Webブラウザを操作する | Webブラウザ上で実行可能 | ブラウザの互換性に依存する |
システムコール | 高度な制御が可能 | 複雑で習得が難しい |
Node.js で外部プログラムを実行するには、さまざまな方法があります。それぞれの方法には、利点と欠点があります。状況に応じて適切な方法を選択することが重要です。
node.js command exec