Quantcast
Channel: Node.jsタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 8902

Node.js: CLIでユーザの入力をインタラクティブに読み取る3行ぽっきりの実装

$
0
0

Node.jsでCLIアプリケーションを作る際に、インタラクティブなプロンプトを出して、ユーザのテキスト入力を受け取る実装を紹介する。

この実装は3行で済み、外部ライブラリを必要としない。

デモ

こんな感じで、ターミナルにタイプした文字をNode.jsで受け取るものを実装する。

2019-11-21 16-35-56.2019-11-21 16_36_49.gif

実装

上でのデモの完全な実装は次のコードになる:

functionreadText(){process.stdin.resume()returnnewPromise(r=>process.stdin.once('data',r)).finally(()=>process.stdin.pause())}(asyncfunctionmain(){process.stdout.write('> ')process.stdout.write('< '+awaitreadText())process.stdout.write('> ')process.stdout.write('< '+awaitreadText())})()

このうち、ユーザ入力を受け取るコアの部分は次の3行:

process.stdin.resume()newPromise(r=>process.stdin.once('data',r)).finally(()=>process.stdin.pause())
  • 1行目のresumeで標準入力の受付を再開する。
    • どこかの処理ですでにpauseしていた場合に再開しないと2行目が動かないため。
  • 2行目で標準入力を1回だけ受け取る。
  • 3行目のpauseで標準入力の受け付けを停止する。
    • ずっと受け付けっぱなしなると、CLIのプロセスが終了しないため。

Viewing all articles
Browse latest Browse all 8902

Trending Articles