イベントドリブン いべんとどりぶん
簡単に言うとこんな感じ!
「何かが起きたら動く」仕組みのことだよ!注文が入ったら在庫を減らす・メールが届いたら通知を送る、みたいに「出来事(イベント)」をきっかけに処理が走るんだ。ずっと待ち構えてるんじゃなくて、呼ばれたら動くイメージ!
イベントドリブンとは
イベントドリブン(Event-Driven) とは、「特定の出来事(イベント)が発生したことをきっかけに処理を開始する」設計思想・アーキテクチャのことです。「イベント駆動」とも呼ばれます。従来型のシステムが「順番通りに処理を実行していく」方式だとすれば、イベントドリブンは「何かが起きたときだけ動く」方式です。
たとえば、ECサイトで「注文確定」というイベントが発生した瞬間に、在庫の更新・配送手配・購入確認メールの送信がそれぞれ自動的に動き出す、といったイメージです。各処理は互いに独立しており、「注文確定」というイベントに反応して動きます。
近年のクラウドやサーバーレスの普及とともに、イベントドリブンは非常に重要な設計パターンになっています。AWS Lambda や Azure Functions のようなサーバーレス基盤は、まさにイベントドリブンを前提として設計されており、「ファイルがアップロードされたら」「APIが呼ばれたら」などのイベントを起点に関数が実行されます。
イベントドリブンの構造と仕組み
イベントドリブンの仕組みは、大きく3つの登場人物で成り立っています。
| 登場人物 | 役割 | 具体例 |
|---|---|---|
| イベントプロデューサー | イベントを発生させる側 | ユーザーのボタンクリック、ファイルのアップロード、センサーの検知 |
| イベントブローカー | イベントを受け取り、配送する中継役 | Amazon SQS、Apache Kafka、Azure Event Hubs |
| イベントコンシューマー | イベントを受け取って処理する側 | Lambda関数、マイクロサービス、データベース更新処理 |
処理の流れはこうなります。
[何かが起きる] → [イベント発生] → [ブローカーが受け取る] → [コンシューマーが処理]
(入力) (トリガー) (仲介・配送) (実行)
「駆動」って何?語源と覚え方
「ドリブン(driven)」は英語で「〜に動かされる」という意味です。「イベントドリブン」=「イベントに動かされる」、つまりイベントが主役でシステムを動かす、というイメージです。車のエンジンを「何かが回す(drive)」ように、イベントがシステムを回す、と覚えると分かりやすいです。
同期処理との違い
| 観点 | 従来型(同期・逐次処理) | イベントドリブン(非同期) |
|---|---|---|
| 処理のタイミング | 決められた順番で実行 | イベント発生時に実行 |
| 待ち時間 | 前の処理が終わるまで待つ | 並行して動ける |
| 結合度 | 処理間が密に連携している | 処理間が疎(バラバラに独立) |
| 拡張のしやすさ | 難しい(全体を改修しやすい) | 容易(コンシューマーを追加するだけ) |
| 障害の影響範囲 | 連鎖しやすい | 局所化しやすい |
歴史と背景
- 1960〜70年代: GUIのない時代から、OSやハードウェアの割り込み処理(Interrupt)としてイベントドリブンの概念は存在していた
- 1980〜90年代: Windows・Macintoshの登場でGUIが普及。「ボタンをクリックしたら処理が走る」という形でソフトウェア開発にイベントドリブンが浸透
- 2000年代: Webの普及とともに、JavaScriptの非同期処理(クリックイベント、XHRなど)がイベントドリブンの代表例に
- 2010年代: Node.jsが登場し、サーバーサイドでもイベントループ・非同期I/Oが主流になり始める
- 2014年: AWS Lambdaが登場。「イベントがあったときだけ関数を実行する」サーバーレスが普及し、イベントドリブンがアーキテクチャ設計の中心概念へ
- 2020年代: マイクロサービス・クラウドネイティブが標準化し、イベントドリブンアーキテクチャ(EDA)はエンタープライズシステムの主流パターンの一つに
関連するアーキテクチャ・技術との比較
イベントドリブンは単独で使われることもありますが、他のアーキテクチャパターンと組み合わさって使われることがほとんどです。
代表的なイベントの種類
| イベントの種類 | 具体例 |
|---|---|
| ユーザー操作 | ボタンクリック、フォーム送信、ログイン |
| データ変化 | DBレコード更新、ファイルアップロード、在庫変動 |
| 時間トリガー | 毎日0時に集計処理、5分ごとに監視 |
| 外部システム | 決済完了通知、センサーデータ受信、Webhook |
| システム状態 | エラー発生、リソース不足、デプロイ完了 |
関連する規格・RFC
| 規格・仕様 | 内容 |
|---|---|
| CloudEvents v1.0 | イベントデータの共通フォーマット仕様(CNCF策定) |
| AsyncAPI | イベントドリブンAPIの仕様記述フォーマット(OpenAPIのEDA版) |
| AMQP 1.0 | メッセージキューの通信プロトコル標準(RFC 7235相当) |
関連用語
- サーバーレス — サーバー管理不要でイベントドリブンに関数を実行する仕組み
- AWS Lambda — イベントをトリガーに関数を実行するAWSのサーバーレス基盤
- メッセージキュー — イベントを一時的に蓄積・配送するバッファの仕組み
- Pub/Subパターン — イベントの「発行者」と「購読者」を分離する設計パターン
- マイクロサービス — 小さなサービス群をイベントで疎結合につなぐアーキテクチャ
- 非同期処理 — 処理の完了を待たずに次の処理へ進む実行モデル