コマンドライン上で入力値の受け取る時に便利な node.js用ライブラリ「prompts」の紹介です。
オプションを付ける代わりに リスト化、入力式にすることも出来ますが、自前で実装するには少々手間が掛かります。
そんな行程を削って楽にコマンドラインアプリが開発できそうなライブラリが「prompts」です。
- コマンドライン上で 入力を受け付けるような処理を簡単に書くことができます

prompts は ' npm
' 又は ' yarn
' を使ってインストールします。また、node.js の バージョンが ' 7.6 以上
' の必要があります。
# npm
npm install --save prompts
# yarn
yarn add prompts
prompts は、特定キーのオブジェクトをラップして対話式の処理を書いていきます。
let question = {
type: "text", // 入力を受け付けるタイプ
name: "myValue", // 変数
message: "promptsの入力テスト" // 入力時に表示させるテキスト
};
// promptsの起動
await prompts(question)
prompts は 非同期処理がベースとなっているので、 ' async
' 関数内で処理を書く必要があります。また、 ' type
' オブジェクトには様々な型が用意されており、入力文字を隠す ' password
'、数値入力専用の ' number
' など 多数用意されています。
用意されている type
- text, number, password, invisible, autocomplete
- confirm, toggle, select, multiselect,
- list, function,

/* 上のGIFのコード */
const prompts = require("prompts"); // ライブラリの読み込み
(async function() {
// 入力を待ち受ける内容
let questions = {
type: "text", // インプットタイプ
name: "myValue", // 変数名
message: "promptsの入力テストです。何か入力してください"
};
// promptsの起動
let response = await prompts(questions);
console.log(response.myValue)
})()
上記の例では 入力項目が1つだけでしたが、オブジェクトを配列で配列内にラップすれば複数の入力項目を指定することが出来ます。

// 上のgifのコード
const prompts = require("prompts");
(async function() {
let question = [
{
type: "text",
name: "val1",
message: "インプット1"
},
{
type: 'number',
name: "val2",
message: "インプット2 *数値のみ"
}
];
let response = await prompts(question);
console.log(response);
})();
' type ' キーに ' select
' を割り当てると 選択形式の入力をさせることができます。また、選択させる項目, 変数は ' choices
' オブジェクト内に記述します。

// 上のgifのコード
const prompts = require("prompts");
(async function() {
let question = [
{
type: "select", // selectタイプ
name: "lang", // 変数名
message: "得意なフレームワークは?",
choices: [
{ title: "Ruby On Rails", value: "ror" },
{ title: "Django", value: "django" },
{ title: "Laravel", value: "laravel" }
]
}
];
let response = await prompts(question);
console.log(response);
})();
上記で紹介した処理以外に 複数選択が可能な ' multiselect
', 入力文字を表示しない ' invisible
' タイプなどが用意されています。
prompts は入力を受け取るライブラリなので、他ライブラリと組み合わせて使うと入力値を受け取る行程が楽になるかもしれません。
ファイルを実行時に引数で処理を渡たすのではなく、対話形式にすることで使いやすいコマンドラインアプリが作れそうです。
GitHub : terkelg/prompts