Vorpal - node.js用のCLIツール開発用フレームワーク
最近、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.