prompts : node.js用のコマンドラインからの値を受け取る時に便利なライブラリ



コマンドライン上で入力値の受け取る時に便利な node.js用ライブラリ「prompts」の紹介です。

オプションを付ける代わりに リスト化、入力式にすることも出来ますが、自前で実装するには少々手間が掛かります。

そんな行程を削って楽にコマンドラインアプリが開発できそうなライブラリが「prompts」です。


prompts で出来ること 

- コマンドライン上で 入力を受け付けるような処理を簡単に書くことができます

* prompts 上で数値の入力を受付 


prompts のインストール

 prompts は ' npm ' 又は ' yarn ' を使ってインストールします。また、node.js の バージョンが  ' 7.6 以上 ' の必要があります。 

# npm
npm install --save prompts
# yarn
yarn add prompts


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つだけでしたが、オブジェクトを配列で配列内にラップすれば複数の入力項目を指定することが出来ます。

* 2つめの入力項目は 数値のみを受け付けるように指定しています

// 上の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);
})();

 

Summary

 上記で紹介した処理以外に 複数選択が可能な ' multiselect ', 入力文字を表示しない ' invisible ' タイプなどが用意されています。

 prompts は入力を受け取るライブラリなので、他ライブラリと組み合わせて使うと入力値を受け取る行程が楽になるかもしれません。

ファイルを実行時に引数で処理を渡たすのではなく、対話形式にすることで使いやすいコマンドラインアプリが作れそうです。

GitHub : terkelg/prompts

 

この記事のカテゴリ
プログラミング

この記事に付けられているタグ