Skip to content

Node.js イベントエミッタ

ブラウザで JavaScript を使ったことがあるなら、ユーザーとのインタラクションの多くがイベントによって処理されることを知っているでしょう。マウスのクリック、キーボードのボタン押下、マウスの動きへの反応などです。

バックエンド側では、Node.js は**events モジュール** を使用して同様のシステムを構築するオプションを提供します。

このモジュールは特に、EventEmitter クラスを提供しており、これを使用してイベントを処理します。

初期化は以下のように行います。

js
import EventEmitter from 'node:events'
const eventEmitter = new EventEmitter()

このオブジェクトは、その他多くのメソッドの中で、onメソッドとemitメソッドを公開しています。

  • emitはイベントをトリガーするために使用されます
  • onは、イベントがトリガーされたときに実行されるコールバック関数を追加するために使用されます

例えば、「start」イベントを作成し、サンプルとしてコンソールへのログ出力で反応してみましょう。

js
eventEmitter.on('start', () => {
  console.log('started')
})

以下を実行すると

js
eventEmitter.emit('start')

イベントハンドラ関数がトリガーされ、コンソールログが出力されます。

emit()に追加の引数を渡すことで、イベントハンドラに引数を渡すことができます。

js
eventEmitter.on('start', number => {
  console.log(`started ${number}`)
})
eventEmitter.emit('start', 23)

複数の引数:

js
eventEmitter.on('start', (start, end) => {
  console.log(`started from ${start} to ${end}`)
})
eventEmitter.emit('start', 1, 100)

EventEmitter オブジェクトは、イベントを操作するための他のいくつかのメソッドも公開しています。例えば、

  • once(): 一回限りのリスナーを追加します
  • removeListener() / off(): イベントからイベントリスナーを削除します
  • removeAllListeners(): イベントのすべてのリスナーを削除します

これらのメソッドの詳細については、events モジュールのドキュメントを参照してください。