ラック
Home > ブログ > 記事 > 2018年7月 > Node.jsで対話式のCLIを作成する

Node.jsで対話式のCLIを作成する

カテゴリ: ホームページ,開発環境,Web自作

何かを作るとき、gulpを使う自分用のテンプレのUsusamaを使う際に、jsonのサイト名などのパラメータを直接触るのが面倒になってきました。そこで、こう簡単な対話式のCLIで入力できないかな、と思いました。

なお、こうした対話式の環境をREPL(Read-eval-print loopの略)というそうです。

今回はgulpを使っていることを前提としているので、開発環境はNode.jsが入っているものとします。そのため、Node.jsにならったやり方が一番素直そうです。

ググってみると、readline-syncというライブラリを使うと、ユーザの入力を待機するCLIが簡単に作れるそうです。


//入力待機
var readlineSync = require("readline-sync");
console.log(`サイト名を入力してください。`); //質問表示
input = readlineSync.question(); //入力待ち
//入力完了後の表示メッセージ
console.log(`入力OK! 入力内容: ${input}`);

基本的には、こんな感じです。これに、条件(ブランクを許さないなど)を満たすまで同じ質問を続ける、というループを追加して以下のような感じに。


//入力待機
var readlineSync = require("readline-sync");

var flag = false; //条件を満たすか否か
do { //チェックを通るまで同じ質問をループさせる
    var defaultStr = "Lorem Ipsum";
    console.log(`サイト名を入力してください。 (デフォルト: "${defaultStr}")`); //質問表示
    input = readlineSync.question(); //入力待ち

    //必須チェック
    if(input.length > 0) {
        flag = true;
    }
    else {
        console.log("必須です。入力してください。");
    }
} while(!flag);
//入力完了後の表示メッセージ
console.log(`入力OK! 入力内容: ${input}`);

最後に、ファイルへの書き込みを追加すれば、基本的な構造は出来上がりです。


//ファイル操作
var fs = require("fs");
//入力待機
var readlineSync = require("readline-sync");

//jsonファイル読み込み、jsのオブジェクトの形で持つ
var data = JSON.parse(fs.readFileSync("./PATH/TO/FILE.json", { encoding: "UTF-8" }));

var flag = false; //条件を満たすか否か
do { //チェックを通るまで同じ質問をループさせる
    var defaultStr = "Lorem Ipsum";
    console.log(`サイト名を入力してください。 (デフォルト: "${defaultStr}")`); //質問表示
    input = readlineSync.question(); //入力待ち

    //必須チェック
    if(input.length > 0) {
        flag = true;
    }
    else {
        console.log("必須です。入力してください。");
    }
} while(!flag);

//入力完了後の表示メッセージ
console.log(`入力OK! 入力内容: ${input}`);

//jsonデータのパラメータを入力内容で上書き
data.parameter = input;
//jsonフォーマットの文字列にしてファイルに書き込み
fs.writeFileSync("./PATH/TO/FILE.json", JSON.stringify(data , false, "\t"));

後はこれをループで繰り返したり、エラーチェックしたりといった肉付けをしていくことで、対話式なCLIでjsonの内容を書き換えるJavaScriptが完成です。

このjsをキックするには、例えばプロジェクトのルートディレクトリに「cli.js」という名前で作成したならばnode cliとすればキックして意図した操作を行うことができます。

参考

タグ: javascript,KiribiUsusama,Node.js

 



関連する記事一覧