npm コマンドとして使いたい - Node.js

  • 作成日:
  • 最終更新日:2026/02/15

ローカルで作った Node.js プログラムを npm コマンドとして使いたい

ローカルCLI開発では、npm link を使います。

Express.js のアプリの基本ファイルを作成する方法を試してみます。

ディレクトリ構成

  • cli
    • template(Express アプリのテンプレート)
      • ...
    • cli.js
    • package.json
  • ex5app

cli.js

#!/usr/bin/env node

const fs = require('fs/promises');
const path = require('path');

const app_name = process.argv[2];

async function copyDir() {
  if (!app_name) {
    console.error("アプリ名を指定してください");
    process.exit(1);
  }

  // CLIのあるディレクトリ基準
  const templatePath = path.join(__dirname, 'template');

  // 実行した場所基準
  const targetPath = path.join(process.cwd(), app_name);

  const jsonPath = path.join(targetPath, 'package.json');

  await fs.cp(templatePath, targetPath, { recursive: true });

  const packageJson = {
    name: app_name,
    version: "0.0.0",
    private: true,
    scripts: {
      start: "node ./bin/www"
    },
    dependencies: {
      "cookie-parser": "~1.4.4",
      "debug": "~2.6.9",
      "ejs": "^4.0.1",
      "express": "^5.0.3",
      "http-errors": "~1.6.3",
      "morgan": "^1.10.1"
    }
  };

  await fs.writeFile(
    jsonPath,
    JSON.stringify(packageJson, null, 2),
    'utf8'
  );

  console.log('アプリ作成完了');
}

copyDir();

cli.js のファイルの先頭に「 #!/usr/bin/env node 」を記述します。

package.json

{
  "name": "genapp",
  "version": "1.0.0",
  "bin": {
    "genapp": "./cli.js"
  }
}

「 cli 」のディレクトリでnpm linkコマンドを実行します。

「 ex5app 」ディレクトリに移動し、以下のコマンドを実行します。

# genapp アプリ名
genapp myapp

「 template 」ディレクトリを引数に指定した名前に変更し、コマンドを実行した場所にディレクトリをコピーします。

npm link の削除

グローバル登録した自分の CLI を削除するには、プロジェクト内(cli ディレクトリ内)で以下のコマンドを実行します。

# npm unlink -g パッケージ名
npm unlink -g genapp