building-restate-services について
building-restate-servicesは、TypeScript、Python、Java、GoのプロジェクトでRestateサービスを設計・実装するためのコーディングエージェント向けスキルです。プロジェクト検出、状況に応じた資料、必須の検証項目を通じて、耐久実行や呼び出し管理、エージェントのワークフローを扱います。
主な機能
- 01SDKと言語、プロジェクトの状況を検出
- 02必要に応じて設計資料を参照
- 03Restate CLIの操作ガイド
- 04決定性と副作用の扱いを確認
- 05ハンドラー変更時のリプレイテストを必須化
活用シーン
- 01既存プロジェクトでのRestateサービス設計
- 02アプリケーションやオーケストレーターのRestate移行
- 03耐久性のあるエージェントワークフローの構築と検証
MCP 対応
テスト、デプロイ、サーバー設定、Kafkaなどの資料参照には、同梱のrestate-docs MCPサーバーを利用するよう記載されています。
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ restatedev/ skills --skill building-restate-servicesインストール後、Claude Code で/building-restate-servicesを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/ai-agents.mddebug-applications.mddesign-and-architecture.mdflow-control-and-scopes.mdinvocation-lifecycle.mdtranslate-to-restate.mdreferences/go/api-and-pitfalls.mdreferences/java/api-and-pitfalls.mdreferences/python/api-and-pitfalls.mdrestate-google-adk-agents.mdrestate-langchain-agents.mdrestate-openai-agents-agents.mdrestate-pydantic-ai-agents.mdreferences/ts/api-and-pitfalls.mdrestate-vercel-ai-agents.md詳細
Restate
Restate は永続実行ランタイムです。ハンドラーの各ステップをジャーナルに記録するため、プロセスがクラッシュしても、ハンドラーはジャーナルから再実行され、中断した箇所から正確に処理を再開します。サービスは Restate SDK(TypeScript、Python、Java、Go)を使用する通常のアプリケーションで、Restate Server(ポート 8080 でイングレス、9070 で管理 UI を提供する単一の Rust バイナリ)の背後で実行されます。
コンテキストを検出する
プロジェクトをスキャンして、SDK とコンテキストを判断します。
-
SDK を検出する:
@restatedev/restate-sdkを含むpackage.json→ TypeScriptrestate-sdkを含むrequirements.txtまたはpyproject.toml→ Pythondev.restateを含むpom.xmlまたはbuild.gradle→ Javagithub.com/restatedev/sdk-goを含むgo.mod→ Go- SDK が検出されない場合は、プロジェクトファイルを確認して言語を判断し、ユーザーに尋ねます
-
既存の Restate コードを検出する:
@restatedev、restate-sdk、dev.restate.sdk、github.com/restatedevを grep します -
AI フレームワークを検出する:
@ai-sdk/、openai-agents、google-adk、pydantic-ai、langchain、langgraph -
ワークフローオーケストレーターを検出する:
temporalio、@temporalio、aws-cdk/aws-stepfunctionsなど
コアリファレンス(常に読み込む)
SDK の検出後、SDK のリファレンスを必ず読み込みます。
references/<sdk>/api-and-pitfalls.md- 検出された SDK のセットアップ、API パターン、決定性ルール、エラー処理、注意点
コンテキストに基づくリファレンス(関連する場合に読み込む)
| コンテキスト | リファレンス |
|---|---|
| 新しいアプリケーションを設計する、サービスの種類を選ぶ | references/design-and-architecture.md |
| 並行処理の制限、マルチテナントの公平性、コスト管理、スコープ、または制限キーを追加する | references/flow-control-and-scopes.md |
| ワークフローオーケストレーターまたは既存アプリから移行する | references/translate-to-restate.md |
| サービスを呼び出す、呼び出しを操作する(キャンセル、アタッチ、冪等性、送信、Kafka) | references/invocation-lifecycle.md |
| AI エージェントを設計する、永続性の境界を選ぶ、または未対応の LLM/エージェント SDK を使用する | references/ai-agents.md |
| Vercel AI SDK で AI エージェントを構築する | references/ts/restate-vercel-ai-agents.md |
| OpenAI Agents SDK で AI エージェントを構築する | references/python/restate-openai-agents-agents.md |
| Google ADK で AI エージェントを構築する | references/python/restate-google-adk-agents.md |
| Pydantic AI で AI エージェントを構築する | references/python/restate-pydantic-ai-agents.md |
| LangChain または LangGraph で AI エージェントを構築する | references/python/restate-langchain-agents.md |
| エラー、停止した呼び出し、ジャーナルの不一致をデバッグする | references/debug-applications.md |
| デプロイを登録する、呼び出しを調査または管理する、状態を読み取りまたは編集する、サーバーにクエリする | Restate CLI |
| テスト、デプロイ、サーバー設定、Kafka、高度なトピック | 同梱の restate-docs MCP サーバーを使用します |
| コード例とテンプレート | restate example --list --json、github.com/restatedev/examples、github.com/restatedev/ai-examples |
| TypeScript エージェントの完全なリファレンスアーキテクチャ | restatedev/agent |
Restate CLI
実行中の Restate Server を操作するには、restate CLI を使用します。デプロイメントの登録、呼び出しの確認と管理、状態の読み取りと編集、SQL によるサーバー内部の照会を行えます。
CLI は自分自身について説明するので、コマンドやフラグを推測するのではなく、何を実行すべきか CLI に尋ねてください。
restate --helpでは、エージェントが CLI をどのように使うべきかを確認できます。restate <command> --helpでは、コマンドのフラグと使用例を確認できます。restate search <what you want to do>では、タスクに適したコマンド、フラグ、または SQL テーブルを検索できます。たとえば、restate search retry a failed invocationのように指定します。restate sql --helpでは SQL による内部調査用のテーブルが一覧表示され、restate sql describe <table>では各テーブルの列が表示されます。- コマンドで対応できない操作には、
restate openapiで Admin API の仕様を出力します。
実行時には、次の点に注意してください。
- 常に
--jsonを指定してください。エラーも含め、出力全体が標準出力に単一の JSON ドキュメントとして出力され、コマンドが確認を求めることはありません。エラーにはkindが含まれ、多くの場合、次に実行するコマンドを示すnext_stepsも含まれます。 - 何かを変更するコマンド(登録、キャンセル、停止、削除、状態の編集など)は、
--jsonだけでは変更を適用しません。"applied": falseとapply_commandを含む変更予定を出力し、終了コード 3 で終了します。変更予定をユーザーに提示してから、--yesを付けて再実行してください。適用せずにプレビューするには--dry-runを使用します。 - CLI が接続しているサーバーを確認するには、
restate whoami --jsonを実行してください。デフォルトではローカルサーバー(localhost:9070の Admin API)に接続します。
これらの機能には CLI バージョン 1.8 以降が必要です。restate search が存在しない場合は、CLI のアップグレードをユーザーに依頼してください。
設計前のチェックリスト
Restate サービスのアーキテクチャを設計する前に、次の点を確認してください。
| 質問 | 参照先 |
|---|---|
| Restate のサービスタイプ、ステートフルエンティティ、キー設定、並行性について | references/design-and-architecture.md |
| 並行性の上限、テナント分離、下流サービスの保護について | references/flow-control-and-scopes.md |
| プロジェクト内の Restate 以外のオーケストレーターについて | references/translate-to-restate.md |
| 呼び出しの実行、キャンセル、重複排除、呼び出しへの接続について | references/invocation-lifecycle.md |
| エラー処理、補償、Saga について | エラー処理ガイド、Saga ガイド |
| AI エージェントまたは LLM 呼び出しについて | references/ai-agents.md、続いて関連するフレームワークのリファレンス |
完了前に必ず確認
以下のチェック項目はすべて必須です。
- すべての副作用、外部 I/O、DB 呼び出しが
ctx.run()でラップされている - ネイティブの乱数、時刻、スリープ、UUID を使用していない。ctx ヘルパーを使用する
- Restate の並行処理コンビネーターのみを使用している(
Promise.all、asyncio.gather/wait、CompletableFuture、goroutine とチャネル、selectは使用しない) -
ctx.run()内で ctx 操作を行っていない - リトライ不可能な失敗には
TerminalErrorを送出している - Python:裸の
except:を使用していない - AI エージェント:
references/ai-agents.mdを読み込み、すべての LLM 呼び出しとツールの副作用をジャーナルに記録し、上限のあるリトライポリシーを設定している - Virtual Objects:デッドロックの循環がない
- サービスを登録し、curl または UI 経由で呼び出している
リプレイテスト — ハンドラーのロジックを変更した場合は必須
ハンドラーのビジネスロジックを変更する場合(新しい ctx 操作、ステップの並べ替え、新しい ctx.run() ブロック、新しい分岐の追加など)は、always-replay を有効にした Testcontainers テストでカバーし、そのテストが通るまで作業を完了したと見なしてはいけません。Always-replay を有効にすると、呼び出しのたびにジャーナルに記録されたすべてのステップがリプレイされるため、非決定性がある場合、本番環境でのリトライ時ではなくテストで失敗します。
- TypeScript:
RestateTestEnvironment.startでalwaysReplay: trueを設定 - Python:
restate.create_test_harnessでalways_replay=Trueを設定 - Java / Go:Restate コンテナで
RESTATE_WORKER__INVOKER__INACTIVITY_TIMEOUT=0mを設定
動作するスキャフォールドについては、references/<sdk>/api-and-pitfalls.md の Testing セクションを参照してください。