event-driven について
イベント駆動アーキテクチャを採用する開発者向けに、イベントソーシング、CQRS、Saga、イベントバスなどのパターンを紹介する資料です。状態の再構築、分散トランザクションの調整、KafkaやSymfonyの例を含みます。
主な機能
- 01イベントソーシングと状態の再構築
- 02CQRSによる読み書きモデルの分離
- 03Sagaのオーケストレーションとコレオグラフィー
- 04Kafkaイベントバスの例
- 05Symfonyドメインイベントの例
活用シーン
- 01イベントログからアプリケーション状態を再構築
- 02読み取りモデルと書き込みモデルを分離
- 03マイクロサービス間の分散トランザクションを調整
- 04イベントを通じたドメイン処理の実行
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ thebeardedbearsas/ claude-craft --skill event-drivenインストール後、Claude Code で/event-drivenを入力して読み込まれたか確認します。
詳細
イベント駆動 — イベントソーシング、Saga、CQRS
疎結合とスケーラビリティを実現するイベント駆動型アーキテクチャです。
パターン
イベントソーシング — 状態ではなくイベントを保存します(監査、リプレイ)
CQRS — 読み取り/書き込みモデルを分離します(プロジェクション)
Saga — 分散トランザクションです(マイクロサービス)
イベントバス — 疎結合な Pub/Sub です(Kafka、RabbitMQ)
イベントソーシング
events = [OrderCreated(...), OrderPaid(...), OrderShipped(...)]
def rebuild(events):
state = {}
for e in events: state = apply(state, e)
return state
Saga — コレオグラフィーとオーケストレーション
コレオグラフィー — イベントがサービス間を連鎖します(疎結合、デバッグが困難)
オーケストレーション — 中央のコーディネーターが制御します(可視性が高く、結合度が高い)
Choreo: OrderCreated → Payment → Shipping
Orchestrator: ProcessPayment() → ShipOrder()
Kafka イベントバス
// Producer
producer.send({ topic: 'orders', messages: [{ ... }] });
// Consumer
consumer.run({
eachMessage: async ({ message }) => {
handleEvent(JSON.parse(message.value));
}
});
ドメインイベント(Symfony)
class OrderCreatedEvent {
public function __construct(public Order $order) {}
}
class SendEmail {
public function __invoke(OrderCreatedEvent $e) {
$this->mailer->send($e->order->email, 'Confirmation');
}
}
@.claude/rules/21-cqrs.md、@.claude/skills/async/SKILL.md を参照してください。
コメント
Markdown 対応