Node.js - イベント:初めてのガイド
こんにちは、未来のNode.jsの魔法使いさんたち!今日は、Node.jsのイベントの世界への興味深い旅を始めましょう。コードを書いたことがない人も心配しないでください - 私はあなたの親切なガイドとして、一緒にこのトピックをステップバイステップで探求します。で、コーヒー(または、あなたの好み次第でティー)を飲みながら、一緒に潜りましょう!
Node.jsでのイベントとは?
本題に入る前に、簡単な類似点から始めましょう。パーティ(もちろんNode.jsのパーティです!)にいると imagine してみてください。友達と話していると、突然誰かが叫びます、「ピザが来たぞ!」その叫びはイベントで、あなたの反応 - 例えば、ピザを取りに走ること - はそのイベントを処理する方法です。
Node.jsでのイベントも同様に動作します。プログラム内で起こることですし、これらのイベントが発生したときに特定の反応(「リスナー」と呼びます)を設定することができます。
EventEmitterクラス
Node.jsのイベントの中心には、EventEmitter
クラスがあります。これをパーティのホストと考え、アナウンス(イベントの発行)を叫び、ピザ(または他のイベント)の情報を受け取るすべての人にメッセージを伝える責任があるとしましょう。
自分でEventEmitterを作成する方法を見てみましょう:
const EventEmitter = require('events');
// 新しいEventEmitterオブジェクトを作成
const myEmitter = new EventEmitter();
このコードでは、まずevents
モジュールをインポートし、EventEmitterクラスにアクセスします。その後、myEmitter
という名前の新しいEventEmitterインスタンスを作成します。このmyEmitter
オブジェクトは、イベントを発行し、リスンすることができます。
イベントの発行と処理
EventEmitterを手に入れたので、その使い方を学びましょう。まずは最も重要な2つのメソッド:on()
とemit()
から始めます。
on()
メソッド
on()
メソッドは、イベントにリスナー関数を追加します。友達に「ピザが来たら教えて」と言うのに似ています。
以下のように使用します:
myEmitter.on('pizzaArrived', () => {
console.log('やった!ピザが来た!');
});
この例では、myEmitter
に'pizzaArrived'というイベントをリスンするように指示しています。このイベントが発生すると、指定した関数が実行され、コンソールにメッセージが表示されます。
emit()
メソッド
emit()
メソッドは、イベントをトリガーします。パーティで「ピザが来た!」と叫ぶのに似ています。
以下のように使用します:
myEmitter.emit('pizzaArrived');
この行が実行されると、'pizzaArrived'イベントがトリガーされ、このイベントにリスンしているすべてのリスナー関数が実行されます。
以下にすべてをまとめます:
const EventEmitter = require('events');
const myEmitter = new EventEmitter();
myEmitter.on('pizzaArrived', () => {
console.log('やった!ピザが来た!');
});
myEmitter.emit('pizzaArrived');
// 出力: やった!ピザが来た!
このコードを実行すると、メッセージがコンソールに表示されます。おめでとうございます!あなたは初めてのNode.jsイベントを作成し、処理しました!
イベントに引数を渡す
時々、イベントに追加の情報を渡したい場合があります。例えば、どの種類のピザが来たかを指定したい場合です。引数をemit()
メソッドに渡すことでこれができます:
const EventEmitter = require('events');
const myEmitter = new EventEmitter();
myEmitter.on('pizzaArrived', (type) => {
console.log(`やった!${type}のピザが来た!`);
});
myEmitter.emit('pizzaArrived', 'ペッパー');
// 出力: やった!ペッパーのピザが来た!
この例では、'ペッパー'という引数をイベント発行時に渡しています。リスナー関数はこの引数を使用することができます。
複数のリスナー
同じイベントに複数のリスナーを追加することができます。例えば、パーティの違う人たちがピザの到着に異なる反応を示すとします:
const EventEmitter = require('events');
const myEmitter = new EventEmitter();
myEmitter.on('pizzaArrived', () => {
console.log('人物1: 盛り上がるプレートを準備する!');
});
myEmitter.on('pizzaArrived', () => {
console.log('人物2: 飲み物を注ぐ!');
});
myEmitter.on('pizzaArrived', () => {
console.log('人物3: 音楽をかけよう!');
});
myEmitter.emit('pizzaArrived');
// 出力:
// 人物1: 盛り上がるプレートを準備する!
// 人物2: 飲み物を注ぐ!
// 人物3: 音楽をかけよう!
このコードを実行すると、すべての反応がコンソールに表示されます。リスナーは登録された順に呼び出されます。
単回リスナー
時々、イベントを一度だけリスンしたい場合があります。そのためにはonce()
メソッドを使用します。例えば、「最初のピザが来たら教えてくれ、その後は必要ない」と言うのに似ています。
以下のように使用します:
const EventEmitter = require('events');
const myEmitter = new EventEmitter();
myEmitter.once('pizzaArrived', () => {
console.log('最初のピザが到着した!');
});
myEmitter.emit('pizzaArrived');
// 出力: 最初のピザが到着した!
myEmitter.emit('pizzaArrived');
// 出力: なし
この例では、リスナーが一度実行された後は削除されるため、二回目のemit()
は何も出力しません。
エラーエベント
Node.jsでは、特別なイベント「error」があります。エラーエベントが発行され、それに対するリスナーが存在しない場合、Node.jsはスタックトレースを表示し、プログラムを終了します。エラーリスナーを用意することが常に良い習慣です:
const EventEmitter = require('events');
const myEmitter = new EventEmitter();
myEmitter.on('error', (err) => {
console.error('あやまち!何かが間違った:', err);
});
myEmitter.emit('error', new Error('ピザのオーブンが壊れた!'));
// 出力: あやまち!何かが間違った: Error: ピザのオーブンが壊れた!
リスナーの削除
もはやイベントをリスンしたくない場合、removeListener()
メソッドを使用してリスナーを削除することができます:
const EventEmitter = require('events');
const myEmitter = new EventEmitter();
function pizzaHandler() {
console.log('ピザの時間!');
}
myEmitter.on('pizzaArrived', pizzaHandler);
myEmitter.emit('pizzaArrived');
// 出力: ピザの時間!
myEmitter.removeListener('pizzaArrived', pizzaHandler);
myEmitter.emit('pizzaArrived');
// 出力: なし
このコードでは、リスナー関数を削除した後、イベントが発生しても何も出力されません。
EventEmitterメソッドのまとめ
ここでカバーした主要なメソッドを以下の表にまとめます:
メソッド | 説明 |
---|---|
on(eventName, listener) |
指定されたイベントにリスナー関数を追加 |
emit(eventName[, ...args]) |
指定されたイベントをトリガー、オプションで引数を渡す |
once(eventName, listener) |
指定されたイベントに一度だけリスナー関数を追加 |
removeListener(eventName, listener) |
指定されたイベントから特定のリスナーを削除 |
removeAllListeners([eventName]) |
すべてのリスナーを削除、または指定されたイベントのリスナーを削除 |
それでは、Node.jsのイベントの世界への第一歩を踏み出しました。練習することが完璧を達成する鍵です。これらの概念で自分自身のイベントを作成してみてください。単純なゲームやチャットアプリケーションなど、さまざまな用途に試してみてください。
Node.jsの旅を続ける中で、イベントは反応性が高く、イベント駆動型のアプリケーションを構築するための強力なツールとなります。多くのNode.jsアプリケーションやライブラリで広く使用されていますので、これを理解することで将来のプロジェクトで大いに役立ちます。
codingを続け、学び続け、そして最も重要なのは、楽しむことです!そして、コード也好、ピザ也好、友達と共有する方が常に良いことを忘れないでください。ハッピーノード.jsライフ!
Credits: Image by storyset