Node.js 実践講座 〜基礎編〜 その5

# はじめに
この記事では、標準ライブラリの使用方法の解説の一部をご紹介します。今回はEventEmitterを使用したサンプルプログラムを作成します。

# ワークスペースの作成

下記コマンドでプログラムを格納するディレクトリを新たに作成します。

```
mkdir workspace/js/basic/02-standard-library/04-events
touch workspace/js/basic/02-standard-library/04-events/index.js

cd workspace/js/basic/02-standard-library/04-events
```

# リスナーを登録しない場合

## ソースコード
ソースコードの内容を下記に示します。

```index.js
'use strict';

var events = require('events')

var eventEmitter = new events.EventEmitter()

console.log('1. emit `click` event:')
eventEmitter.emit('click')

console.log('2. emit `dblclick` event:')
eventEmitter.emit('dblclick')

console.log('3. end')

```

## 実行コマンド
実行コマンドを下記に示します。

```
node index.js
```

## 実行結果
実行結果を下記に示します。

```
1. emit `click` event:
2. emit `dblclick` event:
3. end
```

## 解説
`EventEmitter`のオブジェクトを作成するには`new events.EventEmitter()`を記述します。`EventEmitter`の`emit`メソッドはイベントを発行するためのメソッドで、第1引数にはイベント名が指定されます。なお、第2引数以降は後ほど解説するリスナーの引数になります。

# リスナーを登録する場合

## ソースコード
ソースコードの内容を下記に示します。

```index.js
'use strict';

var events = require('events')

var eventEmitter = new events.EventEmitter()

eventEmitter.on('click', function () {
  console.log('click!')
})

console.log('1. emit `click` event:')
eventEmitter.emit('click')

console.log('2. emit `dblclick` event:')
eventEmitter.emit('dblclick')

console.log('3. end')

```

## 実行コマンド
実行コマンドを下記に示します。

```
node index.js
```

## 実行結果
実行結果を下記に示します。

```
1. emit `click` event:
click!
2. emit `dblclick` event:
3. end

```

## 解説
今回は`click`イベントに対してリスナーを登録したので、実行結果に`click!`と表示されるようになりました。リスナーは関数だと思って差し支えないかと考えます。リスナーを登録するには`EventEmitter`オブジェクトの`on`メソッドを使用します。

# 異なるイベントに複数のリスナーを登録する場合

## ソースコード
ソースコードの内容を下記に示します。

```index.js
'use strict';

var events = require('events')

var eventEmitter = new events.EventEmitter()

eventEmitter.on('click', function () {
  console.log('click!')
})

eventEmitter.on('dblclick', function () {
  console.log('double click!')
})

console.log('1. emit `click` event:')
eventEmitter.emit('click')

console.log('2. emit `dblclick` event:')
eventEmitter.emit('dblclick')

console.log('3. end')

```

## 実行コマンド
実行コマンドを下記に示します。

```
node index.js
```

## 実行結果
実行結果を下記に示します。

```
1. emit `click` event:
click!
2. emit `dblclick` event:
double click!
3. end

```

## 解説
`EventEmitter`オブジェクトの`on`メソッドの第1引数として、異なるイベント名を指定することで、異なるイベントに対して、それぞれリスナーを登録することが可能です。

# 同じイベントに複数のリスナーを登録する場合

## ソースコード
ソースコードの内容を下記に示します。

```index.js
'use strict';

var events = require('events')

var eventEmitter = new events.EventEmitter()

eventEmitter.on('click', function () {
  console.log('click!')
})

eventEmitter.on('dblclick', function () {
  console.log('double click!')
})

eventEmitter.on('click', function () {
  console.log('click!!!!!')
})

console.log('1. emit `click` event:')
eventEmitter.emit('click')

console.log('2. emit `dblclick` event:')
eventEmitter.emit('dblclick')

console.log('3. end')

```

## 実行コマンド
実行コマンドを下記に示します。

```
node index.js
```

## 実行結果
実行結果を下記に示します。

```
1. emit `click` event:
click!
click!!!!!
2. emit `dblclick` event:
double click!
3. end

```

## 解説
同じイベントに対して複数のイベントを登録するには`EventEmitter`の`on`メソッドをその数だけ呼び出します。`emit`メソッドでイベントを発行する際、登録されている全てのリスナーに対してイベントが通知されます。

# おわりに
次回は、Node.jsのモジュールの使用方法を学ぶためのサンプルプログラムを作成します。