概要
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チカさせてみたり、ニコ生コメントではちゅねにネギを振らせてみたりして遊べて色々楽しいなとか思い始めました。今後、もう少し本格的にサーバーサイドもやってみたいなと思います。
もし、不備、誤記、もっといい方法があるよ! などございましたらお気軽にお申し付けください。