もう迷わない!Node.jsコマンドライン:スクリプト内の関数を使いこなす最強テクニック

2024-04-02

Node.jsでコマンドラインからスクリプト内の関数を呼び出す方法

このチュートリアルでは、Node.jsでコマンドラインからスクリプト内の関数を呼び出す方法について解説します。

準備

以下のものが必要です。

  • Node.jsがインストールされていること
  • テキストエディタ

手順

  1. 新しいディレクトリを作成し、そこにindex.jsという名前のファイルを作成します。
  2. 以下のコードをindex.jsファイルに保存します。
// 関数を定義
function hello() {
  console.log('Hello, world!');
}

// コマンドライン引数を取得
const args = process.argv.slice(2);

// コマンドライン引数に基づいて関数を呼び出す
if (args[0] === 'hello') {
  hello();
} else {
  console.log('Usage: node index.js hello');
}
  1. コマンドラインで以下のコマンドを実行してスクリプトを実行します。
node index.js hello
  1. コンソールに以下の出力が表示されます。
Hello, world!

解説

上記のコードでは、以下の処理が行われています。

  1. hello()という名前の関数を定義します。この関数は、Hello, world!という文字列をコンソールに出力します。
  2. process.argvという変数を使用して、コマンドライン引数を取得します。
  3. コマンドライン引数の最初の要素がhelloかどうかをチェックします。
  4. コマンドライン引数の最初の要素がhelloの場合は、hello()関数を呼び出します。

応用

上記のコードは、コマンドラインからスクリプト内の関数を呼び出す基本的な方法を示しています。この方法を応用することで、様々なコマンドラインツールを作成することができます。

例えば、以下のコードは、コマンドラインからファイルの内容を表示するツールを作成します。

const fs = require('fs');

function cat(filename) {
  fs.readFile(filename, 'utf8', (err, data) => {
    if (err) {
      console.error(err);
      return;
    }
    console.log(data);
  });
}

const args = process.argv.slice(2);

if (args.length === 0) {
  console.log('Usage: node index.js cat <filename>');
  return;
}

cat(args[0]);

このコードは、fsモジュールを使用してファイルを読み込み、その内容をコンソールに出力します。




基本的なサンプル

// 関数を定義
function hello() {
  console.log('Hello, world!');
}

// コマンドライン引数を取得
const args = process.argv.slice(2);

// コマンドライン引数に基づいて関数を呼び出す
if (args[0] === 'hello') {
  hello();
} else {
  console.log('Usage: node index.js hello');
}

ファイルの内容を表示するツール

const fs = require('fs');

function cat(filename) {
  fs.readFile(filename, 'utf8', (err, data) => {
    if (err) {
      console.error(err);
      return;
    }
    console.log(data);
  });
}

const args = process.argv.slice(2);

if (args.length === 0) {
  console.log('Usage: node index.js cat <filename>');
  return;
}

cat(args[0]);

このコードは、fsモジュールを使用してファイルを読み込み、その内容をコンソールに出力するツールです。コマンドライン引数の最初の要素には、読み込むファイル名を指定します。

ユーザー入力を処理するツール

const readline = require('readline');

function askQuestion(question) {
  const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout
  });

  rl.question(question, (answer) => {
    console.log(`Your answer: ${answer}`);
    rl.close();
  });
}

const args = process.argv.slice(2);

if (args.length === 0) {
  console.log('Usage: node index.js ask <question>');
  return;
}

askQuestion(args[0]);

オプションを処理するツール

const yargs = require('yargs');

const options = yargs
  .option('name', {
    alias: 'n',
    description: 'Your name',
    type: 'string'
  })
  .option('age', {
    alias: 'a',
    description: 'Your age',
    type: 'number'
  })
  .argv;

console.log(`Hello, ${options.name}! You are ${options.age} years old.`);

このコードは、yargsモジュールを使用してコマンドラインオプションを処理する例です。nameageという2つのオプションが定義されており、それぞれユーザーの名前と年齢を受け付けます。これらのオプションは、-n-aというエイリアスでも指定できます。

これらのサンプルコードは、Node.jsでコマンドラインからスクリプト内の関数を呼び出す方法を理解するための参考として役立ててください。




コマンドラインからNode.jsスクリプト内の関数を呼び出すその他の方法

サブモジュールとして呼び出す

スクリプト内の関数をサブモジュールとして定義し、別のスクリプトからrequire()を使用して呼び出すことができます。

サブモジュールとして定義するスクリプト (my-module.js)

function hello() {
  console.log('Hello, world!');
}

module.exports = {
  hello
};

サブモジュールを呼び出すスクリプト (index.js)

const myModule = require('./my-module');

myModule.hello();

この方法の利点は、コードを分割して再利用できることです。

NPMパッケージとして公開する

スクリプトをNPMパッケージとして公開し、他のプロジェクトからインストールして使用することができます。

NPMパッケージとして公開するスクリプト (my-package.js)

function hello() {
  console.log('Hello, world!');
}

module.exports = {
  hello
};
const myPackage = require('my-package');

myPackage.hello();

この方法の利点は、他の開発者があなたのスクリプトを簡単に利用できることです。

Webサーバーとして実行する

スクリプトをWebサーバーとして実行し、HTTPリクエストを使用して関数を呼び出すことができます。

const http = require('http');

const server = http.createServer((req, res) => {
  if (req.url === '/hello') {
    res.writeHead(200, {'Content-Type': 'text/plain'});
    res.end('Hello, world!');
  } else {
    res.writeHead(404, {'Content-Type': 'text/plain'});
    res.end('Not Found');
  }
});

server.listen(3000);

この方法の利点は、ブラウザや他のクライアントからスクリプト内の関数を呼び出せることです。

これらの方法は、それぞれ異なる利点と欠点があります。目的に合った方法を選択してください。


javascript node.js command-line


JavaScriptで数値変換を使いこなす!map関数、parseInt関数、Number関数の違い

例えば、以下のコード:このコードを実行すると、resultは[1, NaN, NaN]という結果になります。なぜこのような結果になるのでしょうか?この問題の原因は、parseInt関数が引数として渡された文字列全体を解析しようとする点にあります。...


typeof 演算子と Date.prototype.isDate メソッドを使って日付オブジェクトかどうかを確認する

instanceof 演算子を使う最もシンプルで分かりやすい方法が、instanceof 演算子を使うことです。これは、オブジェクトが特定のクラスのインスタンスかどうかを確認する演算子です。この例では、obj が Date クラスのインスタンスであるため、true が出力されます。...


【これでわかる!】JavaScriptでチェックボックスを自在に操る:クリック、変更、複数選択も

onclick イベントは、ユーザーがチェックボックスをクリックしたときに発生します。このイベントを使用して、チェックボックスの値を取得することができます。上記の例では、checkbox. checked プロパティを使用して、チェックボックスが選択されているかどうかを確認しています。選択されている場合は、checkbox...


JavaScript、Node.js、MariaDB を用いた DevExtreme PivotGrid で数百万件のレコードを取得・表示する

このチュートリアルでは、JavaScript、Node. js、MariaDB を用いて、数百万件のレコードを DevExtreme PivotGrid で効率的に取得・表示する方法について解説します。前提知識このチュートリアルを理解するために、以下の知識が必要です。...


【保存版】npm: --force と --legacy-peer-deps を使いこなして、スムーズなパッケージインストールを実現

Node. js 開発において、パッケージマネージャーである npm は必須ツールです。npm でパッケージをインストールする際、--force と --legacy-peer-deps というオプションが用意されていますが、それぞれの役割と使い分けについて理解が曖昧な場合があるかと思います。...


SQL SQL SQL SQL Amazon で見る



Node.jsプログラムでコマンドライン引数を簡単に扱う! 2つの方法とそれぞれのメリット・デメリット

process. argv プロパティは、Node. jsプログラムが起動された時に渡されたコマンドライン引数をすべて含む配列です。このプロパティを使って、コマンドライン引数にアクセスすることができます。例このコードを実行すると、以下の出力が得られます。