🍬

Commander.js でサブコマンドを定義する

2023/05/27に公開

Commander.jsというCLIを作るためのライブラリで git における clone ようなサブコマンドを定義する方法について簡単にまとめておきます。
結局は 公式ドキュメントの Commandsの節に書いてることが全てなのですが、日本語で明示的な情報がなかったので、紹介しておきます。

.ts ファイルを以下のように記述すればOKです。
基本は公式ドキュメントのとおりですが、TypeScriptのファイルとして完全な形になるように、省略されている部分と、2つ以上のサブコマンドを定義する方法を盛り込んであります。

import { program } from 'commander'

program.name('mygit').version('1.0.0')

program
  .command('clone <source> [destination]')
  .description('clone a repository into a newly created directory')
  .action((source, destination) => {
    console.log('clone command called');
  });

program
  .command('pull')
  .description('Fetch from and integrate with another repository or a local branch')
  .action((source, destination) => {
    console.log('pull command called');
  });

program.parse(process.argv)

余談ですが、actionにはasync関数を渡すことができるようです。

呼び出し方は、コンパイル方法にもよりますが、ts-nodeを使うなら以下のようになるはずです。

ts-node mygit.ts clone https://github.com/tj/commander.js.git ./commander-js

Discussion