😄

Commanderを使ってCLIツールを作ってみるメモ

に公開

Commanderを使ってCLIツールを作ってみるメモ

Commanderというライブラリを使用すると、簡単にCLIツールが作れる。今回は引数に入力したライブラリをインストールするCLIツールを実装してcommanderに慣れることを目標とする。

child_processモジュールを使用することでサブプロセスでコマンドを実行することができるので内部で使用する。

プロジェクトの準備

前提条件

TypeScriptプロジェクトがすでに作成済み

実装

  • command("コマンド名") - コマンド名を登録する
  • description("説明") - コマンドの説明
  • argument() - コマンドの引数を指定する
    • <引数名> - 必須の引数
    • [引数名] - オプションの引数
    • 今回のように最後に...をつけると可変長引数になり、入力した引数をactionメソッド内で配列で取得できる。

commanderの各メソッドがわかりやすいシンプルな名前なので簡単に使える

import { execSync } from "child_process";
import { Command } from "commander";

export const installCommand = new Command()
  .command("install")
  .description("install packages")
  .argument("<targets...>")
  .action((targets: string[]) => {
    targets.forEach(async (target) => {
      console.log(`npm install ${target}`)
      execSync(`npm install ${target}`)
      console.log(`✅ npm install ${target}`)
    })
  });
  • addCommandでコマンドを登録することができる
import { program } from "commander";
import { installCommand } from "./commands/install";

program.addCommand(installCommand);

program.parse(process.argv)

コマンドのヘルプを表示したらちゃんと反映されている

Commands:
  install <targets...>  install packages
  help [command]        display help for command

参考

最後に

間違っていることあればコメントに書いていただけると幸いです。
よろしくお願いいたします。

GitHubで編集を提案

Discussion