j5ik2o/okite-ai/pekko-cqrs-es-implementation
Claude Code and agent skill by j5ik2o/okite-ai
- community
Checking that the SKILL.md file is still in the repository.
Apache Pekko + Scala 3によるCQRS/Event Sourcing実装ガイド。 PersistenceEffectorを用いた集約アクター、ドメインモデルとアクターの分離、 状態遷移の型安全な表現、イベント設計、Protocol Buffersシリアライズ、 ZIOベースのユースケース層、リードモデルアップデータの実装パターンを提供する。 対象言語: Scala 3限定。CQRS/Event Sourcingアーキテクチャが前提の場合のみ使用。 トリガー条件: 「Scala」かつ「CQRS」または「Event Sourcing」または「Pekko」が リクエストに含まれる場合のみ起動。Scala以外の言語やCQRS/ES以外のアーキテクチャでは このスキルを使用してはならない。 トリガー:「PekkoでCQRS/ESを実装したい」「Scalaで集約アクターを書きたい」 「PersistenceEffectorの使い方」「Pekkoのイベントソーシング」 「ScalaでCQRSのコマンド側を実装」「Pekkoで状態遷移を管理」 といったPekko + Scala…
Install
npx vskill@latest install j5ik2o/okite-ai/pekko-cqrs-es-implementationSKILL.md
Pekko CQRS/ES 実装ガイド
Apache Pekko + Scala 3でCQRS/Event Sourcingを実装する際の具体的なパターン集。
適用条件
このスキルは以下のすべてを満たす場合にのみ使用する:
- プログラミング言語がScala(3.x推奨)であること
- CQRS/Event Sourcingアーキテクチャを採用していること
- Apache Pekko(またはAkka)をアクターフレームワークとして使用していること
上記を満たさない場合は、cqrs-tradeoffs、cqrs-to-event-sourcing、cqrs-aggregate-modelingなど 言語非依存のスキルを使用すること。
アーキテクチャ概要
システム全体のデータフロー
コマンド側とクエリ側の分離
| コマンド側 | クエリ側 | ||
|---|---|---|---|
| 目的 | ビジネスルール実行 | 効率的なデータ取得 | |
| データストア | DynamoDB(イベントストア) | PostgreSQL(リードモデル) | |
| API | GraphQL Mutation | GraphQL Query | |
| レイヤー | ドメイン → ユースケース → インターフェースアダプタ | インターフェースアダプタのみ | |
| 整合性 | 強い整合性(集約内) | 結果整合性 |
クエリ側にユースケース層はない。 GraphQL自体がユースケースに相当する。
モジュール構成
依存方向
コマンド側実装パターン
1. ドメインモデル
原則: ドメインモデルは純粋なScalaコードで、Pekkoに一切依存しない。
集約(trait + private case class)
重要なパターン:
- 状態変更メソッドは
Either[Error, (NewState, Event)]を返す - ファクトリも
(State, Event)のペアを返す - 実装クラスは
privateで外部から直接構築できない - ドメインモデル内でPekkoのimportは一切ない
イベント定義(enum + バージョニング)
イベント設計ルール:
| ルール | 説明 | 例 | |
|---|---|---|---|
| 過去形で命名 | 「何が起きたか」を表す | Created, Renamed, Deleted | |
_V1サフィックス | スキーマ進化に対応 | Renamed_V1, Renamed_V2 | |
| 不変 | case classで自動的に保証 | ||
| 自己完結 | 変更前後の値を含む | oldName, newName | |
| 必須フィールド | id, entityId, occurredAt | すべてのイベントに共通 |
2. 集約の状態(enum)
状態遷移の型安全性:
NotCreated→Created(Created_V1イベントのみ)Created→Created(Renamed_V1)/Deleted(Deleted_V1)Deleted→ 遷移なし(どのイベントも受け付けない)
3. プロトコル定義(コマンド/リプライ)
プロトコル設計ルール:
- コマンドはすべて
sealed trait Commandを継承し、idを持つ - リプライはコマンドごとに専用の
sealed traitを定義する(CreateReply,RenameReply等) replyTo: ActorRef[XxxReply]で型安全な応答を保証- 成功/失敗をcase classで表現し、パターンマッチで網羅性チェック
4. 集約アクター(PersistenceEffector)
アクター実装ルール:
- ドメインロジックをアクターに書かない。 アクターは永続化とライフサイクル管理に徹する
- 状態ごとにハンドラ関数を分離し、受け付けるコマンドを限定する
effector.persistEvent(event) { _ => ... }でイベント永続化後にリプライ- ドメインモデルが
Leftを返したらリプライのみ(永続化しない) - ドメインモデルが
Rightを返したらイベントを永続化してからリプライ
5. ユースケース層(ZIO)
This is the start of the file. Read the full SKILL.md on GitHub.
Security
- Security scanPassed, 100 of 100Pattern checks on the skill's files.
- Model reviewPassed
Quality evaluation
- Task evaluationNot runNo evaluation yet. Run one in Skill Studio.
Source
- SKILL.md in the repositoryCheckingskills/pekko-cqrs-es-implementation/SKILL.md
Popularity
- Repository stars
- 74
- Repository forks
- 2
- 7-day trend score
- 22
Stars and forks are for the whole GitHub repository, not this skill alone. Refreshed 23 Mar 2026, 7 months ago.
Works with
Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.
- Claude Code
- Cursor
- GitHub Copilot
- Windsurf
- Codex
- Gemini CLI
- Cline
- Amp
- Roo Code
- Goose
- Continue
- Kilo Code
- Junie
- Trae
- OpenHands
- Qwen Code
- AI Agent
- Tabnine Chat
- Sourcegraph Cody
- Amazon Q
- Firebase Genkit
- Sweep
- Devin
- Phind
- Mentat
- Claude Desktop
- Aider
- GPT Pilot
- Plandex
- bolt.new
- v0
- Replit Agent
- Anse
- TypingMind
- BetterChatGPT
- LibreChat
- Warp AI
- Pieces
- Fig AI
Embed badge
[](https://verified-skill.com/skills/j5ik2o/okite-ai/pekko-cqrs-es-implementation)