サーバーレス

イベントドリブン いべんとどりぶん

イベントトリガー非同期処理サーバーレスメッセージキューリアクティブ
イベントドリブンについて教えて

簡単に言うとこんな感じ!

「何かが起きたら動く」仕組みのことだよ!注文が入ったら在庫を減らす・メールが届いたら通知を送る、みたいに「出来事(イベント)」をきっかけに処理が走るんだ。ずっと待ち構えてるんじゃなくて、呼ばれたら動くイメージ!


イベントドリブンとは

イベントドリブン(Event-Driven) とは、「特定の出来事(イベント)が発生したことをきっかけに処理を開始する」設計思想・アーキテクチャのことです。「イベント駆動」とも呼ばれます。従来型のシステムが「順番通りに処理を実行していく」方式だとすれば、イベントドリブンは「何かが起きたときだけ動く」方式です。

たとえば、ECサイトで「注文確定」というイベントが発生した瞬間に、在庫の更新・配送手配・購入確認メールの送信がそれぞれ自動的に動き出す、といったイメージです。各処理は互いに独立しており、「注文確定」というイベントに反応して動きます。

近年のクラウドやサーバーレスの普及とともに、イベントドリブンは非常に重要な設計パターンになっています。AWS LambdaAzure 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)はエンタープライズシステムの主流パターンの一つに

関連するアーキテクチャ・技術との比較

イベントドリブンは単独で使われることもありますが、他のアーキテクチャパターンと組み合わさって使われることがほとんどです。

イベントドリブンと関連アーキテクチャの関係 イベント ドリブン サーバーレス Lambda / Functions マイクロ サービス メッセージ キュー (SQS/Kafka) Pub/Sub パターン ストリーム処理 Kinesis / Kafka Streams トリガーで実行 疎結合で連携 イベント配送 発行/購読 連続イベント処理

代表的なイベントの種類

イベントの種類具体例
ユーザー操作ボタンクリック、フォーム送信、ログイン
データ変化DBレコード更新、ファイルアップロード、在庫変動
時間トリガー毎日0時に集計処理、5分ごとに監視
外部システム決済完了通知、センサーデータ受信、Webhook
システム状態エラー発生、リソース不足、デプロイ完了

関連する規格・RFC

規格・仕様内容
CloudEvents v1.0イベントデータの共通フォーマット仕様(CNCF策定)
AsyncAPIイベントドリブンAPIの仕様記述フォーマット(OpenAPIのEDA版)
AMQP 1.0メッセージキューの通信プロトコル標準(RFC 7235相当)

関連用語

  • サーバーレス — サーバー管理不要でイベントドリブンに関数を実行する仕組み
  • AWS Lambda — イベントをトリガーに関数を実行するAWSのサーバーレス基盤
  • メッセージキュー — イベントを一時的に蓄積・配送するバッファの仕組み
  • Pub/Subパターン — イベントの「発行者」と「購読者」を分離する設計パターン
  • マイクロサービス — 小さなサービス群をイベントで疎結合につなぐアーキテクチャ
  • 非同期処理 — 処理の完了を待たずに次の処理へ進む実行モデル