workflow-orchestration-patterns
Temporalを使用した分散システム向けの耐久性あるワークフロー設計を支援します。ワークフローとアクティビティの分離、Sagaパターン、状態管理、決定論的制約を網羅しており、長時間稼働プロセス・分散トランザクション・マイクロサービスのオーケストレーション構築時に活用できます。
description の原文を見る
Design durable workflows with Temporal for distributed systems. Covers workflow vs activity separation, saga patterns, state management, and determinism constraints. Use when building long-running processes, distributed transactions, or microservice orchestration.
SKILL.md 本文
Workflow Orchestration Patterns
Temporal を使用したワークフロー オーケストレーション アーキテクチャをマスターし、基本的な設計判断、レジリエンス パターン、および信頼性の高い分散システム構築のベストプラクティスをカバーします。
ワークフロー オーケストレーションを使用する場合
理想的なユースケース (出典: docs.temporal.io)
- マルチステップ プロセス がマシン/サービス/データベースにまたがる場合
- 分散トランザクション がすべてが実行されるか何も実行されないかのセマンティクスを必要とする場合
- 長時間実行ワークフロー (数時間から数年) で自動的な状態永続化が必要な場合
- 障害復旧 が最後に成功したステップから再開する必要がある場合
- ビジネス プロセス: 予約、注文、キャンペーン、承認
- エンティティ ライフサイクル管理: 在庫追跡、アカウント管理、カート ワークフロー
- インフラストラクチャ自動化: CI/CD パイプライン、プロビジョニング、デプロイメント
- 人間参加システム がタイムアウトとエスカレーションを必要とする場合
使用しない場合
- シンプルな CRUD 操作 (直接 API 呼び出しを使用)
- 純粋なデータ処理パイプライン (Airflow やバッチ処理を使用)
- ステートレスな要求/応答 (標準 API を使用)
- リアルタイム ストリーミング (Kafka やイベント プロセッサを使用)
重要な設計判断: ワークフロー vs アクティビティ
基本ルール (出典: temporal.io/blog/workflow-engine-principles):
- ワークフロー = オーケストレーション ロジックと意思決定
- アクティビティ = 外部インタラクション (API、データベース、ネットワーク呼び出し)
ワークフロー (オーケストレーション)
特性:
- ビジネス ロジックと調整を含む
- 決定論的である必要があります (同じ入力 → 同じ出力)
- 直接外部呼び出しを実行できません
- 状態は障害全体で自動的に保持される
- インフラストラクチャ障害にもかかわらず数年実行できる
ワークフロー タスクの例:
- 実行するステップを決定する
- 補償ロジックを処理する
- タイムアウトと再試行を管理する
- 子ワークフローを調整する
アクティビティ (外部インタラクション)
特性:
- すべての外部システム インタラクションを処理する
- 非決定論的にできる (API 呼び出し、DB 書き込み)
- 組み込みのタイムアウトと再試行ロジック
- べき等である必要があります (N 回呼び出す = 1 回呼び出す)
- 短命 (通常は秒から分)
アクティビティ タスクの例:
- 支払いゲートウェイ API を呼び出す
- データベースに書き込む
- メールまたは通知を送信する
- 外部サービスをクエリする
設計判断フレームワーク
外部システムに接触するか? → アクティビティ
オーケストレーション/意思決定ロジックか? → ワークフロー
コア ワークフロー パターン
1. 補償を伴う Saga パターン
目的: ロールバック機能を備えた分散トランザクションを実装する
パターン (出典: temporal.io/blog/compensating-actions-part-of-a-complete-breakfast-with-sagas):
各ステップに対して:
1. 実行する前に補償を登録する
2. ステップを実行する (アクティビティ経由)
3. 障害時に、すべての補償を逆順 (LIFO) で実行する
例: 支払いワークフロー
- インベントリを予約 (補償: インベントリを解放)
- 支払いを請求 (補償: 支払いを払い戻し)
- 注文を履行 (補償: 履行をキャンセル)
重要な要件:
- 補償はべき等である必要がある
- ステップを実行する前に補償を登録する
- 補償を逆順で実行する
- 部分的な障害を適切に処理する
2. エンティティ ワークフロー (アクター モデル)
目的: 単一のエンティティ インスタンスを表す長時間実行ワークフロー
パターン (出典: docs.temporal.io/evaluate/use-cases-design-patterns):
- 1 つのワークフロー実行 = 1 つのエンティティ (カート、アカウント、在庫品)
- ワークフローはエンティティの存続期間中実行される
- 状態変化のシグナルを受信する
- 現在の状態をクエリできる
ユースケース例:
- ショッピング カート (アイテム追加、チェックアウト、有効期限)
- 銀行口座 (預金、出金、残高確認)
- 製品在庫 (在庫更新、予約)
メリット:
- エンティティ動作をカプセル化する
- エンティティごとの一貫性を保証する
- 自然なイベント ソーシング
3. Fan-Out/Fan-In (並列実行)
目的: 複数のタスクを並列実行し、結果を集約する
パターン:
- 子ワークフローまたは並列アクティビティをスポーンする
- すべての完了を待つ
- 結果を集約する
- 部分的な障害を処理する
スケーリング ルール (出典: temporal.io/blog/workflow-engine-principles):
- 個別のワークフローをスケーリングしない
- 100 万タスク用: 1000 個の子ワークフロー × 各 1000 タスク
- 各ワークフローをバウンドに保つ
4. 非同期コールバック パターン
目的: 外部イベントまたは人間の承認を待つ
パターン:
- ワークフローがリクエストを送信して、シグナルを待つ
- 外部システムが非同期に処理する
- ワークフローを再開するシグナルを送信する
- ワークフローは応答で続行する
ユースケース:
- 人間による承認ワークフロー
- Webhook コールバック
- 長時間実行される外部プロセス
状態管理と決定論性
自動的な状態保持
Temporal の動作方法 (出典: docs.temporal.io/workflows):
- プログラム全体の状態が自動的に保持される
- イベント履歴がすべてのコマンドとイベントを記録する
- クラッシュからのシームレスな復旧
- アプリケーションは障害前の状態を復元する
決定論性の制約
ワークフローは状態マシンとして実行されます:
- リプレイ動作は一貫している必要があります
- 同じ入力 → 毎回同じ出力
ワークフローで禁止 (出典: docs.temporal.io/workflows):
- ❌ スレッド、ロック、同期プリミティブ
- ❌ 乱数生成 (
random()) - ❌ グローバル状態または静的変数
- ❌ システム時刻 (
datetime.now()) - ❌ 直接ファイル I/O またはネットワーク呼び出し
- ❌ 非決定論的ライブラリ
ワークフローで許可:
- ✅
workflow.now()(決定論的時刻) - ✅
workflow.random()(決定論的乱数) - ✅ 純粋関数と計算
- ✅ アクティビティを呼び出す (非決定論的操作)
バージョニング戦略
課題: 古い実行がまだ実行中の間にワークフロー コードを変更する
解決策:
- バージョニング API: 安全な変更に
workflow.get_version()を使用する - 新しいワークフロー タイプ: 新しいワークフローを作成し、新しい実行をそれにルーティングする
- 後方互換性: 古いイベントが正しくリプレイされることを確認する
レジリエンスとエラー処理
再試行ポリシー
デフォルト動作: Temporal はアクティビティを無期限に再試行する
再試行を構成する:
- 初期再試行間隔
- バックオフ係数 (指数バックオフ)
- 最大間隔 (再試行遅延を上限設定)
- 最大試行回数 (最終的に失敗)
再試行不可のエラー:
- 無効な入力 (検証失敗)
- ビジネス ルール違反
- 永続的な失敗 (リソースが見つからない)
べき等性の要件
重要な理由 (出典: docs.temporal.io/activities):
- アクティビティは複数回実行される可能性がある
- ネットワーク障害は再試行をトリガーする
- 重複実行は安全である必要がある
実装戦略:
- べき等性キー (重複排除)
- 一意の制約を伴う確認後実行
- 挿入の代わりにアップサート操作
- 処理されたリクエスト ID を追跡する
アクティビティ ハートビート
目的: 失速した長時間実行アクティビティを検出する
パターン:
- アクティビティが定期的にハートビートを送信する
- 進捗情報を含める
- ハートビートを受信しない場合タイムアウト
- 進捗ベースの再試行を有効にする
ベストプラクティス
ワークフロー設計
- ワークフローに焦点を当てる - ワークフローごとに単一の責任
- 小さなワークフロー - スケーラビリティのために子ワークフローを使用する
- 明確な境界 - ワークフロー はオーケストレーション、アクティビティは実行
- ローカルでテストする - 時間スキップ テスト環境を使用する
アクティビティ設計
- べき等操作 - 再試行しても安全
- 短命 - 秒から分、時間ではない
- タイムアウト構成 - 常にタイムアウトを設定する
- 長いタスクのハートビート - 進捗を報告する
- エラー処理 - 再試行可能と再試行不可を区別する
よくある落とし穴
ワークフロー違反:
workflow.now()の代わりにdatetime.now()を使用- ワークフロー コードでのスレッドまたは非同期操作
- ワークフローから直接外部 API を呼び出す
- ワークフローでの非決定論的ロジック
アクティビティの間違い:
- べき等でない操作 (再試行を処理できない)
- タイムアウトを欠く (アクティビティが無期限に実行)
- エラー分類を欠く (検証エラーを再試行)
- ペイロード制限を無視 (引数あたり 2MB)
運用上の考慮事項
監視:
- ワークフロー実行期間
- アクティビティ障害率
- 再試行試行回数とバックオフ
- 保留中のワークフロー数
スケーラビリティ:
- ワーカーを使用した水平スケーリング
- タスク キュー パーティショニング
- 子ワークフロー分解
- 適切な場合のアクティビティ バッチ処理
追加リソース
公式ドキュメント:
- Temporal Core Concepts: docs.temporal.io/workflows
- Workflow Patterns: docs.temporal.io/evaluate/use-cases-design-patterns
- Best Practices: docs.temporal.io/develop/best-practices
- Saga Pattern: temporal.io/blog/saga-pattern-made-easy
主要原則:
- ワークフロー = オーケストレーション、アクティビティ = 外部呼び出し
- 決定論性はワークフローでは譲歩の余地がない
- べき等性はアクティビティに不可欠
- 状態保持は自動的
- 障害と復旧を見据えた設計
ライセンス: MIT(寛容ライセンスのため全文を引用しています) · 原本リポジトリ
詳細情報
- 作者
- wshobson
- リポジトリ
- wshobson/agents
- ライセンス
- MIT
- 最終更新
- 不明
Source: https://github.com/wshobson/agents / ライセンス: MIT
関連スキル
nano-banana-2
inference.sh CLIを通じてGoogle Gemini 3.1 Flash Image Preview(Nano Banana 2)で画像を生成します。テキストから画像を生成する機能、画像編集、最大14枚の複数画像入力、Google Searchグラウンディング機能に対応しています。トリガーワード:「nano banana 2」「nanobanana 2」「gemini 3.1 flash image」「gemini 3 1 flash image preview」「google image generation」
octocode-slides
洗練されたマルチファイル形式のHTMLプレゼンテーションを生成します。6段階のフロー(概要 → リサーチ → アウトライン → デザイン → 実装 → レビュー)で構成されています。各スライドは独立したHTMLファイルとなり、iframeで読み込まれます。「スライドを作成してほしい」「プレゼンテーションを作ってほしい」「HTMLスライドを生成してほしい」「デックを構築してほしい」といった依頼や、ノート・ドキュメント・コードを洗練されたプレゼンテーションに変換する際に使用できます。
gpt-image2-ppt
OpenAIのgpt-image-2を使用して、視覚的に優れたPPTスライドを生成します。Spatial Glass、Tech Blue、Editorial Monoなど10種類のキュレーション済みスタイルに対応し、ユーザーが提供したPPTXファイルを模倣するテンプレートクローンモードも搭載しています。HTMLビューアと16:9形式のPPTXファイルを出力します。プレゼンテーション、スライド、ピッチデック、投資家向けPPT、雑誌風PPTの作成依頼などで活用してください。
nano-banana
Nano Banana PRO(Gemini 3 Pro Image)およびNano Banana(Gemini 2.5 Flash Image)を使用したAI画像生成機能です。以下の場合に活用できます:(1)テキストプロンプトからの画像生成、(2)既存画像の編集、(3)インフォグラフィックス、ロゴ、商品写真、ステッカーなどのプロフェッショナルなビジュアルアセット制作、(4)複数画像での人物キャラクターの一貫性保持、(5)正確なテキスト描画を含む画像生成、(6)AI生成ビジュアルが必要なあらゆるタスク。「画像を生成」「画像を作成」「写真を作る」「ロゴをデザイン」「インフォグラフィックスを作成」「AI画像」「nano banana」またはその他の画像生成リクエストをトリガーとして機能します。
oiloil-ui-ux-guide
モダンでクリーンなUI/UXガイダンス・レビュースキルです。新機能や既存システム(Webアプリ)に対して、実行可能なUI/UX改善提案、デザイン原則、デザインレビューチェックリストが必要な場合に活用できます。CRAP(コントラスト・反復・配置・近接)をベースに、タスクファーストなUX、情報設計、フィードバック・システムステータス、一貫性、affordances、エラー防止・復旧、認知負荷を重視します。モダンミニマルスタイル(クリーン・余白・タイポグラフィ主導)を強制し、不要なテキストを削減、アイコンとしての絵文字を禁止し、統一されたアイコンセットから直感的で洗練されたアイコンを推奨します。
axiom-hig-ref
Apple Human Interface Guidelines リファレンス — 色(セマンティックカラー、カスタムカラー、パターン)、背景(マテリアル階層、ダイナミック背景)、タイポグラフィ(標準スタイル、カスタムフォント、Dynamic Type)、SF Symbols(レンダリングモード、色、多言語対応)、ダークモード、アクセシビリティ、プラットフォーム固有の考慮事項を網羅したガイドラインです。