LoginSignup
9
8

More than 3 years have passed since last update.

Node.jsでキー入力を検知する

Last updated at Posted at 2019-11-08

概要

Node.jsアプリケーションを単体で動かしている時に、押されたキー情報を取得する方法

背景

Node.jsアプリケーションを単体で動かしている場合(コンソールから制御)において、キーの押下をトリガーにキーの状態そのものを取得する方法として, readlineがFirebaseと一緒に使えなかったり、ffiパッケージが入らなかったため。

実装手順

1.npm install keypress でパッケージを導入

今回は keypress - npmを利用します。
ターミナルで下記コマンドを入力してください。

npm install keypress

2. 使ってみる

以外、殆どが公式npmページからのコピペですが、少し補足をしています。

重要なところにコメントを付けているので、そちらをご参考にしてください。

//1. ライブラリを読み込む
var keypress = require('keypress');

//2. keypressを標準入力に設定
// make `process.stdin` begin emitting "keypress" events
keypress(process.stdin);

// 3. keypressイベントの購読を開始
// listen for the "keypress" event
process.stdin.on('keypress', function (ch, key) {

  // 4. key. で入力情報を取得
  console.log('got "keypress"', key);

 //Ctrl + c入力のときの処理
  if (key && key.ctrl && key.name == 'c') {
    process.stdin.pause();
    //強制終了するなら process.stdin.exit();
  }
});

// 5. プロセス実行中のキー入力を拾うように設定
process.stdin.setRawMode(true);
process.stdin.resume();

ご覧の通り、key.nameでキーの名前の取得が出来たり,key.”any key”(上の例だとkey.ctrl)でctrlやshiftが押されているかどうかの判定もできるようです。

最後に

Node.jsの経験がほとんどなく、なんならサーバーサイドの経験がnullに近い状態だったので色々大変でした。
でもこうして触っていると色々できるなぁと思うこともあり、ニコ生コメでLチカさせてみたり、ニコ生コメントではちゅねにネギを振らせてみたりして遊べて色々楽しいなとか思い始めました。今後、もう少し本格的にサーバーサイドもやってみたいなと思います。

もし、不備、誤記、もっといい方法があるよ! などございましたらお気軽にお申し付けください。

参考文献

keypress - npm

9
8
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
8