コンソールのソフトウェアで時々メニューを使って選択したりする類のソフトウェアがあります。CUIとは言え、ユーザフレンドリーなUIにするというのは大事なことです。それによって使ってくれるユーザ、嫌がるユーザに分かれてしまうこともあるでしょう。 ということで今回はターミナル上でメニュー表現を実装できるterminal-menuを紹介します。nodeベースで実装されています。 インストールはnpmで行います。

$ npm install terminal-menu

そしてテストコードが次のようになっています。

var menu = require('../')({ width: 29, x: 4, y: 2 });
menu.reset();
menu.write('SERIOUS BUSINESS TERMINAL\n');
menu.write('-------------------------\n');
menu.add('ADD TRANSACTION INVOICE');
menu.add('BUSINESS INTELLIGENCE');
menu.add('ACCOUNTS PAYABLE');
menu.add('LEDGER BOOKINGS');
menu.add('INDICATOR CHART METRICS');
menu.add('BACKUP DATA TO FLOPPY DISK');
menu.add('RESTORE FROM FLOPPY DISK');
menu.add('EXIT');
menu.on('select', function (label) {
    menu.close();
    console.log('SELECTED: ' + label);
});
menu.createStream().pipe(process.stdout);

これを実行した結果が次の画面です。

実行結果。

ちゃんとメニューが出ています。矢印キーで自動してエンターで選択します。

選択結果。

選択された項目が表示されています。

こういった入力待ちの処理に際してはコールバックが基本のJavaScript(node)だと分かりやすく書ける気がします。後は選択肢に従って処理分けしていけば良いだけです。 懐かしいUIではあるのですが、サーバのセットアップをしているとよく見る画面なだけに、今後作られるソフトウェアについても同様の仕組みを使ってユーザビリティを意識して作り込むのに使えるのではないでしょうか。 terminal-menuはnode/JavaScript製のオープンソース・ソフトウェア(MIT License)です。 substack/terminal-menu