ITエンジニア/デザイナ向けにオープンソースを毎日紹介

最近、nodeでCLIツールを書くことも増えてきました。単純に実行するだけなら簡単ですが、オプションをつけたり、ヘルプやパイプでの実行などCLIに欲しい機能を考えると色々面倒になります。

そこで使ってみたいのがCLIツールを作るためのフレームワークです。node向けにVorpalを紹介します。

Vorpalの使い方

まずはコマンドラインオプションをつける場合です。これだけで-b/-tオプションが使えるようになります。

const vorpal = require('vorpal')();

vorpal
  .command('say [words...]')
  .option('-b, --backwards')
  .option('-t, --twice')
  .action(function (args, callback) {
    let str = args.words.join(' ');
    str = (args.options.backwards) ?
      str.split('').reverse().join('') :
      str;
    this.log(str);
    callback();
  });

以下はパイプを使う方法です。

const vorpal = require('vorpal')();

vorpal
  .command('say [words...]')
  .action(function (args, cb) {
    this.log(args.words.join(' '));
    cb();
  });

vorpal
  .command('reverse [words...]')
  .action(function (args, cb) {
    this.log(args.stdin.split('').reverse().join(''));
    cb();
  });

vorpal
  .command('color [color] [text...]')
  .action(function (args, cb) {
    this.log(vorpal.chalk[args.color](args.stdin));
    cb();
  });

さらにユーザ入力を待つ方法。

vorpal
  .command('order pizza')
  .option('--anchovies')
  .action(function (args, cb) {
    const self = this;
    this.prompt({
      type: 'input',
      name: 'time',
      message: 'When would you like your pizza?',
    }, function (result) {
      self.log(`Okay, ${result.time} it is!`);
      cb();
    });
  });

最後に補完入力のサポートです。

const foods = ['burgers', 'chinese', 'pizza', 'sushi'];
const methods = ['a la carte', 'table d\'hote'];
const commandHelp = 'Order a type of food';
const optionHelp = 'How you want your meal served';

vorpal
  .command('order ', commandHelp)
  .option('--method [method]', optionHelp, methods)
  .autocomplete(foods)
  .action(function (args, cb) {
    const food = args.food;
    const method = args.options.method;
    this.log(`You ordered ${food} ${method}.`);
    cb();
  });

Vorpalをベースにすることで多機能で便利なCLIツールができるのではないでしょうか。他の言語にも同様のツールがありますが、node向けであればVorpalを使うのが良さそうです。

Vorpalはnode/JavaScript製のオープンソース・ソフトウェア(MIT License)です。

Vorpal

dthree/vorpal: Node's framework for interactive CLIs.

 

MOONGIFTの関連記事

コメント

  • MOONGIFTプレミアム
  • Mobile Touch